summaryrefslogtreecommitdiff
path: root/xfce4-session/xfsm-manager.c
diff options
context:
space:
mode:
authorEric Koegel <eric.koegel@gmail.com>2016-05-21 08:16:51 +0300
committerEric Koegel <eric.koegel@gmail.com>2016-05-21 08:19:17 +0300
commit95617f7759eb99eda65defe9f65944062a494a91 (patch)
tree8e1b2491390baeb09e0583bc8d594e3c3bf050d7 /xfce4-session/xfsm-manager.c
parent769c1d1e92f06772499faaf9196163e9d9cb0c1f (diff)
downloadxfce4-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.c33
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);
}