[Goodies-commits] r6604 - xfce4-power-manager/trunk/src

Ali Abdallah aliov at xfce.org
Fri Jan 30 11:41:32 CET 2009


Author: aliov
Date: 2009-01-30 10:41:32 +0000 (Fri, 30 Jan 2009)
New Revision: 6604

Modified:
   xfce4-power-manager/trunk/src/xfpm-dbus-messages.c
   xfce4-power-manager/trunk/src/xfpm-dbus-messages.h
   xfce4-power-manager/trunk/src/xfpm-driver.c
   xfce4-power-manager/trunk/src/xfpm-main.c
Log:
Reserve a bus name in the dbus session so we can easily detect if XFPM is running or not

Modified: xfce4-power-manager/trunk/src/xfpm-dbus-messages.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-dbus-messages.c	2009-01-30 09:43:19 UTC (rev 6603)
+++ xfce4-power-manager/trunk/src/xfpm-dbus-messages.c	2009-01-30 10:41:32 UTC (rev 6604)
@@ -270,3 +270,48 @@
         return;
     }         
 }
+
+gboolean xfpm_dbus_register_name(DBusConnection *connection)
+{
+    DBusError error;
+    
+    dbus_error_init(&error);
+    
+    int ret =
+	dbus_bus_request_name(connection,XFPM_PM_IFACE,0,&error);
+	
+	if ( dbus_error_is_set(&error) )
+	{
+		printf("Error: %s\n",error.message);
+		dbus_error_free(&error);
+		return FALSE;
+	}
+	
+	if ( ret == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER )
+	{
+		return TRUE;
+	}
+	
+	return FALSE;
+}
+
+gboolean xfpm_dbus_release_name(DBusConnection *connection)
+{
+    DBusError error;
+    
+    dbus_error_init(&error);
+    
+    int ret =
+    dbus_bus_release_name(connection,XFPM_PM_IFACE,&error);
+    
+    if ( dbus_error_is_set(&error) )
+    {
+        printf("Error: %s\n",error.message);
+        dbus_error_free(&error);
+        return FALSE;
+    }
+    
+    if ( ret == -1 ) return FALSE;
+    
+    return TRUE;
+}

Modified: xfce4-power-manager/trunk/src/xfpm-dbus-messages.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-dbus-messages.h	2009-01-30 09:43:19 UTC (rev 6603)
+++ xfce4-power-manager/trunk/src/xfpm-dbus-messages.h	2009-01-30 10:41:32 UTC (rev 6604)
@@ -38,5 +38,7 @@
 gboolean xfpm_dbus_send_message_with_reply (const gchar *signal,gint *get_reply);
 gboolean xfpm_dbus_send_customize_message  (guint32 socket_id);
 void     xfpm_dbus_send_nm_message         (const gchar *signal);
+gboolean xfpm_dbus_register_name(DBusConnection *connection);
+gboolean xfpm_dbus_release_name();
 
 #endif /* __XFPM_DBUS_MESSAGES */

Modified: xfce4-power-manager/trunk/src/xfpm-driver.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-driver.c	2009-01-30 09:43:19 UTC (rev 6603)
+++ xfce4-power-manager/trunk/src/xfpm-driver.c	2009-01-30 10:41:32 UTC (rev 6604)
@@ -1246,6 +1246,8 @@
         
     }
     
+    xfpm_dbus_register_name(priv->conn);
+    
     xfpm_driver_load_config(drv);    
     _get_system_form_factor(priv);
     
@@ -1254,8 +1256,12 @@
     xfpm_driver_load_all(drv);
     
     g_main_loop_run(priv->loop);
+   
+    xfpm_dbus_release_name(priv->conn);
+      
+    dbus_connection_remove_filter(priv->conn,xfpm_driver_signal_filter,NULL);
     
-    dbus_connection_remove_filter(priv->conn,xfpm_driver_signal_filter,NULL);
+       
     xfconf_shutdown();
     
     return TRUE;

Modified: xfce4-power-manager/trunk/src/xfpm-main.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-main.c	2009-01-30 09:43:19 UTC (rev 6603)
+++ xfce4-power-manager/trunk/src/xfpm-main.c	2009-01-30 10:41:32 UTC (rev 6604)
@@ -185,15 +185,30 @@
 		return EXIT_FAILURE;
 	}
 	
