[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