]> Dogcows Code - chaz/openbox/blobdiff - openbox/session.c
add a SessionLogout action
[chaz/openbox] / openbox / session.c
index 5918aa1312778f08f319e8e86295f7a34c097c71..4483c0515547db5013a16747e81a6324a3e4b297 100644 (file)
@@ -33,6 +33,7 @@ GSList *session_desktop_names = NULL;
 void session_startup(gint argc, gchar **argv) {}
 void session_shutdown(gboolean permanent) {}
 GList* session_state_find(struct _ObClient *c) { return NULL; }
+void session_request_logout(gboolean silent) {}
 #else
 
 #include "debug.h"
@@ -100,7 +101,7 @@ void session_startup(gint argc, gchar **argv)
     dir = g_build_filename(parse_xdg_data_home_path(),
                            "openbox", "sessions", NULL);
     if (!parse_mkdir_path(dir, 0700)) {
-        g_message(_("Unable to make directory '%s': %s"),
+        g_message(_("Unable to make directory \"%s\": %s"),
                   dir, g_strerror(errno));
     }
 
@@ -436,7 +437,7 @@ static void sm_save_complete(SmcConn conn, SmPointer data)
 
 static void sm_shutdown_cancelled(SmcConn conn, SmPointer data)
 {
-    ob_debug_type(OB_DEBUG_SM, "Shutdown cancelled\n");    
+    ob_debug_type(OB_DEBUG_SM, "Shutdown cancelled\n");
 }
 
 static gboolean session_save_to_file(const ObSMSaveData *savedata)
@@ -448,7 +449,7 @@ static gboolean session_save_to_file(const ObSMSaveData *savedata)
     f = fopen(ob_sm_save_file, "w");
     if (!f) {
         success = FALSE;
-        g_message(_("Unable to save the session to '%s': %s"),
+        g_message(_("Unable to save the session to \"%s\": %s"),
                   ob_sm_save_file, g_strerror(errno));
     } else {
         fprintf(f, "<?xml version=\"1.0\"?>\n\n");
@@ -580,7 +581,7 @@ static gboolean session_save_to_file(const ObSMSaveData *savedata)
 
         if (fflush(f)) {
             success = FALSE;
-            g_message(_("Error while saving the session to '%s': %s"),
+            g_message(_("Error while saving the session to \"%s\": %s"),
                       ob_sm_save_file, g_strerror(errno));
         }
         fclose(f);
@@ -747,7 +748,7 @@ static void session_load_file(const gchar *path)
             parse_find_node("undecorated", node->children) != NULL;
         state->focused =
             parse_find_node("focused", node->children) != NULL;
-        
+
         /* save this. they are in the file in stacking order, so preserve
            that order here */
         session_saved_state = g_list_append(session_saved_state, state);
@@ -804,4 +805,20 @@ static void session_load_file(const gchar *path)
     xmlFreeDoc(doc);
 }
 
+void session_request_logout(gboolean silent)
+{
+    if (sm_conn) {
+        SmcRequestSaveYourself(sm_conn,
+                               SmSaveBoth,
+                               TRUE, /* logout */
+                               (silent ?
+                                SmInteractStyleNone : SmInteractStyleAny),
+                               TRUE,  /* if false, with GSM, it shows the old
+                                         logout prompt */
+                               TRUE); /* global */
+    }
+    else
+        g_message(_("Not connected to a session manager"));
+}
+
 #endif
This page took 0.025144 seconds and 4 git commands to generate.