+	DBusConnection *connection;
+	DBusError derror;
+	
+	dbus_error_init(&derror);
+	
+	connection = dbus_bus_get(DBUS_BUS_SESSION, &derror);
+	
+	if ( dbus_error_is_set(&derror) )
+	{
+	    xfpm_popup_message(_("Xfce power manager"),
+                                  _("Unable to run Xfce4 power manager, " \
+                                  "make sure the hardware abstract layer and the message bus daemon "\
+                                  "are running"),
+                                  GTK_MESSAGE_ERROR);
+                g_error(_("Unable to load xfce4 power manager"));
+                g_print("\n");
+        dbus_error_free(&derror);        
+        return EXIT_FAILURE;        
+	}
+	
 	if ( config )
 	{
-		int reply;
-        if (!xfpm_dbus_send_message_with_reply("Running",&reply))
-        {
-            return EXIT_FAILURE;
-        }
-        if ( reply != 1 )
-        {
+	    if (!xfpm_dbus_name_has_owner(connection,XFPM_PM_IFACE))
+	    {
             g_print(_("Xfce power manager is not running"));
 			g_print("\n");
             gboolean ret = 
@@ -205,56 +220,56 @@
                 g_spawn_command_line_async("xfce4-power-manager -r",NULL);
             }
             return EXIT_SUCCESS;
-        }
-        xfpm_dbus_send_customize_message(socket_id);
-        return EXIT_SUCCESS;
-	}
-	
+	    }
+	    else
+	    {
+	        xfpm_dbus_send_customize_message(socket_id);
+	        return EXIT_SUCCESS;
+	    }
+	}     
+	 
 	if ( run )
 	{
-		int reply;
-        if (!xfpm_dbus_send_message_with_reply("Running",&reply))
-        {
-            return EXIT_FAILURE;
-        }
-        
-        if ( reply == 1 )
-        {
+	    if (!xfpm_dbus_name_has_owner(connection,XFPM_PM_IFACE))
+	    {
+	     
+	        XfpmDriver *driver = xfpm_driver_new();
+            autostart();
+            if (!xfpm_driver_monitor(driver)) 
+            {
+                xfpm_popup_message(_("Xfce power manager"),
+                                  _("Unable to run Xfce4 power manager, " \
+                                  "make sure the hardware abstract layer and the message bus daemon "\
+                                  "are running"),
+                                  GTK_MESSAGE_ERROR);
+                g_error(_("Unable to load xfce4 power manager"));
+                g_print("\n");
+                g_object_unref(driver);
+                return EXIT_FAILURE;
+            }
+	    }
+	    else
+	    {
             g_print(_("Xfce power manager is already running"));
 			g_print("\n");
             return EXIT_SUCCESS;
-        }
-        XfpmDriver *driver = xfpm_driver_new();
-        autostart();
-        if (!xfpm_driver_monitor(driver)) 
-        {
-            xfpm_popup_message(_("Xfce power manager"),
-                              _("Unable to run Xfce4 power manager, " \
-                              "make sure the hardware abstract layer and the message bus daemon "\
-							  "are running"),
-                              GTK_MESSAGE_ERROR);
-            g_error(_("Unable to load xfce4 power manager"));
-			g_print("\n");
-            g_object_unref(driver);
-            return EXIT_FAILURE;
-        }
-    }    
-    
+	    }
+	    
+	}
+	
     if ( quit )
     {
-    	int reply;
-        if (!xfpm_dbus_send_message_with_reply("Quit",&reply))
+        if (!xfpm_dbus_name_has_owner(connection,XFPM_PM_IFACE))
         {
-            return EXIT_FAILURE;
-        }
-        
-        if ( reply == 0 )
-        {
             g_print(_("Xfce power manager is not running"));
 			g_print("\n");
             return EXIT_SUCCESS;
         }
-        return EXIT_SUCCESS;
+        else
+        {
+            xfpm_dbus_send_message("Quit");
+        }
+        
     }    
     	
     return EXIT_SUCCESS;




More information about the Goodies-commits mailing list