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

Ali Abdallah aliov at xfce.org
Sat Nov 1 23:05:20 CET 2008


Author: aliov
Date: 2008-11-01 22:05:20 +0000 (Sat, 01 Nov 2008)
New Revision: 5897

Modified:
   xfce4-power-manager/trunk/src/Makefile.am
   xfce4-power-manager/trunk/src/xfce4-power-manager.desktop.in
   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
   xfce4-power-manager/trunk/src/xfpm-settings.c
   xfce4-power-manager/trunk/src/xfpm-settings.h
Log:
Support for pluggable settings dialog

Modified: xfce4-power-manager/trunk/src/Makefile.am
===================================================================
--- xfce4-power-manager/trunk/src/Makefile.am	2008-11-01 21:28:58 UTC (rev 5896)
+++ xfce4-power-manager/trunk/src/Makefile.am	2008-11-01 22:05:20 UTC (rev 5897)
@@ -10,7 +10,7 @@
 xfce4_power_manager_SOURCES = 	$(generated_files)		\
 				xfpm-main.c			\
 				xfpm-debug.h			\
-		                xfpm-hal.c          		\
+                xfpm-hal.c          		\
 				xfpm-hal.h	     		\
 				xfpm-driver.c			\
 				xfpm-driver.h			\
@@ -46,6 +46,7 @@
 
 xfce4_power_manager_CFLAGS =					\
 			-DLOCALEDIR=\"$(localedir)\"		\
+			-DG_LOG_DOMAIN=\"xfce4-power-manager\" \
 			$(GTK_CFLAGS)				\
 			$(GLIB_CFLAGS)				\
 			$(DBUS_CFLAGS)				\

Modified: xfce4-power-manager/trunk/src/xfce4-power-manager.desktop.in
===================================================================
--- xfce4-power-manager/trunk/src/xfce4-power-manager.desktop.in	2008-11-01 21:28:58 UTC (rev 5896)
+++ xfce4-power-manager/trunk/src/xfce4-power-manager.desktop.in	2008-11-01 22:05:20 UTC (rev 5897)
@@ -11,4 +11,6 @@
 Type=Application
 Categories=X-XFCE;Settings;DesktopSettings;X-XfceSettingsDialog;
 OnlyShowIn=XFCE;
-StartupNotify=true
\ No newline at end of file
+StartupNotify=true
+X-XfcePluggable=true
+X-XfceHelpFile=xfce4-power-manager.html

Modified: xfce4-power-manager/trunk/src/xfpm-dbus-messages.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-dbus-messages.c	2008-11-01 21:28:58 UTC (rev 5896)
+++ xfce4-power-manager/trunk/src/xfpm-dbus-messages.c	2008-11-01 22:05:20 UTC (rev 5897)
@@ -183,7 +183,6 @@
     } else     
     {
         *get_reply = 0;
-        
     }    
   
     dbus_message_unref(message);
@@ -191,8 +190,48 @@
     return TRUE;
 }  
 
-void     xfpm_dbus_send_nm_message   (const gchar *signal)
+gboolean
+xfpm_dbus_send_customize_message(guint32 socket_id)
 {
+	DBusConnection *connection;
+    DBusMessage *message;
+    
+    connection = xfpm_dbus_get_connection(DBUS_BUS_SESSION);
+    if ( !connection )
+    {
+        return FALSE;
+    }
+    
+    message = xfpm_dbus_new_signal("Customize");
+    
+    if (!message)
+    {
+        return FALSE;
+    }
+        
+    dbus_message_append_args(message,DBUS_TYPE_UINT32,&socket_id,DBUS_TYPE_INVALID);
+        
+    gboolean ret =
+    dbus_connection_send(connection,
+                         message,
+                         NULL);
+        
+    dbus_message_unref(message);
+    dbus_connection_unref(connection);
+    if ( ret == FALSE )
+    {
+        g_critical(_("Failed to send message\n"));
+        return FALSE;
+    } else
+    {
+        return TRUE;
+    }         
+	
+}
+
+void
+xfpm_dbus_send_nm_message   (const gchar *signal)
+{
     DBusConnection *connection;
     DBusMessage *message;
     

Modified: xfce4-power-manager/trunk/src/xfpm-dbus-messages.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-dbus-messages.h	2008-11-01 21:28:58 UTC (rev 5896)
+++ xfce4-power-manager/trunk/src/xfpm-dbus-messages.h	2008-11-01 22:05:20 UTC (rev 5897)
@@ -36,6 +36,7 @@
                                   const gchar *service);
 gboolean xfpm_dbus_send_message            (const gchar *signal);
 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);
 
 #endif /* __XFPM_DBUS_MESSAGES */

