Guest User

Untitled

a guest
Nov 15th, 2012
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.21 KB | None | 0 0
  1. --- ./xfce4-session/xfsm-manager.c.orig 2012-04-29 02:43:27.000000000 +0600
  2. +++ ./xfce4-session/xfsm-manager.c 2012-11-16 00:12:01.000000000 +0600
  3. @@ -99,6 +99,7 @@
  4. XfsmShutdownType shutdown_type;
  5. XfsmShutdown *shutdown_helper;
  6.  
  7. + gboolean save_session;
  8. gboolean session_chooser;
  9. gchar *session_name;
  10. gchar *session_file;
  11. @@ -229,6 +230,7 @@
  12. manager->session_chooser = FALSE;
  13. manager->failsafe_mode = TRUE;
  14. manager->shutdown_type = XFSM_SHUTDOWN_LOGOUT;
  15. + manager->save_session = TRUE;
  16. manager->shutdown_helper = xfsm_shutdown_get ();
  17.  
  18. manager->pending_properties = g_queue_new ();
  19. @@ -989,7 +991,9 @@
  20. XfsmClient *cl = lp->data;
  21. if (xfsm_client_get_state (cl) == XFSM_CLIENT_INTERACTING)
  22. {
  23. - xfsm_client_set_state (cl, XFSM_CLIENT_WAITFORINTERACT);
  24. + /* a client is already interacting, so new client has to wait */
  25. + xfsm_client_set_state (client, XFSM_CLIENT_WAITFORINTERACT);
  26. + xfsm_manager_cancel_client_save_timeout(manager, client);
  27. return;
  28. }
  29. }
  30. @@ -1138,44 +1142,47 @@
  31. }
  32. }
  33.  
  34. - if (!shutdown || shutdown_save)
  35. + /* don't save the session if shutting down without save */
  36. + manager->save_session = !shutdown || shutdown_save;
  37. +
  38. + if (save_type == SmSaveBoth && !manager->save_session)
  39. {
  40. - xfsm_manager_set_state (manager,
  41. - shutdown
  42. - ? XFSM_MANAGER_SHUTDOWN
  43. - : XFSM_MANAGER_CHECKPOINT);
  44. + /* saving the session, so clients should
  45. + * (prompt to) save the user data only */
  46. + save_type = SmSaveGlobal;
  47. + }
  48. +
  49. + xfsm_manager_set_state (manager,
  50. + shutdown
  51. + ? XFSM_MANAGER_SHUTDOWN
  52. + : XFSM_MANAGER_CHECKPOINT);
  53.  
  54. - /* handle legacy applications first! */
  55. + /* handle legacy applications first! */
  56. + if (manager->save_session)
  57. xfsm_legacy_perform_session_save ();
  58.  
  59. - for (lp = g_queue_peek_nth_link (manager->running_clients, 0);
  60. - lp;
  61. - lp = lp->next)
  62. - {
  63. - XfsmClient *client = lp->data;
  64. - XfsmProperties *properties = xfsm_client_get_properties (client);
  65. - const gchar *program;
  66. -
  67. - /* xterm's session management is broken, so we won't
  68. - * send a SAVE YOURSELF to xterms */
  69. - program = xfsm_properties_get_string (properties, SmProgram);
  70. - if (program != NULL && strcasecmp (program, "xterm") == 0)
  71. - continue;
  72. + for (lp = g_queue_peek_nth_link (manager->running_clients, 0);
  73. + lp;
  74. + lp = lp->next)
  75. + {
  76. + XfsmClient *client = lp->data;
  77. + XfsmProperties *properties = xfsm_client_get_properties (client);
  78. + const gchar *program;
  79.  
  80. - if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL)
  81. - {
  82. - SmsSaveYourself (xfsm_client_get_sms_connection (client), save_type, shutdown,
  83. - interact_style, fast);
  84. - }
  85. + /* xterm's session management is broken, so we won't
  86. + * send a SAVE YOURSELF to xterms */
  87. + program = xfsm_properties_get_string (properties, SmProgram);
  88. + if (program != NULL && strcasecmp (program, "xterm") == 0)
  89. + continue;
  90.  
  91. - xfsm_client_set_state (client, XFSM_CLIENT_SAVING);
  92. - xfsm_manager_start_client_save_timeout (manager, client);
  93. + if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL)
  94. + {
  95. + SmsSaveYourself (xfsm_client_get_sms_connection (client), save_type, shutdown,
  96. + interact_style, fast);
  97. }
  98. - }
  99. - else
  100. - {
  101. - /* shutdown session without saving */
  102. - xfsm_manager_perform_shutdown (manager);
  103. +
  104. + xfsm_client_set_state (client, XFSM_CLIENT_SAVING);
  105. + xfsm_manager_start_client_save_timeout (manager, client);
  106. }
  107. }
  108.  
  109. @@ -1249,7 +1256,12 @@
  110. XfsmClient *client,
  111. gboolean success)
  112. {
  113. - if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVING && xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL)
  114. + /* In xfsm_manager_interact_done we send SmsShutdownCancelled to clients in
  115. + XFSM_CLIENT_WAITFORINTERACT state. They respond with SmcSaveYourselfDone
  116. + (xsmp_shutdown_cancelled in libxfce4ui library) so we allow it here. */
  117. + if (xfsm_client_get_state (client) != XFSM_CLIENT_SAVING &&
  118. + xfsm_client_get_state (client) != XFSM_CLIENT_SAVINGLOCAL &&
  119. + xfsm_client_get_state (client) != XFSM_CLIENT_WAITFORINTERACT)
  120. {
  121. xfsm_verbose ("Client Id = %s send SAVE YOURSELF DONE, while not being "
  122. "in save mode. Prepare to be nuked!\n",
  123. @@ -1521,7 +1533,8 @@
  124. xfsm_verbose ("Manager finished SAVE YOURSELF, session data will be stored now.\n\n");
  125.  
  126. /* all clients done, store session data */
  127. - xfsm_manager_store_session (manager);
  128. + if (manager->save_session)
  129. + xfsm_manager_store_session (manager);
  130.  
  131. if (manager->state == XFSM_MANAGER_CHECKPOINT)
  132. {
Advertisement
Add Comment
Please, Sign In to add comment