[Xfce4-commits] <xfwm4:master> Do not write empty session files.

Nick Schermer noreply at xfce.org
Sat Nov 10 17:40:01 CET 2012


Updating branch refs/heads/master
         to ddfeba132ff7d53acf93bc065d8e3902d440feda (commit)
       from 12351955a144ee207c6970ad610d8e5b022bd147 (commit)

commit ddfeba132ff7d53acf93bc065d8e3902d440feda
Author: Nick Schermer <nick at xfce.org>
Date:   Sat Nov 10 18:37:20 2012 +0100

    Do not write empty session files.
    
    Unlink the session file if no windows have been saves.

 src/session.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/session.c b/src/session.c
index 1c75ea5..137c978 100644
--- a/src/session.c
+++ b/src/session.c
@@ -40,6 +40,7 @@
 
 #include <gtk/gtk.h>
 #include <glib.h>
+#include <glib/gstdio.h>
 #include <libxfce4ui/libxfce4ui.h>
 
 #include "display.h"
@@ -263,7 +264,7 @@ getsubstring (gchar * s, gint * length)
     return ns;
 }
 
-static void
+static gboolean
 sessionSaveScreen (ScreenInfo *screen_info, FILE *f)
 {
     DisplayInfo *display_info;
@@ -272,6 +273,7 @@ sessionSaveScreen (ScreenInfo *screen_info, FILE *f)
     gchar **wm_command;
     gint wm_command_count;
     guint client_idx;
+    gboolean wrote_data = FALSE;
 
     display_info = screen_info->display_info;
     wm_command_count = 0;
@@ -296,6 +298,8 @@ sessionSaveScreen (ScreenInfo *screen_info, FILE *f)
             window_role = NULL;
         }
 
+        wrote_data = TRUE;
+
         fprintf (f, "[CLIENT] 0x%lx\n", c->window);
 
         getClientID (display_info, c->window, &client_id);
@@ -363,6 +367,8 @@ sessionSaveScreen (ScreenInfo *screen_info, FILE *f)
                 CLIENT_FLAG_SHADED | CLIENT_FLAG_MAXIMIZED |
                 CLIENT_FLAG_NAME_CHANGED));
     }
+
+    return wrote_data;
 }
 
 gboolean
@@ -370,6 +376,7 @@ sessionSaveWindowStates (DisplayInfo *display_info, const gchar * filename)
 {
     FILE *f;
     GSList *screens;
+    gboolean wrote_data = FALSE;
 
     g_return_val_if_fail (filename != NULL, FALSE);
     g_return_val_if_fail (display_info != NULL, FALSE);
@@ -379,9 +386,15 @@ sessionSaveWindowStates (DisplayInfo *display_info, const gchar * filename)
         for (screens = display_info->screens; screens; screens = g_slist_next (screens))
         {
             ScreenInfo *screen_info_n = (ScreenInfo *) screens->data;
-            sessionSaveScreen (screen_info_n, f);
+            if (sessionSaveScreen (screen_info_n, f))
+              wrote_data = TRUE;
         }
         fclose (f);
+
+        /* remove the file if nothing has been written */
+        if (!wrote_data)
+          g_unlink (filename);
+
         return TRUE;
     }
     return FALSE;


More information about the Xfce4-commits mailing list