2
* This file is a part of the Cairo-Dock project
4
* Copyright : (C) see the 'copyright' file.
5
* E-mail : see the 'copyright' file.
7
* This program is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU General Public License
9
* as published by the Free Software Foundation; either version 3
10
* of the License, or (at your option) any later version.
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
23
#include "cairo-dock-log.h"
24
#include "cairo-dock-dbus.h"
26
static DBusGConnection *s_pSessionConnexion = NULL;
27
static DBusGConnection *s_pSystemConnexion = NULL;
28
static DBusGProxy *s_pDBusSessionProxy = NULL;
29
static DBusGProxy *s_pDBusSystemProxy = NULL;
32
DBusGConnection *cairo_dock_get_session_connection (void)
34
if (s_pSessionConnexion == NULL)
36
GError *erreur = NULL;
37
s_pSessionConnexion = dbus_g_bus_get (DBUS_BUS_SESSION, &erreur);
40
cd_warning (erreur->message);
41
g_error_free (erreur);
42
s_pSessionConnexion = NULL;
45
return s_pSessionConnexion;
48
DBusGConnection *cairo_dock_get_system_connection (void)
50
if (s_pSystemConnexion == NULL)
52
GError *erreur = NULL;
53
s_pSystemConnexion = dbus_g_bus_get (DBUS_BUS_SYSTEM, &erreur);
56
cd_warning (erreur->message);
57
g_error_free (erreur);
58
s_pSystemConnexion = NULL;
61
return s_pSystemConnexion;
64
DBusGProxy *cairo_dock_get_main_proxy (void)
66
if (s_pDBusSessionProxy == NULL)
68
s_pDBusSessionProxy = cairo_dock_create_new_session_proxy (DBUS_SERVICE_DBUS,
72
return s_pDBusSessionProxy;
75
DBusGProxy *cairo_dock_get_main_system_proxy (void)
77
if (s_pDBusSystemProxy == NULL)
79
s_pDBusSystemProxy = cairo_dock_create_new_system_proxy (DBUS_SERVICE_DBUS,
83
return s_pDBusSystemProxy;
86
void cairo_dock_register_service_name (const gchar *cServiceName)
88
DBusGProxy *pProxy = cairo_dock_get_main_proxy ();
91
GError *erreur = NULL;
93
org_freedesktop_DBus_request_name (pProxy, cServiceName, 0, &request_ret, &erreur);
96
cd_warning ("Unable to register service: %s", erreur->message);
97
g_error_free (erreur);
102
gboolean cairo_dock_bdus_is_enabled (void)
104
return (cairo_dock_get_session_connection () != NULL && cairo_dock_get_system_connection () != NULL);
108
DBusGProxy *cairo_dock_create_new_session_proxy (const char *name, const char *path, const char *interface)
110
DBusGConnection *pConnection = cairo_dock_get_session_connection ();
111
if (pConnection != NULL)
112
return dbus_g_proxy_new_for_name (
121
DBusGProxy *cairo_dock_create_new_system_proxy (const char *name, const char *path, const char *interface)
123
DBusGConnection *pConnection = cairo_dock_get_system_connection ();
124
if (pConnection != NULL)
125
return dbus_g_proxy_new_for_name (
135
static inline gboolean _dbus_detect_application (const gchar *cName, DBusGProxy *pProxy)
137
g_return_val_if_fail (cName != NULL && pProxy != NULL, FALSE);
139
gchar **name_list = NULL;
140
gboolean bPresent = FALSE;
142
if(dbus_g_proxy_call (pProxy, "ListNames", NULL,
148
cd_message ("detection du service %s ...", cName);
150
for (i = 0; name_list[i] != NULL; i ++)
152
if (strcmp (name_list[i], cName) == 0)
159
g_strfreev (name_list);
163
gboolean cairo_dock_dbus_detect_application (const gchar *cName)
165
cd_message ("%s (%s)", __func__, cName);
166
DBusGProxy *pProxy = cairo_dock_get_main_proxy ();
167
return _dbus_detect_application (cName, pProxy);
170
gboolean cairo_dock_dbus_detect_system_application (const gchar *cName)
172
cd_message ("%s (%s)", __func__, cName);
173
DBusGProxy *pProxy = cairo_dock_get_main_system_proxy ();
174
return _dbus_detect_application (cName, pProxy);
178
gchar **cairo_dock_dbus_get_services (void)
180
DBusGProxy *pProxy = cairo_dock_get_main_proxy ();
181
gchar **name_list = NULL;
182
if(dbus_g_proxy_call (pProxy, "ListNames", NULL,
194
gboolean cairo_dock_dbus_get_boolean (DBusGProxy *pDbusProxy, const gchar *cAccessor)
196
GError *erreur = NULL;
197
gboolean bValue = FALSE;
198
dbus_g_proxy_call (pDbusProxy, cAccessor, &erreur,
200
G_TYPE_BOOLEAN, &bValue,
204
cd_warning (erreur->message);
205
g_error_free (erreur);
210
int cairo_dock_dbus_get_integer (DBusGProxy *pDbusProxy, const gchar *cAccessor)
212
GError *erreur = NULL;
214
dbus_g_proxy_call (pDbusProxy, cAccessor, &erreur,
220
cd_warning (erreur->message);
221
g_error_free (erreur);
227
guint cairo_dock_dbus_get_uinteger (DBusGProxy *pDbusProxy, const gchar *cAccessor)
229
GError *erreur = NULL;
231
dbus_g_proxy_call (pDbusProxy, cAccessor, &erreur,
233
G_TYPE_UINT, &iValue,
237
cd_warning (erreur->message);
238
g_error_free (erreur);
244
gchar *cairo_dock_dbus_get_string (DBusGProxy *pDbusProxy, const gchar *cAccessor)
246
GError *erreur = NULL;
247
gchar *cValue = NULL;
248
dbus_g_proxy_call (pDbusProxy, cAccessor, &erreur,
250
G_TYPE_STRING, &cValue,
254
cd_warning (erreur->message);
255
g_error_free (erreur);
260
guchar *cairo_dock_dbus_get_uchar (DBusGProxy *pDbusProxy, const gchar *cAccessor)
262
GError *erreur = NULL;
263
guchar* uValue = NULL;
265
dbus_g_proxy_call (pDbusProxy, cAccessor, &erreur,
267
G_TYPE_UCHAR, &uValue,
271
cd_warning (erreur->message);
272
g_error_free (erreur);
278
gdouble cairo_dock_dbus_get_double (DBusGProxy *pDbusProxy, const gchar *cAccessor)
280
GError *erreur = NULL;
283
dbus_g_proxy_call (pDbusProxy, cAccessor, &erreur,
285
G_TYPE_DOUBLE, &fValue,
289
cd_warning (erreur->message);
290
g_error_free (erreur);
296
gchar **cairo_dock_dbus_get_string_list (DBusGProxy *pDbusProxy, const gchar *cAccessor)
298
GError *erreur = NULL;
299
gchar **cValues = NULL;
300
dbus_g_proxy_call (pDbusProxy, cAccessor, &erreur,
302
G_TYPE_POINTER, &cValues,
306
cd_warning (erreur->message);
307
g_error_free (erreur);
312
GPtrArray *cairo_dock_dbus_get_array (DBusGProxy *pDbusProxy, const gchar *cAccessor)
314
GError *erreur = NULL;
315
GPtrArray *pArray = NULL;
316
dbus_g_proxy_call (pDbusProxy, cAccessor, &erreur,
318
dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &pArray,
322
cd_warning (erreur->message);
323
g_error_free (erreur);
330
void cairo_dock_dbus_call (DBusGProxy *pDbusProxy, const gchar *cCommand)
332
dbus_g_proxy_call_no_reply (pDbusProxy, cCommand,
338
void cairo_dock_dbus_get_properties (DBusGProxy *pDbusProxy, const gchar *cCommand, const gchar *cInterface, const gchar *cProperty, GValue *vProperties)
342
dbus_g_proxy_call(pDbusProxy, cCommand, &erreur,
343
G_TYPE_STRING, cInterface,
344
G_TYPE_STRING, cProperty,
346
G_TYPE_VALUE, vProperties,
351
cd_warning (erreur->message);
352
g_error_free (erreur);
358
void cairo_dock_dbus_get_property_in_value (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty, GValue *pProperty)
362
dbus_g_proxy_call(pDbusProxy, "Get", &erreur,
363
G_TYPE_STRING, cInterface,
364
G_TYPE_STRING, cProperty,
366
G_TYPE_VALUE, pProperty,
371
cd_warning (erreur->message);
372
g_error_free (erreur);
376
gboolean cairo_dock_dbus_get_property_as_boolean (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty)
379
cairo_dock_dbus_get_property_in_value (pDbusProxy, cInterface, cProperty, &v);
380
if (G_VALUE_HOLDS_BOOLEAN (&v))
381
return g_value_get_boolean (&v);
386
gint cairo_dock_dbus_get_property_as_int (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty)
389
cairo_dock_dbus_get_property_in_value (pDbusProxy, cInterface, cProperty, &v);
390
if (G_VALUE_HOLDS_INT (&v))
391
return g_value_get_int (&v);
396
guint cairo_dock_dbus_get_property_as_uint (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty)
399
cairo_dock_dbus_get_property_in_value (pDbusProxy, cInterface, cProperty, &v);
400
if (G_VALUE_HOLDS_UINT (&v))
401
return g_value_get_uint (&v);
406
guchar cairo_dock_dbus_get_property_as_uchar (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty)
409
cairo_dock_dbus_get_property_in_value (pDbusProxy, cInterface, cProperty, &v);
410
if (G_VALUE_HOLDS_UCHAR (&v))
411
return g_value_get_uchar (&v);
416
gdouble cairo_dock_dbus_get_property_as_double (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty)
419
cairo_dock_dbus_get_property_in_value (pDbusProxy, cInterface, cProperty, &v);
420
if (G_VALUE_HOLDS_DOUBLE (&v))
421
return g_value_get_double (&v);
426
gchar *cairo_dock_dbus_get_property_as_string (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty)
429
cairo_dock_dbus_get_property_in_value (pDbusProxy, cInterface, cProperty, &v);
430
if (G_VALUE_HOLDS_STRING (&v))
432
gchar *s = g_value_get_string (&v);
439
gchar *cairo_dock_dbus_get_property_as_object_path (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty)
442
cairo_dock_dbus_get_property_in_value (pDbusProxy, cInterface, cProperty, &v);
443
if (G_VALUE_HOLDS (&v, DBUS_TYPE_G_OBJECT_PATH))
445
gchar *s = g_value_get_string (&v);
452
gpointer cairo_dock_dbus_get_property_as_boxed (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty)
455
cairo_dock_dbus_get_property_in_value (pDbusProxy, cInterface, cProperty, &v);
456
if (G_VALUE_HOLDS_BOXED (&v))
458
gpointer p = g_value_get_boxed (&v);
465
GHashTable *cairo_dock_dbus_get_all_properties (DBusGProxy *pDbusProxy, const gchar *cInterface)
468
GHashTable *hProperties = NULL;
470
dbus_g_proxy_call(pDbusProxy, "GetAll", &erreur,
471
G_TYPE_STRING, cInterface,
473
(dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE)), &hProperties,
478
cd_warning (erreur->message);
479
g_error_free (erreur);
489
void cairo_dock_dbus_set_property (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty, GValue *pProperty)
493
dbus_g_proxy_call(pDbusProxy, "Set", &erreur,
494
G_TYPE_STRING, cInterface,
495
G_TYPE_STRING, cProperty,
496
G_TYPE_VALUE, pProperty,
502
cd_warning (erreur->message);
503
g_error_free (erreur);
507
void cairo_dock_dbus_set_boolean_property (DBusGProxy *pDbusProxy, const gchar *cInterface, const gchar *cProperty, gboolean bValue)
510
g_value_init (&v, G_TYPE_BOOLEAN);
511
g_value_set_boolean (&v, bValue);
512
cairo_dock_dbus_set_property (pDbusProxy, cInterface, cProperty, &v);