Update git submodules
[LibreOffice.git] / vcl / unx / gtk3 / hudawareness.cxx
blobebcbaf747fca3fc997ee712a244476c575001d12
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/hudawareness.h>
14 namespace {
16 struct HudAwarenessHandle
18 gpointer connection;
19 HudAwarenessCallback callback;
20 gpointer user_data;
21 GDestroyNotify notify;
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, nullptr);
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 (static_cast<void *>(&vtable), 0, sizeof (vtable));
65 vtable.method_call = hud_awareness_method_call;
67 if G_UNLIKELY (iface == nullptr)
69 GError *local_error = nullptr;
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 != nullptr);
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 = 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 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */