[Xfce4-commits] <xfce4-panel:devel> Set restart style before calling gtk_main_quit().

Nick Schermer noreply at xfce.org
Mon Nov 16 15:26:02 CET 2009


Updating branch refs/heads/devel
         to acc4e99fd23f46c9356936aee9f19ad2bc1e9972 (commit)
       from 0088e6709361e595b671345d13893037dbd24602 (commit)

commit acc4e99fd23f46c9356936aee9f19ad2bc1e9972
Author: Nick Schermer <nick at xfce.org>
Date:   Fri Oct 30 13:14:46 2009 +0100

    Set restart style before calling gtk_main_quit().
    
    Still occurs the panel keeps restart when you quit
    with errors in the code.

 panel/main.c               |   49 +++++++++++++++----------------------------
 panel/panel-application.c  |    3 +-
 panel/panel-dbus-service.c |   24 +++++++++++++--------
 panel/panel-dbus-service.h |   13 +---------
 panel/panel-window.c       |    3 +-
 5 files changed, 36 insertions(+), 56 deletions(-)

diff --git a/panel/main.c b/panel/main.c
index 14eca38..8d925f1 100644
--- a/panel/main.c
+++ b/panel/main.c
@@ -115,19 +115,9 @@ callback_handler (const gchar  *name,
 
 
 static void
-signal_handler (gint signum)
+signal_handler_quit (gint signum)
 {
-  panel_dbus_service_exit_panel (PANEL_DBUS_EXIT_QUIT);
-}
-
-
-
-static void
-session_quit (XfceSMClient *sm_client)
-{
-  panel_return_if_fail (XFCE_IS_SM_CLIENT (sm_client));
-
-  panel_dbus_service_exit_panel (PANEL_DBUS_EXIT_SESSION);
+  panel_dbus_service_exit_panel (FALSE);
 }
 
 
@@ -135,16 +125,15 @@ session_quit (XfceSMClient *sm_client)
 gint
 main (gint argc, gchar **argv)
 {
-  GOptionContext     *context;
-  PanelApplication   *application;
-  GError             *error = NULL;
-  PanelDBusService   *dbus_service;
-  gboolean            result;
-  guint               i;
-  const gint          signums[] = { SIGHUP, SIGINT, SIGQUIT, SIGTERM };
-  const gchar        *error_msg;
-  XfceSMClient       *sm_client;
-  PanelDBusExitStyle  exit_style;
+  GOptionContext   *context;
+  PanelApplication *application;
+  GError           *error = NULL;
+  PanelDBusService *dbus_service;
+  gboolean          result;
+  guint             i;
+  const gint        signums[] = { SIGHUP, SIGINT, SIGQUIT, SIGTERM };
+  const gchar      *error_msg;
+  XfceSMClient     *sm_client;
 
   /* set translation domain */
   xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
@@ -233,7 +222,7 @@ main (gint argc, gchar **argv)
   sm_client = xfce_sm_client_get ();
   xfce_sm_client_set_restart_style (sm_client, XFCE_SM_CLIENT_RESTART_IMMEDIATELY);
   g_signal_connect (G_OBJECT (sm_client), "quit",
-      G_CALLBACK (session_quit), NULL);
+      G_CALLBACK (signal_handler_quit), NULL);
   if (!xfce_sm_client_connect (sm_client, &error))
     {
       g_warning ("Failed to connect to session manager: %s", error->message);
@@ -248,18 +237,11 @@ main (gint argc, gchar **argv)
 
   /* setup signal handlers to properly quit the main loop */
   for (i = 0; i < G_N_ELEMENTS (signums); i++)
-    signal (signums[i], signal_handler);
+    signal (signums[i], signal_handler_quit);
 
   /* enter the main loop */
   gtk_main ();
 
-  /* release session reference */
-  exit_style = panel_dbus_service_get_exit_style ();
-  if (exit_style == PANEL_DBUS_EXIT_QUIT
-      || exit_style == PANEL_DBUS_EXIT_RESTART)
-    xfce_sm_client_set_restart_style (sm_client, XFCE_SM_CLIENT_RESTART_NORMAL);
-  g_object_unref (G_OBJECT (sm_client));
-
   /* release dbus service */
   g_object_unref (G_OBJECT (dbus_service));
 
@@ -272,8 +254,11 @@ main (gint argc, gchar **argv)
   /* release application reference */
   g_object_unref (G_OBJECT (application));
 
+  /* release session reference */
+  g_object_unref (G_OBJECT (sm_client));
+
   /* whether we need to restart */
-  if (exit_style == PANEL_DBUS_EXIT_RESTART)
+  if (panel_dbus_service_get_restart ())
     {
       /* message */
       g_print ("%s: %s\n\n", G_LOG_DOMAIN, _("Restarting"));
diff --git a/panel/panel-application.c b/panel/panel-application.c
index 5117d9c..91f61bf 100644
--- a/panel/panel-application.c
+++ b/panel/panel-application.c
@@ -520,8 +520,7 @@ panel_application_plugin_provider_signal (XfcePanelPluginProvider       *provide
       case PROVIDER_SIGNAL_PANEL_QUIT:
       case PROVIDER_SIGNAL_PANEL_RESTART:
         /* quit of restart the entire panel */
-        panel_dbus_service_exit_panel (provider_signal == PROVIDER_SIGNAL_PANEL_QUIT ?
-                                       PANEL_DBUS_EXIT_QUIT : PANEL_DBUS_EXIT_RESTART);
+        panel_dbus_service_exit_panel (provider_signal == PROVIDER_SIGNAL_PANEL_RESTART);
         break;
 
       case PROVIDER_SIGNAL_PANEL_ABOUT:
diff --git a/panel/panel-dbus-service.c b/panel/panel-dbus-service.c
index d5123ab..a2068a0 100644
--- a/panel/panel-dbus-service.c
+++ b/panel/panel-dbus-service.c
@@ -29,6 +29,7 @@
 #include <dbus/dbus-glib-lowlevel.h>
 #include <common/panel-dbus.h>
 #include <libxfce4util/libxfce4util.h>
+#include <libxfce4ui/libxfce4ui.h>
 #include <libxfce4panel/libxfce4panel.h>
 
 #include <panel/panel-dbus-service.h>
@@ -94,8 +95,8 @@ struct _PanelDBusService
 
 
 
-static PanelDBusExitStyle dbus_exit_style = PANEL_DBUS_EXIT_UNSET;
-static guint              dbus_service_signals[LAST_SIGNAL];
+static gboolean dbus_exit_restart = FALSE;
+static guint    dbus_service_signals[LAST_SIGNAL];
 
 
 
@@ -293,8 +294,7 @@ panel_dbus_service_terminate (PanelDBusService  *service,
   panel_return_val_if_fail (PANEL_IS_DBUS_SERVICE (service), FALSE);
   panel_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-  panel_dbus_service_exit_panel (restart ? PANEL_DBUS_EXIT_RESTART :
-                                 PANEL_DBUS_EXIT_QUIT);
+  panel_dbus_service_exit_panel (restart);
 
   return TRUE;
 }
@@ -387,16 +387,22 @@ panel_dbus_service_plugin_property_changed (gint                 plugin_id,
 
 
 void
-panel_dbus_service_exit_panel (PanelDBusExitStyle exit_style)
+panel_dbus_service_exit_panel (gboolean restart)
 {
-  dbus_exit_style = exit_style;
+  XfceSMClient *sm_client;
+
+  sm_client = xfce_sm_client_get ();
+  xfce_sm_client_set_restart_style (sm_client, XFCE_SM_CLIENT_RESTART_NORMAL);
+
+  dbus_exit_restart = !!restart;
+
   gtk_main_quit ();
 }
 
 
 
-PanelDBusExitStyle
-panel_dbus_service_get_exit_style (void)
+gboolean
+panel_dbus_service_get_restart (void)
 {
-  return dbus_exit_style;
+  return dbus_exit_restart;
 }
diff --git a/panel/panel-dbus-service.h b/panel/panel-dbus-service.h
index 3d80f29..a48bc21 100644
--- a/panel/panel-dbus-service.h
+++ b/panel/panel-dbus-service.h
@@ -32,15 +32,6 @@ typedef struct _PanelDBusService      PanelDBusService;
 #define PANEL_IS_DBUS_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANEL_TYPE_DBUS_SERVICE))
 #define PANEL_DBUS_SERVICE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), PANEL_TYPE_DBUS_SERVICE, PanelDBusServiceClass))
 
-typedef enum
-{
-  PANEL_DBUS_EXIT_UNSET,
-  PANEL_DBUS_EXIT_QUIT,
-  PANEL_DBUS_EXIT_RESTART,
-  PANEL_DBUS_EXIT_SESSION
-}
-PanelDBusExitStyle;
-
 
 
 GType               panel_dbus_service_get_type                (void) G_GNUC_CONST;
@@ -51,8 +42,8 @@ void                panel_dbus_service_plugin_property_changed (gint
                                                                 DBusPropertyChanged  property,
                                                                 const GValue        *value);
 
-void                panel_dbus_service_exit_panel              (PanelDBusExitStyle   exit_style);
-PanelDBusExitStyle  panel_dbus_service_get_exit_style          (void);
+void                panel_dbus_service_exit_panel              (gboolean             restart);
+gboolean            panel_dbus_service_get_restart             (void);
 
 G_END_DECLS
 
diff --git a/panel/panel-window.c b/panel/panel-window.c
index 8203bf9..6190ff0 100644
--- a/panel/panel-window.c
+++ b/panel/panel-window.c
@@ -1881,8 +1881,7 @@ panel_window_set_autohide (PanelWindow *window,
 static void
 panel_window_menu_quit (gpointer boolean)
 {
-  panel_dbus_service_exit_panel (GPOINTER_TO_UINT (boolean) == 0 ?
-                                 PANEL_DBUS_EXIT_QUIT : PANEL_DBUS_EXIT_RESTART);
+  panel_dbus_service_exit_panel (GPOINTER_TO_UINT (boolean) == 1);
 }
 
 



More information about the Xfce4-commits mailing list