Modified: xfce4-power-manager/trunk/src/xfpm-driver.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-driver.c	2008-11-01 21:28:58 UTC (rev 5896)
+++ xfce4-power-manager/trunk/src/xfpm-driver.c	2008-11-01 22:05:20 UTC (rev 5897)
@@ -134,6 +134,8 @@
 static DBusHandlerResult xfpm_driver_signal_filter
     (DBusConnection *connection,DBusMessage *message,void *user_data);
 
+static guint32 socket_id = 0;
+
 #define XFPM_DRIVER_GET_PRIVATE(o) \
 (G_TYPE_INSTANCE_GET_PRIVATE((o),XFPM_TYPE_DRIVER,XfpmDriverPrivate))
 
@@ -373,6 +375,17 @@
 }
 
 static void
+_close_plug_cb(GtkWidget *plug,GdkEvent *ev,XfpmDriver *drv)
+{
+	XfpmDriverPrivate *priv;
+	priv = XFPM_DRIVER_GET_PRIVATE(drv);
+	priv->dialog_opened = FALSE;
+	_close_dialog_cb(NULL,drv);
+	gtk_widget_destroy(plug);
+	
+}
+
+static void
 xfpm_driver_property_changed_cb(XfconfChannel *channel,gchar *property,
                                 GValue *value,XfpmDriver *drv)
 {
@@ -551,7 +564,7 @@
     {
         return FALSE;
     }
-    
+
     XfconfChannel *channel;
     GtkWidget *dialog;
 
@@ -588,18 +601,27 @@
                                governors,
                                switch_buttons,
                                priv->lcd_brightness_control,
-                               ups_found);
+                               ups_found,
+                               socket_id);
+    if ( socket_id == 0 )
+    {
+    	xfce_gtk_window_center_on_monitor_with_pointer(GTK_WINDOW(dialog));
+    	gtk_window_set_modal(GTK_WINDOW(dialog), FALSE);
     
-    xfce_gtk_window_center_on_monitor_with_pointer(GTK_WINDOW(dialog));
-    gtk_window_set_modal(GTK_WINDOW(dialog), FALSE);
+    	gdk_x11_window_set_user_time(dialog->window,gdk_x11_get_server_time (dialog->window));
     
-    gdk_x11_window_set_user_time(dialog->window,gdk_x11_get_server_time (dialog->window));
+    	g_signal_connect(dialog,"response",G_CALLBACK(_dialog_response_cb),drv);        
+    	g_signal_connect(dialog,"close",G_CALLBACK(_close_dialog_cb),drv);
+    	gtk_widget_show(dialog);
+    }	
+    else
+    {
+    	g_signal_connect(dialog,"delete-event",G_CALLBACK(_close_plug_cb),drv);
+		gdk_notify_startup_complete();
+	}
     
-    g_signal_connect(dialog,"response",G_CALLBACK(_dialog_response_cb),drv);        
-    g_signal_connect(dialog,"close",G_CALLBACK(_close_dialog_cb),drv);
-    
-    gtk_widget_show(dialog);
     priv->dialog_opened = TRUE;
+    socket_id = 0 ;
     
     return FALSE;
 }
