Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
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 : */
9 :
10 : #include <string.h>
11 :
12 : #include <unx/gtk/gtksalmenu.hxx>
13 :
14 : #ifdef ENABLE_GMENU_INTEGRATION
15 :
16 : #include <unx/gtk/hudawareness.h>
17 :
18 : typedef struct
19 : {
20 : GDBusConnection *connection;
21 : HudAwarenessCallback callback;
22 : gpointer user_data;
23 : GDestroyNotify notify;
24 : } HudAwarenessHandle;
25 :
26 : static void
27 0 : 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)
35 : {
36 0 : HudAwarenessHandle *handle = static_cast<HudAwarenessHandle*>(user_data);
37 :
38 0 : if (g_str_equal (method_name, "HudActiveChanged"))
39 : {
40 : gboolean active;
41 :
42 0 : g_variant_get (parameters, "(b)", &active);
43 :
44 0 : (* handle->callback) (active, handle->user_data);
45 : }
46 :
47 0 : g_dbus_method_invocation_return_value (invocation, NULL);
48 0 : }
49 :
50 : guint
51 16 : hud_awareness_register (GDBusConnection *connection,
52 : const gchar *object_path,
53 : HudAwarenessCallback callback,
54 : gpointer user_data,
55 : GDestroyNotify notify,
56 : GError **error)
57 : {
58 : static GDBusInterfaceInfo *iface;
59 : static GDBusNodeInfo *info;
60 : GDBusInterfaceVTable vtable;
61 : HudAwarenessHandle *handle;
62 : guint object_id;
63 :
64 16 : memset (static_cast<void *>(&vtable), 0, sizeof (vtable));
65 16 : vtable.method_call = hud_awareness_method_call;
66 :
67 16 : if G_UNLIKELY (iface == NULL)
68 : {
69 3 : GError *local_error = NULL;
70 :
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 3 : &local_error);
80 3 : g_assert_no_error (local_error);
81 3 : iface = g_dbus_node_info_lookup_interface (info, "com.canonical.hud.Awareness");
82 3 : g_assert (iface != NULL);
83 : }
84 :
85 16 : handle = static_cast<HudAwarenessHandle*>(g_malloc (sizeof (HudAwarenessHandle)));
86 :
87 16 : object_id = g_dbus_connection_register_object (connection, object_path, iface, &vtable, handle, &g_free, error);
88 :
89 16 : if (object_id == 0)
90 : {
91 0 : g_free (handle);
92 0 : return 0;
93 : }
94 :
95 16 : handle->connection = static_cast<GDBusConnection*>(g_object_ref (connection));
96 16 : handle->callback = callback;
97 16 : handle->user_data = user_data;
98 16 : handle->notify = notify;
99 :
100 16 : return object_id;
101 : }
102 :
103 : void
104 13 : hud_awareness_unregister (GDBusConnection *connection,
105 : guint subscription_id)
106 : {
107 13 : g_dbus_connection_unregister_object (connection, subscription_id);
108 13 : }
109 :
110 : #endif
111 :
112 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|