Branch libreoffice-5-0-4
[LibreOffice.git] / vcl / unx / gtk / window / hudawareness.cxx
blob947f404f9d52604da8be227bd6bac70f9034a6bf
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
10 #include <string.h>
12 #include <unx/gtk/gtksalmenu.hxx>
14 #ifdef ENABLE_GMENU_INTEGRATION
16 #include <unx/gtk/hudawareness.h>
18 typedef struct
20 GDBusConnection *connection;
21 HudAwarenessCallback callback;
22 gpointer user_data;
23 GDestroyNotify notify;
24 } HudAwarenessHandle;
26 static void
27 hud_awareness_method_call (GDBusConnection * /* connection */,
28 const gchar * /* sender */,
29 const gchar * /* object_path */,
30 const gchar * /* interface_name */,
31 const gchar *method_name,
32 GVariant *parameters,
33 GDBusMethodInvocation *invocation,
34 gpointer user_data)
36 HudAwarenessHandle *handle = static_cast<HudAwarenessHandle*>(user_data);
38 if (g_str_equal (method_name, "HudActiveChanged"))
40 gboolean active;
42 g_variant_get (parameters, "(b)", &active);
44 (* handle->callback) (active, handle->user_data);
47 g_dbus_method_invocation_return_value (invocation, NULL);
50 guint
51 hud_awareness_register (GDBusConnection *connection,
52 const gchar *object_path,
53 HudAwarenessCallback callback,
54 gpointer user_data,
55 GDestroyNotify notify,
56 GError **error)
58 static GDBusInterfaceInfo *iface;
59 static GDBusNodeInfo *info;
60 GDBusInterfaceVTable vtable;
61 HudAwarenessHandle *handle;
62 guint object_id;
64 memset ((void *)&vtable, 0, sizeof (vtable));
65 vtable.method_call = hud_awareness_method_call;
67 if G_UNLIKELY (iface == NULL)
69 GError *local_error = NULL;
71 info = g_dbus_node_info_new_for_xml ("<node>"
72 "<interface name='com.canonical.hud.Awareness'>"
73 "<method name='CheckAwareness'/>"
74 "<method name='HudActiveChanged'>"
75 "<arg type='b'/>"
76 "</method>"
77 "</interface>"
78 "</node>",
79 &local_error);
80 g_assert_no_error (local_error);
81 iface = g_dbus_node_info_lookup_interface (info, "com.canonical.hud.Awareness");
82 g_assert (iface != NULL);
85 handle = static_cast<HudAwarenessHandle*>(g_malloc (sizeof (HudAwarenessHandle)));
87 object_id = g_dbus_connection_register_object (connection, object_path, iface, &vtable, handle, &g_free, error);
89 if (object_id == 0)
91 g_free (handle);
92 return 0;
95 handle->connection = static_cast<GDBusConnection*>(g_object_ref (connection));
96 handle->callback = callback;
97 handle->user_data = user_data;
98 handle->notify = notify;
100 return object_id;
103 void
104 hud_awareness_unregister (GDBusConnection *connection,
105 guint subscription_id)
107 g_dbus_connection_unregister_object (connection, subscription_id);
110 #endif
112 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */