diff options
author | Eric Koegel <eric.koegel@gmail.com> | 2016-05-21 08:16:51 +0300 |
---|---|---|
committer | Eric Koegel <eric.koegel@gmail.com> | 2016-05-21 08:19:17 +0300 |
commit | 95617f7759eb99eda65defe9f65944062a494a91 (patch) | |
tree | 8e1b2491390baeb09e0583bc8d594e3c3bf050d7 /xfce4-session/xfsm-manager.c | |
parent | 769c1d1e92f06772499faaf9196163e9d9cb0c1f (diff) | |
download | xfce4-session-95617f7759eb99eda65defe9f65944062a494a91.tar.gz |
Fix the shutdown/reboot in xfsm-manager
With the new GDBUS setup, we can't just call gtk_main_quit to exit
since we'll never run the name_lost function which actually calls
shutdown/reboot. This patch changes the gtk_main_quit calls to be
a manager-quit signal which the main.c source will watch and
react to.
Diffstat (limited to 'xfce4-session/xfsm-manager.c')
-rw-r--r-- | xfce4-session/xfsm-manager.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/xfce4-session/xfsm-manager.c b/xfce4-session/xfsm-manager.c index e559b975..e6832d52 100644 --- a/xfce4-session/xfsm-manager.c +++ b/xfce4-session/xfsm-manager.c @@ -127,6 +127,9 @@ struct _XfsmManager typedef struct _XfsmManagerClass { XfsmDbusManagerSkeletonClass parent; + + /*< signals >*/ + void (*quit)(XfsmManager *manager); } XfsmManagerClass; typedef struct @@ -143,6 +146,13 @@ typedef struct gboolean allow_save; } ShutdownIdleData; +enum +{ + MANAGER_QUIT, + LAST_SIGNAL, +}; + +static guint manager_signals[LAST_SIGNAL] = { 0, }; static void xfsm_manager_finalize (GObject *obj); @@ -173,6 +183,14 @@ xfsm_manager_class_init (XfsmManagerClass *klass) gobject_class->finalize = xfsm_manager_finalize; + manager_signals[MANAGER_QUIT] = g_signal_new("manager-quit", + G_OBJECT_CLASS_TYPE(gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(XfsmManagerClass, quit), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + xfsm_manager_dbus_class_init (klass); } @@ -1117,6 +1135,7 @@ xfsm_manager_save_yourself_global (XfsmManager *manager, manager->shutdown_type, &error)) { + xfsm_verbose ("failed calling shutdown, error message was %s", error->message); xfce_message_dialog (NULL, _("Shutdown Failed"), "dialog-error", manager->shutdown_type == XFSM_SHUTDOWN_SUSPEND @@ -1330,7 +1349,7 @@ xfsm_manager_close_connection (XfsmManager *manager, g_source_remove (manager->die_timeout_id); manager->die_timeout_id = 0; } - gtk_main_quit (); + g_signal_emit(G_OBJECT(manager), manager_signals[MANAGER_QUIT], 0); } else if (manager->state == XFSM_MANAGER_SHUTDOWN || manager->state == XFSM_MANAGER_CHECKPOINT) { @@ -1412,12 +1431,20 @@ xfsm_manager_terminate_client (XfsmManager *manager, } +static gboolean +manager_quit_signal (XfsmManager *manager) +{ + g_signal_emit(G_OBJECT(manager), manager_signals[MANAGER_QUIT], 0); + return FALSE; +} + + void xfsm_manager_perform_shutdown (XfsmManager *manager) { GList *lp; - xfsm_verbose ("entering"); + xfsm_verbose ("entering\n"); /* send SmDie message to all clients */ xfsm_manager_set_state (manager, XFSM_MANAGER_SHUTDOWNPHASE2); @@ -1461,7 +1488,7 @@ xfsm_manager_perform_shutdown (XfsmManager *manager) /* give all clients the chance to close the connection */ manager->die_timeout_id = g_timeout_add (DIE_TIMEOUT, - (GSourceFunc) gtk_main_quit, + (GSourceFunc) manager_quit_signal, NULL); } |