@@ -1115,9 +1137,17 @@
     
     if ( dbus_message_is_signal(message,"xfpm.power.manager","Customize" ) )
     {
-        XFPM_DEBUG("message customize received\n");
         /* don't block the signal filter so show the configuration dialog in a
          * timeout function otherwise xfce4-power-manager -q will have no effect*/
+        DBusError error;
+        dbus_error_init(&error);
+        dbus_message_get_args(message,&error,DBUS_TYPE_UINT32,&socket_id,DBUS_TYPE_INVALID);
+        if ( dbus_error_is_set(&error) )
+        {
+        	XFPM_DEBUG("Failed to get socket id: %s\n",error.message);
+        	dbus_error_free(&error);
+		}
+		XFPM_DEBUG("message customize received with socket_id=%d\n",socket_id);
         g_timeout_add(100,(GSourceFunc)xfpm_driver_show_options_dialog,drv);
         return DBUS_HANDLER_RESULT_HANDLED;
     }    

Modified: xfce4-power-manager/trunk/src/xfpm-main.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-main.c	2008-11-01 21:28:58 UTC (rev 5896)
+++ xfce4-power-manager/trunk/src/xfpm-main.c	2008-11-01 22:05:20 UTC (rev 5897)
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*-
  *
- * * Copyright (C) 2008 Ali <ali.slackware at gmail.com>
+ * * Copyright (C) 2008 Ali <aliov at xfce.org>
  *
  * Licensed under the GNU General Public License Version 2
  *
@@ -51,16 +51,23 @@
 #include "xfpm-popups.h"
 #include "xfpm-debug.h"
 
-enum 
-{
-    PM_HELP,
-    PM_CUSTOMIZE,
-    PM_RUN,
-    PM_QUIT
-};    
+static GdkNativeWindow socket_id = 0;
+static gboolean run     = FALSE;
+static gboolean quit    = FALSE;
+static gboolean config  = FALSE;
+static gboolean version = FALSE;
 
+static GOptionEntry option_entries[] = {
+	{ "run", 'r', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &run, N_("Start xfce power manager"), NULL },
+	{ "customize", 'c', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &config, N_("Show the configuration dialog"), NULL },
+	{ "quit", 'q', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &quit, N_("Quit any running xfce power manager"), NULL },
+    { "socket-id", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_INT, &socket_id, N_("Settings manager socket"), N_("SOCKET ID") },
+    { "version", 'V', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &version, N_("Version information"), NULL },
+    { NULL, },
+};
+
 static void
-show_usage() 
+show_version()
 {
     setlocale(LC_ALL,"");
 	g_print (_("\n"
@@ -68,21 +75,8 @@
              "Part of the Xfce Goodies Project\n"
              "http://goodies.xfce.org\n\n"
              "Licensed under the GNU GPL.\n\n"), VERSION);
+}			 
 	
-	/* Only the description is translatable */
-    g_print(_( "\n"
-		"Usage: xfce-power-manager [options] \n"
-		"\n"
-		"Options:\n"
-		"-h, --help       Print this help message and exit\n"
-		"-v, --version    Print this help message and exit\n"
-		"-r, --run        Start xfce power manager\n"
-		"-c, --customize  Show Configuration dialog\n"
-		"-q, --quit       Quit any running xfce power manager\n"
-		"\n"));
-		    
-}    
-
 static void
 autostart()
 {
@@ -155,71 +149,48 @@
     g_key_file_free(key);
 }
 
-static int
-handle_arguments(int argc,char **argv) 
+int main(int argc,char **argv) 
 {
+    xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
     
-    int msg = -1;
-    
-    if ( argc > 1 && argv[1][0] == '-' ) 
-    {    
-        if (!strcmp(argv[1], "-v")      ||
-			!strcmp(argv[1], "-version")||
-			!strcmp(argv[1],"-h")      ||
-            !strcmp(argv[1],"--help"))
+   	GError *error = NULL;
+
+    if(!gtk_init_with_args(&argc, &argv, "", option_entries, PACKAGE, &error)) 
+    {
+        if(G_LIKELY(error)) 
         {
-            show_usage();
-            msg  = PM_HELP;            
-        }        
+            g_printerr("%s: %s.\n", G_LOG_DOMAIN, error->message);
+            g_printerr(_("Type '%s --help' for usage."), G_LOG_DOMAIN);
+            g_printerr("\n");
+            g_error_free(error);
+        }
         else
         {
-            if (!strcmp(argv[1],"-c") ||
-                !strcmp(argv[1],"--cutomize"))
-            {    
-                msg = PM_CUSTOMIZE;
-            } else if (!strcmp(argv[1],"-r") ||
-                !strcmp(argv[1],"--run"))
-            {    
-                msg = PM_RUN;
-            }
-            else if (!strcmp(argv[1],"-q") ||
-                     !strcmp(argv[1],"--quit"))
-            {
-                msg = PM_QUIT;
-            }
-            else
-            {
-                show_usage();
-                msg = PM_HELP;
-            }    
-        }
-     }
-     else 
-     {
-         show_usage();
-         msg = PM_HELP;
-     }    
-     
-     return msg;
-}
+            g_error("Unable to open display.");
+		}
 
-
-int main(int argc,char **argv) 
-{
-    xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
+        return EXIT_FAILURE;
+    }
     
-    gtk_init(&argc,&argv);
-    
-    int msg = handle_arguments(argc,argv);
-    
-    if ( msg == PM_HELP ) return 0;
-    
-    if ( msg == PM_CUSTOMIZE ) 
-    {
-        int reply;
+    if ( version )    {
+		show_version();
+    	return EXIT_SUCCESS;
+	}
+
+	if ( run + quit + config + version > 1 )
+	{
+		g_printerr(_("Too much arguments\n"));
+		g_printerr(_("Type '%s --help' for usage."), G_LOG_DOMAIN);
+		g_printerr("\n");
+		return EXIT_FAILURE;
+	}
+	
+	if ( config )
+	{
+		int reply;
         if (!xfpm_dbus_send_message_with_reply("Running",&reply))
         {
-            return 1;
+            return EXIT_FAILURE;
         }
         if ( reply != 1 )
         {
@@ -232,46 +203,29 @@
             {
                 g_spawn_command_line_async("xfce4-power-manager -r",NULL);
             }
-            return 0;
+            return EXIT_SUCCESS;
         }
-        xfpm_dbus_send_message("Customize");
-        return 0;
-    }    
-    
-    if ( msg == PM_QUIT ) 
-    {
-        int reply;
-        if (!xfpm_dbus_send_message_with_reply("Quit",&reply))
-        {
-            return 1;
-        }
-        
-        if ( reply == 0 )
-        {
-            g_print(_("Xfce power manager is not running\n"));
-            return 0;
-        }
-        return 0;
-    }
-    
-    if ( msg == PM_RUN ) 
-    {
-        int reply;
+        xfpm_dbus_send_customize_message(socket_id);
+        return EXIT_SUCCESS;
+	}
+	
+	if ( run )
+	{
+		int reply;
         if (!xfpm_dbus_send_message_with_reply("Running",&reply))
         {
-            return 1;
+            return EXIT_FAILURE;
         }
         
         if ( reply == 1 )
         {
             g_print(_("Xfce power manager is already running\n"));
-            return 0;
+            return EXIT_SUCCESS;
         }
         XfpmDriver *driver = xfpm_driver_new();
         autostart();
         if (!xfpm_driver_monitor(driver)) 
         {
-             /* g_disaster */
             xfpm_popup_message(_("Xfce power manager"),
                               _("Unable to run Xfce4 power manager, " \
                               "make sure the hardware abstract layer and the message bus daemon "\
@@ -279,9 +233,25 @@
                               GTK_MESSAGE_ERROR);
             g_error(_("Unable to load xfce4 power manager\n"));        
             g_object_unref(driver);
-            return 1;
+            return EXIT_FAILURE;
         }
-    }
+    }    
+    
+    if ( quit )
+    {
+    	int reply;
+        if (!xfpm_dbus_send_message_with_reply("Quit",&reply))
+        {
+            return EXIT_FAILURE;
+        }
         
-    return 0;
+        if ( reply == 0 )
+        {
+            g_print(_("Xfce power manager is not running\n"));
+            return EXIT_SUCCESS;
+        }
+        return EXIT_SUCCESS;
+    }    
+    	
+    return EXIT_SUCCESS;
 }    

Modified: xfce4-power-manager/trunk/src/xfpm-settings.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-settings.c	2008-11-01 21:28:58 UTC (rev 5896)
+++ xfce4-power-manager/trunk/src/xfpm-settings.c	2008-11-01 22:05:20 UTC (rev 5897)
@@ -1228,17 +1228,19 @@
                   guint8 govs,
                   guint8 switch_buttons,
                   gboolean lcd,
-                  gboolean ups_found)
+                  gboolean ups_found,
+                  guint32 socket_id)
 {
     GtkWidget *Dialog;  /* Main dialog window */
     GtkWidget *mainbox; /* Box to get (Dialog)->vbox */
     GtkWidget *box;
     GtkWidget *table;   
     GtkWidget *view;
-        
+    GtkWidget *allbox;
+  
     Dialog = xfce_titled_dialog_new_with_buttons(_("Power Manager Preferences"),
                                                     NULL,
-                                                    GTK_DIALOG_NO_SEPARATOR,
+                                                    GTK_DIALOG_DESTROY_WITH_PARENT,
                                                     GTK_STOCK_CLOSE,
                                                     GTK_RESPONSE_CANCEL,
                                                     GTK_STOCK_HELP,
@@ -1247,15 +1249,18 @@
     
     gtk_window_set_icon_name(GTK_WINDOW(Dialog),"gpm-ac-adapter");
     gtk_dialog_set_default_response(GTK_DIALOG(Dialog),GTK_RESPONSE_CLOSE);
-    
     mainbox = GTK_DIALOG(Dialog)->vbox;
 
+	allbox = gtk_vbox_new(FALSE,0);
+	gtk_widget_show(allbox);
+	gtk_box_pack_start(GTK_BOX(mainbox),allbox,FALSE,FALSE,0);
+	
     gboolean ups;
     ups = is_laptop ? FALSE : ups_found;
         
     /// General Options Frame
     box = xfpm_settings_general(channel,is_laptop,ups);
-    gtk_box_pack_start (GTK_BOX (mainbox), box, FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (allbox), box, FALSE, FALSE, 0);
     
     /// Notebook container
     nt = gtk_notebook_new();
@@ -1263,7 +1268,7 @@
     gtk_notebook_set_show_tabs(GTK_NOTEBOOK(nt),FALSE);
     table = gtk_table_new(1,2,FALSE);
     gtk_widget_show(table);
-    gtk_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (allbox), table, FALSE, FALSE, 0);
     view = xfpm_settings_tree_view(is_laptop,ups_found);
     gtk_table_attach_defaults(GTK_TABLE(table),view,0,1,0,1);  
     gtk_widget_show(view);  
@@ -1285,6 +1290,13 @@
     /// Dpms settings && LCD brightness settings DPMS existence is checked above
     box = xfpm_settings_monitor(channel,is_laptop,dpms_capable,lcd,ups);
     gtk_notebook_append_page(GTK_NOTEBOOK(nt),box,NULL);
-    
-    return Dialog;
+
+	GtkWidget *plug;    
+    if ( socket_id != 0 )
+    {
+		plug = gtk_plug_new(socket_id);
+    	gtk_widget_show (plug);
+    	gtk_widget_reparent(allbox,plug);
+	}
+    return socket_id == 0 ? Dialog : plug ;
 }

Modified: xfce4-power-manager/trunk/src/xfpm-settings.h
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-settings.h	2008-11-01 21:28:58 UTC (rev 5896)
+++ xfce4-power-manager/trunk/src/xfpm-settings.h	2008-11-01 22:05:20 UTC (rev 5897)
@@ -29,7 +29,8 @@
                              guint8 govs,
                              guint8 switch_buttons,
                              gboolean lcd,
-                             gboolean ups_found);
+                             gboolean ups_found,
+                             guint32 socket_id);
 
 
 #endif /* __XFPM_SETTINGS_H */




More information about the Goodies-commits mailing list