[Xfce4-commits] [xfce/xfce4-power-manager] 35/63: Ported xfpm-dbus-monitor to lowlevel commands.

noreply at xfce.org noreply at xfce.org
Sun Mar 22 13:02:30 CET 2015


This is an automated email from the git hooks/post-receive script.

eric pushed a commit to branch master
in repository xfce/xfce4-power-manager.

commit 0b7bb8c0215ca2d5f51e2c052cd7cfa3f8a0eecc
Author: Peter de Ridder <peter at xfce.org>
Date:   Sun Mar 15 15:39:04 2015 +0100

    Ported xfpm-dbus-monitor to lowlevel commands.
    
    This also removed system bus "exit on close" = false.
    Ideally this should be replaced by g_dbus_watch_name.
---
 libdbus/xfpm-dbus-monitor.c |  196 ++++++++++++++-----------------------------
 libdbus/xfpm-dbus-monitor.h |    9 +-
 2 files changed, 69 insertions(+), 136 deletions(-)

diff --git a/libdbus/xfpm-dbus-monitor.c b/libdbus/xfpm-dbus-monitor.c
index a2b5899..af6c29f 100644
--- a/libdbus/xfpm-dbus-monitor.c
+++ b/libdbus/xfpm-dbus-monitor.c
@@ -41,11 +41,11 @@ static void xfpm_dbus_monitor_finalize   (GObject *object);
 
 struct XfpmDBusMonitorPrivate
 {
-    DBusGConnection *system_bus;
-    DBusGConnection *session_bus;
+    GDBusConnection *system_bus;
+    GDBusConnection *session_bus;
 
-    DBusGProxy      *system_proxy;
-    DBusGProxy      *session_proxy;
+    guint            system_signal;
+    guint            session_signal;
     
     GPtrArray       *names_array;
     GPtrArray 	    *services_array;
@@ -54,7 +54,7 @@ struct XfpmDBusMonitorPrivate
 typedef struct
 {
     gchar 	*name;
-    DBusBusType  bus_type;
+    GBusType     bus_type;
     
 } XfpmWatchData;
 
@@ -78,7 +78,7 @@ xfpm_dbus_monitor_free_watch_data (XfpmWatchData *data)
 }
 
 static XfpmWatchData *
