gnome-session r5243 - in trunk: . gnome-session
- From: lucasr svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-session r5243 - in trunk: . gnome-session
- Date: Wed, 11 Feb 2009 18:13:38 +0000 (UTC)
Author: lucasr
Date: Wed Feb 11 18:13:38 2009
New Revision: 5243
URL: http://svn.gnome.org/viewvc/gnome-session?rev=5243&view=rev
Log:
2009-02-11 Lucas Rocha <lucasr gnome org>
Bug 565063 â Avoid restarting applications when shutting down
* gnome-session/gdm-signal-handler.[ch]
(gdm_signal_handler_set_fatal_func): redefine this function to receive
custom callback.
* gnome-session/gsm-manager.[ch]: added gsm_manager_set_phase
function.
* gnome-session/main.c: set session manager phase to
GSM_MANAGER_PHASE_EXIT when gnome-session process is shutting down.
Patch by Brian Cameron.
Modified:
trunk/ChangeLog
trunk/gnome-session/gdm-signal-handler.c
trunk/gnome-session/gdm-signal-handler.h
trunk/gnome-session/gsm-manager.c
trunk/gnome-session/gsm-manager.h
trunk/gnome-session/main.c
Modified: trunk/gnome-session/gdm-signal-handler.c
==============================================================================
--- trunk/gnome-session/gdm-signal-handler.c (original)
+++ trunk/gnome-session/gdm-signal-handler.c Wed Feb 11 18:13:38 2009
@@ -458,9 +458,9 @@
}
void
-gdm_signal_handler_set_fatal_func (GdmSignalHandler *handler,
- GDestroyNotify func,
- gpointer user_data)
+gdm_signal_handler_set_fatal_func (GdmSignalHandler *handler,
+ GdmShutdownHandlerFunc func,
+ gpointer user_data)
{
g_return_if_fail (GDM_IS_SIGNAL_HANDLER (handler));
@@ -487,7 +487,8 @@
ioc = g_io_channel_unix_new (signal_pipes[0]);
g_io_channel_set_flags (ioc, G_IO_FLAG_NONBLOCK, NULL);
- g_io_add_watch (ioc, G_IO_IN, (GIOFunc)signal_io_watch, handler);
+ g_io_add_watch_full (ioc, G_PRIORITY_HIGH, G_IO_IN,
+ (GIOFunc) signal_io_watch, handler, NULL);
g_io_channel_set_close_on_unref (ioc, TRUE);
g_io_channel_unref (ioc);
}
Modified: trunk/gnome-session/gdm-signal-handler.h
==============================================================================
--- trunk/gnome-session/gdm-signal-handler.h (original)
+++ trunk/gnome-session/gdm-signal-handler.h Wed Feb 11 18:13:38 2009
@@ -37,6 +37,8 @@
typedef gboolean (*GdmSignalHandlerFunc) (int signal,
gpointer data);
+typedef void (*GdmShutdownHandlerFunc) (gpointer data);
+
typedef struct GdmSignalHandlerPrivate GdmSignalHandlerPrivate;
typedef struct
@@ -53,9 +55,9 @@
GType gdm_signal_handler_get_type (void);
GdmSignalHandler * gdm_signal_handler_new (void);
-void gdm_signal_handler_set_fatal_func (GdmSignalHandler *handler,
- GDestroyNotify func,
- gpointer user_data);
+void gdm_signal_handler_set_fatal_func (GdmSignalHandler *handler,
+ GdmShutdownHandlerFunc func,
+ gpointer user_data);
void gdm_signal_handler_add_fatal (GdmSignalHandler *handler);
guint gdm_signal_handler_add (GdmSignalHandler *handler,
Modified: trunk/gnome-session/gsm-manager.c
==============================================================================
--- trunk/gnome-session/gsm-manager.c (original)
+++ trunk/gnome-session/gsm-manager.c Wed Feb 11 18:13:38 2009
@@ -2475,6 +2475,15 @@
*/
gboolean
+gsm_manager_set_phase (GsmManager *manager,
+ GsmManagerPhase phase)
+{
+ g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE);
+ manager->priv->phase = phase;
+ return (TRUE);
+}
+
+gboolean
gsm_manager_shutdown (GsmManager *manager,
GError **error)
{
Modified: trunk/gnome-session/gsm-manager.h
==============================================================================
--- trunk/gnome-session/gsm-manager.h (original)
+++ trunk/gnome-session/gsm-manager.h Wed Feb 11 18:13:38 2009
@@ -178,6 +178,8 @@
const char *condition,
gboolean *handled,
GError **error);
+gboolean gsm_manager_set_phase (GsmManager *manager,
+ GsmManagerPhase phase);
G_END_DECLS
Modified: trunk/gnome-session/main.c
==============================================================================
--- trunk/gnome-session/main.c (original)
+++ trunk/gnome-session/main.c Wed Feb 11 18:13:38 2009
@@ -448,6 +448,23 @@
return ret;
}
+static void
+shutdown_cb (gpointer data)
+{
+ GsmManager *manager = (GsmManager *)data;
+ g_debug ("Calling shutdown callback function");
+
+ /*
+ * When the signal handler gets a shutdown signal, it calls
+ * this function to inform GsmManager to not restart
+ * applications in the off chance a handler is already queued
+ * to dispatch following the below call to gtk_main_quit.
+ */
+ gsm_manager_set_phase (manager, GSM_MANAGER_PHASE_EXIT);
+
+ gtk_main_quit ();
+}
+
static gboolean
require_dbus_session (int argc,
char **argv,
@@ -542,7 +559,6 @@
gdm_log_set_debug (debug);
signal_handler = gdm_signal_handler_new ();
- gdm_signal_handler_set_fatal_func (signal_handler, (GDestroyNotify)gtk_main_quit, NULL);
gdm_signal_handler_add_fatal (signal_handler);
gdm_signal_handler_add (signal_handler, SIGTERM, signal_cb, NULL);
gdm_signal_handler_add (signal_handler, SIGINT, signal_cb, NULL);
@@ -577,6 +593,9 @@
acquire_name ();
manager = gsm_manager_new (client_store, failsafe);
+
+ gdm_signal_handler_set_fatal_func (signal_handler, shutdown_cb, manager);
+
if (override_autostart_dirs != NULL) {
load_override_apps (manager, override_autostart_dirs);
} else {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]