diff options
author | BlackNoxis <steven.darklight@gmail.com> | 2014-02-15 23:45:00 +0200 |
---|---|---|
committer | BlackNoxis <steven.darklight@gmail.com> | 2014-02-15 23:45:00 +0200 |
commit | 5acba24490a47edca8a38013461675a41f442f53 (patch) | |
tree | 4f73470c6c762235c28bc0e55a1af6fa0436798f /xfce-base/xfce4-session/files/xfce4-session-4.10.0-multiple-interactive-session-save.patch | |
parent | 5d65d52a7227128a8524fe1c9c0cf5ba5b10c2d1 (diff) |
Added xfce base gentoo origin ebuilds. will split later if needed
Diffstat (limited to 'xfce-base/xfce4-session/files/xfce4-session-4.10.0-multiple-interactive-session-save.patch')
-rw-r--r-- | xfce-base/xfce4-session/files/xfce4-session-4.10.0-multiple-interactive-session-save.patch | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/xfce-base/xfce4-session/files/xfce4-session-4.10.0-multiple-interactive-session-save.patch b/xfce-base/xfce4-session/files/xfce4-session-4.10.0-multiple-interactive-session-save.patch new file mode 100644 index 00000000..2fc90849 --- /dev/null +++ b/xfce-base/xfce4-session/files/xfce4-session-4.10.0-multiple-interactive-session-save.patch @@ -0,0 +1,147 @@ +From 6cb3937aa9cf0c9905a77d0bc2b5be8cc2536e44 Mon Sep 17 00:00:00 2001 +From: Dimitar Zhekov <hamster@mbox.contact.bg> +Date: Thu, 30 Aug 2012 20:52:14 +0000 +Subject: Handle multiple interactive session save (bug #5379). + +Additionnaly, we now use SmSaveGlobal on log out / shutdown without +session save which avoids data loss. Previously clients would not save +anything on log out without session save. + +Based on original work by Chris Bainbridge (chris.bainbridge@gmail.com). +--- +diff --git a/xfce4-session/xfsm-manager.c b/xfce4-session/xfsm-manager.c +index bf6a446..35811c5 100644 +--- a/xfce4-session/xfsm-manager.c ++++ b/xfce4-session/xfsm-manager.c +@@ -98,6 +98,7 @@ struct _XfsmManager + + XfsmShutdownType shutdown_type; + XfsmShutdown *shutdown_helper; ++ gboolean save_session; + + gboolean session_chooser; + gchar *session_name; +@@ -230,6 +231,7 @@ xfsm_manager_init (XfsmManager *manager) + manager->failsafe_mode = TRUE; + manager->shutdown_type = XFSM_SHUTDOWN_LOGOUT; + manager->shutdown_helper = xfsm_shutdown_get (); ++ manager->save_session = TRUE; + + manager->pending_properties = g_queue_new (); + manager->starting_properties = g_queue_new (); +@@ -989,7 +991,9 @@ xfsm_manager_interact (XfsmManager *manager, + XfsmClient *cl = lp->data; + if (xfsm_client_get_state (cl) == XFSM_CLIENT_INTERACTING) + { +- xfsm_client_set_state (cl, XFSM_CLIENT_WAITFORINTERACT); ++ /* a client is already interacting, so new client has to wait */ ++ xfsm_client_set_state (client, XFSM_CLIENT_WAITFORINTERACT); ++ xfsm_manager_cancel_client_save_timeout(manager, client); + return; + } + } +@@ -1138,44 +1142,47 @@ xfsm_manager_save_yourself_global (XfsmManager *manager, + } + } + +- if (!shutdown || shutdown_save) ++ /* don't save the session if shutting down without save */ ++ manager->save_session = !shutdown || shutdown_save; ++ ++ if (save_type == SmSaveBoth && !manager->save_session) + { +- xfsm_manager_set_state (manager, +- shutdown +- ? XFSM_MANAGER_SHUTDOWN +- : XFSM_MANAGER_CHECKPOINT); ++ /* saving the session, so clients should ++ * (prompt to) save the user data only */ ++ save_type = SmSaveGlobal; ++ } + +- /* handle legacy applications first! */ +- xfsm_legacy_perform_session_save (); ++ xfsm_manager_set_state (manager, ++ shutdown ++ ? XFSM_MANAGER_SHUTDOWN ++ : XFSM_MANAGER_CHECKPOINT); + +- for (lp = g_queue_peek_nth_link (manager->running_clients, 0); +- lp; +- lp = lp->next) +- { +- XfsmClient *client = lp->data; +- XfsmProperties *properties = xfsm_client_get_properties (client); +- const gchar *program; ++ /* handle legacy applications first! */ ++ if (manager->save_session) ++ xfsm_legacy_perform_session_save (); + +- /* xterm's session management is broken, so we won't +- * send a SAVE YOURSELF to xterms */ +- program = xfsm_properties_get_string (properties, SmProgram); +- if (program != NULL && strcasecmp (program, "xterm") == 0) +- continue; ++ for (lp = g_queue_peek_nth_link (manager->running_clients, 0); ++ lp; ++ lp = lp->next) ++ { ++ XfsmClient *client = lp->data; ++ XfsmProperties *properties = xfsm_client_get_properties (client); ++ const gchar *program; + +- if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL) +- { +- SmsSaveYourself (xfsm_client_get_sms_connection (client), save_type, shutdown, +- interact_style, fast); +- } ++ /* xterm's session management is broken, so we won't ++ * send a SAVE YOURSELF to xterms */ ++ program = xfsm_properties_get_string (properties, SmProgram); ++ if (program != NULL && strcasecmp (program, "xterm") == 0) ++ continue; + +- xfsm_client_set_state (client, XFSM_CLIENT_SAVING); +- xfsm_manager_start_client_save_timeout (manager, client); ++ if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL) ++ { ++ SmsSaveYourself (xfsm_client_get_sms_connection (client), save_type, shutdown, ++ interact_style, fast); + } +- } +- else +- { +- /* shutdown session without saving */ +- xfsm_manager_perform_shutdown (manager); ++ ++ xfsm_client_set_state (client, XFSM_CLIENT_SAVING); ++ xfsm_manager_start_client_save_timeout (manager, client); + } + } + +@@ -1249,7 +1256,12 @@ xfsm_manager_save_yourself_done (XfsmManager *manager, + XfsmClient *client, + gboolean success) + { +- if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVING && xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL) ++ /* In xfsm_manager_interact_done we send SmsShutdownCancelled to clients in ++ XFSM_CLIENT_WAITFORINTERACT state. They respond with SmcSaveYourselfDone ++ (xsmp_shutdown_cancelled in libxfce4ui library) so we allow it here. */ ++ if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVING && ++ xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL && ++ xfsm_client_get_state (client) != XFSM_CLIENT_WAITFORINTERACT) + { + xfsm_verbose ("Client Id = %s send SAVE YOURSELF DONE, while not being " + "in save mode. Prepare to be nuked!\n", +@@ -1521,7 +1533,8 @@ xfsm_manager_complete_saveyourself (XfsmManager *manager) + xfsm_verbose ("Manager finished SAVE YOURSELF, session data will be stored now.\n\n"); + + /* all clients done, store session data */ +- xfsm_manager_store_session (manager); ++ if (manager->save_session) ++ xfsm_manager_store_session (manager); + + if (manager->state == XFSM_MANAGER_CHECKPOINT) + { +-- +cgit v0.9.0.3 |