-xfpm_dbus_monitor_get_watch_data (GPtrArray *array, const gchar *name, DBusBusType bus_type)
+xfpm_dbus_monitor_get_watch_data (GPtrArray *array, const gchar *name, GBusType bus_type)
 {
     XfpmWatchData *data;
     guint i;
@@ -93,7 +93,7 @@ xfpm_dbus_monitor_get_watch_data (GPtrArray *array, const gchar *name, DBusBusTy
 }
 
 static void
-xfpm_dbus_monitor_unique_connection_name_lost (XfpmDBusMonitor *monitor, DBusBusType bus_type, const gchar *name)
+xfpm_dbus_monitor_unique_connection_name_lost (XfpmDBusMonitor *monitor, GBusType bus_type, const gchar *name)
 {
     XfpmWatchData *watch;
     guint i = 0;
@@ -105,7 +105,7 @@ xfpm_dbus_monitor_unique_connection_name_lost (XfpmDBusMonitor *monitor, DBusBus
 	if ( !g_strcmp0 (watch->name, name) && bus_type == watch->bus_type )
 	{
 	    g_signal_emit (G_OBJECT(monitor), signals [UNIQUE_NAME_LOST], 0, 
-			   watch->name, bus_type == DBUS_BUS_SESSION ? TRUE : FALSE);
+			   watch->name, bus_type == G_BUS_TYPE_SESSION ? TRUE : FALSE);
 	    g_ptr_array_remove (monitor->priv->names_array, watch);
 	    xfpm_dbus_monitor_free_watch_data (watch);
 	}
@@ -113,7 +113,7 @@ xfpm_dbus_monitor_unique_connection_name_lost (XfpmDBusMonitor *monitor, DBusBus
 }
 
 static void
-xfpm_dbus_monitor_service_connection_changed (XfpmDBusMonitor *monitor, DBusBusType bus_type, 
+xfpm_dbus_monitor_service_connection_changed (XfpmDBusMonitor *monitor, GBusType bus_type, 
 					      const gchar *name, gboolean connected)
 {
     XfpmWatchData *watch;
@@ -126,14 +126,14 @@ xfpm_dbus_monitor_service_connection_changed (XfpmDBusMonitor *monitor, DBusBusT
 	if ( !g_strcmp0 (watch->name, name) && watch->bus_type == bus_type)
 	{
 	    g_signal_emit (G_OBJECT (monitor), signals [SERVICE_CONNECTION_CHANGED], 0,
-			   name, connected, bus_type == DBUS_BUS_SESSION ? TRUE : FALSE);
+			   name, connected, bus_type == G_BUS_TYPE_SESSION ? TRUE : FALSE);
 	}
     }
 }
 
 static void
 xfpm_dbus_monitor_name_owner_changed (XfpmDBusMonitor *monitor, const gchar *name,
-				      const gchar *prev, const gchar *new, DBusBusType bus_type)
+				      const gchar *prev, const gchar *new, GBusType bus_type)
 {
     if ( strlen (prev) != 0 )
     {
@@ -150,110 +150,67 @@ xfpm_dbus_monitor_name_owner_changed (XfpmDBusMonitor *monitor, const gchar *nam
 }
 
 static void
-xfpm_dbus_monitor_session_name_owner_changed_cb (DBusGProxy *proxy, const gchar *name,
-						 const gchar *prev, const gchar *new,
-						 XfpmDBusMonitor *monitor)
+xfpm_dbus_monitor_session_name_owner_changed_cb (GDBusConnection *connection, const gchar *sender,
+						 const gchar *object_path, const gchar *interface_name,
+						 const gchar *signal_name, GVariant *parameters,
+						 gpointer monitor)
 {
-    xfpm_dbus_monitor_name_owner_changed (monitor, name, prev, new, DBUS_BUS_SESSION);
-}
-
-static void
-xfpm_dbus_monitor_system_name_owner_changed_cb  (DBusGProxy *proxy, const gchar *name,
-						 const gchar *prev, const gchar *new,
-						 XfpmDBusMonitor *monitor)
-{
-    xfpm_dbus_monitor_name_owner_changed (monitor, name, prev, new, DBUS_BUS_SYSTEM);
-}
+    const gchar *name, *prev, *new;
 
-static gboolean
-xfpm_dbus_monitor_query_system_bus_idle (gpointer data)
-{
-    XfpmDBusMonitor *monitor;
-    DBusGConnection *bus;
-    GError *error = NULL;
+    g_variant_get (parameters,
+                   "(&s&s&s)",
+                   &name,
+                   &prev,
+                   &new);
 
-    bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
-    
-    if ( error )
-    {
-	TRACE ("System bus is not connected  %s:", error->message);
-	g_error_free (error);
-	return TRUE;
-    }
-    
-    
-    monitor = XFPM_DBUS_MONITOR (data);
-    monitor->priv->system_bus = bus;
-    g_signal_emit (G_OBJECT (monitor), signals [SYSTEM_BUS_CONNECTION_CHANGED], 0, TRUE);
-    
-    return FALSE;
+    xfpm_dbus_monitor_name_owner_changed (monitor, name, prev, new, G_BUS_TYPE_SESSION);
 }
 
 static void
-xfpm_dbus_monitor_setup_system_watch (XfpmDBusMonitor *monitor)
+xfpm_dbus_monitor_system_name_owner_changed_cb  (GDBusConnection *connection, const gchar *sender,
+						 const gchar *object_path, const gchar *interface_name,
+						 const gchar *signal_name, GVariant *parameters,
+						 gpointer monitor)
 {
-    g_timeout_add_seconds (2, (GSourceFunc) xfpm_dbus_monitor_query_system_bus_idle, monitor);
-}
+    const gchar *name, *prev, *new;
 
-static DBusHandlerResult
-xfpm_dbus_monitor_system_bus_filter (DBusConnection *bus, DBusMessage *message, void *data)
-{
-    XfpmDBusMonitor *monitor;
-    
-    if ( dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected") )
-    {
-	TRACE ("System bus is disconnected");
-	monitor = XFPM_DBUS_MONITOR (data);
-	g_signal_emit (G_OBJECT (monitor), signals [SYSTEM_BUS_CONNECTION_CHANGED], 0, FALSE);
-	
-	xfpm_dbus_monitor_setup_system_watch (monitor);
-	
-	return DBUS_HANDLER_RESULT_HANDLED;
-    }
-    
-    return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+    g_variant_get (parameters,
+                   "(&s&s&s)",
+                   &name,
+                   &prev,
+                   &new);
+
+    xfpm_dbus_monitor_name_owner_changed (monitor, name, prev, new, G_BUS_TYPE_SYSTEM);
 }
 
 static void
 xfpm_dbus_monitor_session (XfpmDBusMonitor *monitor)
 {
-    monitor->priv->session_proxy = dbus_g_proxy_new_for_name_owner (monitor->priv->session_bus,
-								    "org.freedesktop.DBus",
-								    "/org/freedesktop/DBus",
-								    "org.freedesktop.DBus",
-								    NULL);
-    if ( !monitor->priv->session_proxy )
-    {
-	g_critical ("Unable to create proxy on /org/freedesktop/DBus");
-	return;
-    }
-    
-    dbus_g_proxy_add_signal (monitor->priv->session_proxy, "NameOwnerChanged", 
-			     G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-			     
-    dbus_g_proxy_connect_signal (monitor->priv->session_proxy, "NameOwnerChanged",
-				 G_CALLBACK (xfpm_dbus_monitor_session_name_owner_changed_cb), monitor, NULL);
+    monitor->priv->session_signal =
+        g_dbus_connection_signal_subscribe (monitor->priv->session_bus,
+					    "org.freedesktop.DBus",
+					    "org.freedesktop.DBus",
+                                            "NameOwnerChanged",
+					    "/org/freedesktop/DBus",
+					    NULL,
+					    G_DBUS_SIGNAL_FLAGS_NONE,
+					    xfpm_dbus_monitor_session_name_owner_changed_cb,
+					    monitor, NULL);
 }
 
 static void
 xfpm_dbus_monitor_system (XfpmDBusMonitor *monitor)
 {
-    monitor->priv->system_proxy = dbus_g_proxy_new_for_name_owner (monitor->priv->system_bus,
-								   "org.freedesktop.DBus",
-								   "/org/freedesktop/DBus",
-								   "org.freedesktop.DBus",
-								   NULL);
-    if ( !monitor->priv->system_proxy )
-    {
-	g_critical ("Unable to create proxy on /org/freedesktop/DBus");
-	return;
-    }
-    
-    dbus_g_proxy_add_signal (monitor->priv->system_proxy, "NameOwnerChanged", 
-			     G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-			     
-    dbus_g_proxy_connect_signal (monitor->priv->system_proxy, "NameOwnerChanged",
-				 G_CALLBACK (xfpm_dbus_monitor_system_name_owner_changed_cb), monitor, NULL);
+    monitor->priv->system_signal =
+        g_dbus_connection_signal_subscribe (monitor->priv->system_bus,
+					    "org.freedesktop.DBus",
+					    "org.freedesktop.DBus",
+                                            "NameOwnerChanged",
+					    "/org/freedesktop/DBus",
+					    NULL,
+					    G_DBUS_SIGNAL_FLAGS_NONE,
+					    xfpm_dbus_monitor_system_name_owner_changed_cb,
+					    monitor, NULL);
 }
 
 static void
@@ -300,25 +257,14 @@ xfpm_dbus_monitor_init (XfpmDBusMonitor *monitor)
 {
     monitor->priv = XFPM_DBUS_MONITOR_GET_PRIVATE (monitor);
     
-    monitor->priv->session_proxy = NULL;
-    monitor->priv->system_proxy  = NULL;
-    
     monitor->priv->names_array = g_ptr_array_new ();
     monitor->priv->services_array = g_ptr_array_new ();
          
-    monitor->priv->session_bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
-    monitor->priv->system_bus  = dbus_g_bus_get (DBUS_BUS_SYSTEM,  NULL);
+    monitor->priv->session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
+    monitor->priv->system_bus  = g_bus_get_sync (G_BUS_TYPE_SYSTEM,  NULL, NULL);
     
     xfpm_dbus_monitor_session (monitor);
     xfpm_dbus_monitor_system  (monitor);
-    
-    dbus_connection_set_exit_on_disconnect (dbus_g_connection_get_connection (monitor->priv->system_bus), 
-					    FALSE);
-    
-    dbus_connection_add_filter (dbus_g_connection_get_connection (monitor->priv->system_bus),
-			        xfpm_dbus_monitor_system_bus_filter,
-				monitor, 
-				NULL);
 }
 
 static void
@@ -328,26 +274,12 @@ xfpm_dbus_monitor_finalize (GObject *object)
 
     monitor = XFPM_DBUS_MONITOR (object);
     
-    if ( monitor->priv->session_proxy )
-    {
-	dbus_g_proxy_disconnect_signal (monitor->priv->session_proxy, "NameOwnerChanged",
-					G_CALLBACK (xfpm_dbus_monitor_session_name_owner_changed_cb), monitor);
-	g_object_unref (monitor->priv->session_proxy);
-    }
-
-    if ( monitor->priv->system_proxy )
-    {
-	dbus_g_proxy_disconnect_signal (monitor->priv->system_proxy, "NameOwnerChanged",
-				        G_CALLBACK (xfpm_dbus_monitor_system_name_owner_changed_cb), monitor);
-	g_object_unref (monitor->priv->system_proxy);
-    }
+    g_dbus_connection_signal_unsubscribe (monitor->priv->session_bus, monitor->priv->session_signal);
 
-    dbus_connection_remove_filter (dbus_g_connection_get_connection (monitor->priv->system_bus),
-				   xfpm_dbus_monitor_system_bus_filter,
-				   monitor);
+    g_dbus_connection_signal_unsubscribe (monitor->priv->system_bus, monitor->priv->system_signal);
 
-    dbus_g_connection_unref (monitor->priv->system_bus);
-    dbus_g_connection_unref (monitor->priv->session_bus);
+    g_object_unref (monitor->priv->system_bus);
+    g_object_unref (monitor->priv->session_bus);
 
     g_ptr_array_foreach (monitor->priv->names_array, (GFunc) xfpm_dbus_monitor_free_watch_data, NULL);
     g_ptr_array_foreach (monitor->priv->services_array, (GFunc) xfpm_dbus_monitor_free_watch_data, NULL);
@@ -376,7 +308,7 @@ xfpm_dbus_monitor_new (void)
     return XFPM_DBUS_MONITOR (xfpm_dbus_monitor_object);
 }
 
-gboolean xfpm_dbus_monitor_add_unique_name (XfpmDBusMonitor *monitor, DBusBusType bus_type, const gchar *unique_name)
+gboolean xfpm_dbus_monitor_add_unique_name (XfpmDBusMonitor *monitor, GBusType bus_type, const gchar *unique_name)
 {
     XfpmWatchData *watch;
     
@@ -395,7 +327,7 @@ gboolean xfpm_dbus_monitor_add_unique_name (XfpmDBusMonitor *monitor, DBusBusTyp
     return TRUE;
 }
 
-void xfpm_dbus_monitor_remove_unique_name (XfpmDBusMonitor *monitor, DBusBusType bus_type, const gchar *unique_name)
+void xfpm_dbus_monitor_remove_unique_name (XfpmDBusMonitor *monitor, GBusType bus_type, const gchar *unique_name)
 {
     XfpmWatchData *watch;
     
@@ -410,7 +342,7 @@ void xfpm_dbus_monitor_remove_unique_name (XfpmDBusMonitor *monitor, DBusBusType
     }
 }
 
-gboolean xfpm_dbus_monitor_add_service (XfpmDBusMonitor *monitor, DBusBusType bus_type, const gchar *service_name)
+gboolean xfpm_dbus_monitor_add_service (XfpmDBusMonitor *monitor, GBusType bus_type, const gchar *service_name)
 {
     XfpmWatchData *watch;
     
@@ -428,7 +360,7 @@ gboolean xfpm_dbus_monitor_add_service (XfpmDBusMonitor *monitor, DBusBusType bu
     return TRUE;
 }
 
-void xfpm_dbus_monitor_remove_service (XfpmDBusMonitor *monitor, DBusBusType bus_type, const gchar *service_name)
+void xfpm_dbus_monitor_remove_service (XfpmDBusMonitor *monitor, GBusType bus_type, const gchar *service_name)
 {
     XfpmWatchData *watch;
     
diff --git a/libdbus/xfpm-dbus-monitor.h b/libdbus/xfpm-dbus-monitor.h
index 168c47b..2ffedd8 100644
--- a/libdbus/xfpm-dbus-monitor.h
+++ b/libdbus/xfpm-dbus-monitor.h
@@ -22,6 +22,7 @@
 #define __XFPM_DBUS_MONITOR_H
 
 #include <glib-object.h>
+#include <gio/gio.h>
 
 G_BEGIN_DECLS
 
@@ -72,19 +73,19 @@ XfpmDBusMonitor        *xfpm_dbus_monitor_new             	(void);
 void			xfpm_dbus_monitor_watch_system_bus	(XfpmDBusMonitor *monitor);
 
 gboolean                xfpm_dbus_monitor_add_unique_name     	(XfpmDBusMonitor *monitor,
-								 DBusBusType bus_type,
+								 GBusType bus_type,
 								 const gchar *unique_name);
 								   
 void                    xfpm_dbus_monitor_remove_unique_name    (XfpmDBusMonitor *monitor,
-								 DBusBusType bus_type,
+								 GBusType bus_type,
 								 const gchar *unique_name);
 
 gboolean		xfpm_dbus_monitor_add_service	  	(XfpmDBusMonitor *monitor,
-								 DBusBusType bus_type,
+								 GBusType bus_type,
 								 const gchar *service_name);
 
 void			xfpm_dbus_monitor_remove_service  	(XfpmDBusMonitor *monitor,
-								 DBusBusType bus_type,
+								 GBusType bus_type,
 								 const gchar *service_name);
 G_END_DECLS
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list