[Xfce4-commits] [xfce/xfce4-session] 01/08: Show saved sessions in settings dialog

noreply at xfce.org noreply at xfce.org
Mon May 13 22:10:40 CEST 2019


This is an automated email from the git hooks/post-receive script.

o   c   h   o   s   i       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/xfce4-session.

commit 38b5353a1b682cb5d88a779e3d46fa24d852db69
Author: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
Date:   Sat May 11 00:12:01 2019 +0200

    Show saved sessions in settings dialog
---
 libxfsm/xfsm-util.c                | 181 +++++++++++++++++++++++++++++++++++++
 libxfsm/xfsm-util.h                |  32 +++++++
 settings/main.c                    |  34 ++++++-
 settings/session-editor.c          |  33 ++++++-
 settings/xfce4-session-settings.ui |  50 +++++++++-
 xfce4-session/xfsm-chooser.c       |  67 +-------------
 xfce4-session/xfsm-chooser.h       |   8 --
 xfce4-session/xfsm-global.c        |  25 -----
 xfce4-session/xfsm-global.h        |   2 -
 xfce4-session/xfsm-manager.c       |  40 +-------
 10 files changed, 326 insertions(+), 146 deletions(-)

diff --git a/libxfsm/xfsm-util.c b/libxfsm/xfsm-util.c
index 48f77fe..c418920 100644
--- a/libxfsm/xfsm-util.c
+++ b/libxfsm/xfsm-util.c
@@ -201,3 +201,184 @@ xfsm_gdk_display_get_fullname (GdkDisplay *display)
 
   return g_strdup (buffer);
 }
+
+GdkPixbuf *
+xfsm_load_session_preview (const gchar *name)
+{
+  GdkDisplay *display;
+  GdkPixbuf  *pb = NULL;
+  gchar *display_name;
+  gchar *filename;
+  gchar *path;
+
+  /* determine thumb file */
+  display = gdk_display_get_default ();
+  display_name = xfsm_gdk_display_get_fullname (display);
+  path = g_strconcat ("sessions/thumbs-", display_name, "/", name, ".png", NULL);
+  filename = xfce_resource_lookup (XFCE_RESOURCE_CACHE, path);
+  g_free (display_name);
+  g_free (path);
+
+  if (filename != NULL)
+    pb = gdk_pixbuf_new_from_file (filename, NULL);
+  g_free (filename);
+
+  return pb;
+}
+
+XfceRc *
+settings_list_sessions_open_rc (void)
+{
+  XfceRc *rc;
+  gchar *display_name;
+  gchar *resource_name;
+  gchar *session_file;
+
+  display_name  = xfsm_gdk_display_get_fullname (gdk_display_get_default ());
+  resource_name = g_strconcat ("sessions/xfce4-session-", display_name, NULL);
+  session_file  = xfce_resource_save_location (XFCE_RESOURCE_CACHE, resource_name, TRUE);
+  g_free (resource_name);
+  g_free (display_name);
+
+  if (!g_file_test (session_file, G_FILE_TEST_IS_REGULAR))
+    {
+      g_warning ("xfsm_manager_load_session: Something wrong with %s, Does it exist? Permissions issue?", session_file);
+      return FALSE;
+    }
+
+  rc = xfce_rc_simple_open (session_file, FALSE);
+  if (G_UNLIKELY (rc == NULL))
+  {
+    g_warning ("xfsm_manager_load_session: unable to open %s", session_file);
+    return FALSE;
+  }
+  return rc;
+}
+
+GList *
+settings_list_sessions (XfceRc *rc)
+{
+  XfsmSessionInfo *session;
+  GdkPixbuf       *preview_default = NULL;
+  GList           *sessions = NULL;
+  gchar          **groups;
+  gint             n;
+
+  groups = xfce_rc_get_groups (rc);
+  for (n = 0; groups[n] != NULL; ++n)
+    {
+      if (strncmp (groups[n], "Session: ", 9) == 0)
+        {
+          xfce_rc_set_group (rc, groups[n]);
+          session = g_new0 (XfsmSessionInfo, 1);
+          session->name = g_strdup (groups[n] + 9);
+          session->atime = xfce_rc_read_int_entry (rc, "LastAccess", 0);
+          session->preview = xfsm_load_session_preview (session->name);
+
+          if (session->preview == NULL)
+            {
+              if (G_UNLIKELY (preview_default == NULL))
+                {
+                  preview_default = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
+                                                              "xfce4-logo", 64,
+                                                              GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL);
+                }
+
+              session->preview = GDK_PIXBUF (g_object_ref (preview_default));
+            }
+
+          sessions = g_list_append (sessions, session);
+        }
+    }
+
+  if (preview_default != NULL)
+    g_object_unref (preview_default);
+
+  g_strfreev (groups);
+
+  return sessions;
+}
+
+void
+settings_list_sessions_treeview_init (GtkTreeView *treeview)
+{
+  GtkTreeSelection *selection;
+  GtkTreeViewColumn *column;
+  GtkCellRenderer *renderer;
+  GtkListStore *model;
+
+  model = gtk_list_store_new (N_COLUMNS,
+                              GDK_TYPE_PIXBUF,
+                              G_TYPE_STRING,
+                              G_TYPE_STRING,
+                              G_TYPE_STRING,
+                              G_TYPE_INT);
+
+  gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (model));
+  g_object_unref (G_OBJECT (model));
+
+  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), TRUE);
+  column = gtk_tree_view_column_new ();
+  renderer = gtk_cell_renderer_pixbuf_new ();
+  gtk_tree_view_column_pack_start (column, renderer, FALSE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "pixbuf", PREVIEW_COLUMN,
+                                       NULL);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+
+  column = gtk_tree_view_column_new ();
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_column_set_title (column, _("Session"));
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_expand (column, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "markup", TITLE_COLUMN,
+                                       NULL);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+
+  column = gtk_tree_view_column_new ();
+  renderer = gtk_cell_renderer_text_new ();
+  gtk_tree_view_column_set_alignment (column, 1.0);
+  gtk_tree_view_column_set_title (column, _("Last accessed"));
+  gtk_tree_view_column_pack_start (column, renderer, TRUE);
+  gtk_tree_view_column_set_attributes (column, renderer,
+                                       "text", ACCESSED_COLUMN,
+                                       NULL);
+  gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
+  gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+}
+
+void
+settings_list_sessions_populate (GtkTreeModel *model,
+                                 GList        *sessions)
+{
+  XfsmSessionInfo *session;
+  GtkTreeIter      iter;
+  gchar           *accessed;
+  gchar           *title;
+  GList           *lp;
+
+  gtk_list_store_clear (GTK_LIST_STORE (model));
+
+  for (lp = sessions; lp != NULL; lp = lp->next)
+    {
+      session = (XfsmSessionInfo *) lp->data;
+
+      title = g_strdup_printf ("<b>%s</b>", session->name);
+      accessed = g_strstrip (g_strdup (ctime (&session->atime)));
+
+      gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+      gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                          PREVIEW_COLUMN, session->preview,
+                          NAME_COLUMN, session->name,
+                          TITLE_COLUMN, title,
+                          ACCESSED_COLUMN, accessed,
+                          ATIME_COLUMN, session->atime,
+                          -1);
+
+      g_free (accessed);
+      g_free (title);
+    }
+}
diff --git a/libxfsm/xfsm-util.h b/libxfsm/xfsm-util.h
index 9d545fc..86d7668 100644
--- a/libxfsm/xfsm-util.h
+++ b/libxfsm/xfsm-util.h
@@ -31,6 +31,28 @@
 
 G_BEGIN_DECLS;
 
+#define DEFAULT_SESSION_NAME "Default"
+
+typedef struct _XfsmSessionInfo  XfsmSessionInfo;
+
+struct _XfsmSessionInfo
+{
+  gchar     *name;      /* name of the session */
+  time_t     atime;     /* last access time */
+  GdkPixbuf *preview;   /* preview icon (52x42) */
+};
+
+enum
+{
+  PREVIEW_COLUMN,
+  NAME_COLUMN,
+  TITLE_COLUMN,
+  ACCESSED_COLUMN,
+  ATIME_COLUMN,
+  N_COLUMNS,
+};
+
+
 gboolean xfsm_start_application (gchar      **command,
                                  gchar      **environment,
                                  GdkScreen   *screen,
@@ -49,6 +71,16 @@ XfconfChannel *xfsm_open_config (void);
 
 gchar *xfsm_gdk_display_get_fullname (GdkDisplay *display);
 
+GdkPixbuf *xfsm_load_session_preview (const gchar *name);
+
+XfceRc *settings_list_sessions_open_rc (void);
+
+GList *settings_list_sessions (XfceRc *rc);
+
+void settings_list_sessions_treeview_init (GtkTreeView *treeview);
+
+void settings_list_sessions_populate (GtkTreeModel *model,
+                                      GList       *sessions);
 
 G_END_DECLS;
 
diff --git a/settings/main.c b/settings/main.c
index cd488c7..720cec1 100644
--- a/settings/main.c
+++ b/settings/main.c
@@ -33,6 +33,8 @@
 #include <libxfce4util/libxfce4util.h>
 #include <libxfce4ui/libxfce4ui.h>
 
+#include <libxfsm/xfsm-util.h>
+
 #include "xfae-window.h"
 #include "xfce4-session-settings-common.h"
 #include "xfce4-session-settings_ui.h"
@@ -49,6 +51,26 @@ static void xfce4_session_settings_dialog_response (GtkDialog *dialog, gint resp
     }
 }
 
+static void
+xfce4_session_settings_show_saved_sessions (GtkBuilder *builder,
+                                            XfceRc     *rc,
+                                            gboolean    visible)
+{
+    GtkWidget *notebook = GTK_WIDGET (gtk_builder_get_object (builder, "plug-child"));
+    GtkWidget *sessions_treeview = GTK_WIDGET (gtk_builder_get_object (builder, "saved-sessions-list"));
+    GtkTreeModel    *model;
+    GList *sessions;
+
+    gtk_widget_set_visible (gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 3), visible);
+    if (visible == FALSE)
+        return;
+
+    settings_list_sessions_treeview_init (GTK_TREE_VIEW (sessions_treeview));
+    sessions = settings_list_sessions (rc);
+    model = gtk_tree_view_get_model (GTK_TREE_VIEW (sessions_treeview));
+    settings_list_sessions_populate (model, sessions);
+}
+
 int
 main(int argc,
      char **argv)
@@ -59,6 +81,8 @@ main(int argc,
     GtkWidget *lbl;
     GError *error = NULL;
     XfconfChannel *channel;
+    XfceRc *rc;
+    gboolean visible;
 
     Window opt_socket_id = 0;
     gboolean opt_version = FALSE;
@@ -125,6 +149,8 @@ main(int argc,
 
     session_editor_init(builder);
 
+    channel = xfconf_channel_get (SETTINGS_CHANNEL);
+
     /* FIXME: someday, glade-ify this, maybe. */
     xfae_page = xfae_window_new();
     gtk_widget_show(xfae_page);
@@ -133,7 +159,13 @@ main(int argc,
     gtk_widget_show(lbl);
     gtk_notebook_insert_page(GTK_NOTEBOOK(notebook), xfae_page, lbl, 1);
 
-    channel = xfconf_channel_get(SETTINGS_CHANNEL);
+    /* Check if there are saved sessions and if so, show the "Saved Sessions" tab */
+    rc = settings_list_sessions_open_rc ();
+    if (rc)
+        visible = TRUE;
+    else
+        visible = FALSE;
+    xfce4_session_settings_show_saved_sessions (builder, rc, visible);
 
     /* bind widgets to xfconf */
     xfconf_g_property_bind(channel, "/chooser/AlwaysDisplay", G_TYPE_BOOLEAN,
diff --git a/settings/session-editor.c b/settings/session-editor.c
index 8d3b809..b9dd193 100644
--- a/settings/session-editor.c
+++ b/settings/session-editor.c
@@ -33,6 +33,8 @@
 #include <libxfce4util/libxfce4util.h>
 #include <libxfce4ui/libxfce4ui.h>
 
+#include <libxfsm/xfsm-util.h>
+
 #include "xfce4-session-settings-common.h"
 #include "xfce4-session-marshal.h"
 #include "xfsm-client-dbus-client.h"
@@ -113,9 +115,16 @@ pulse_session_save_dialog(gpointer data)
 
 static void
 session_editor_save_session(GtkWidget *btn,
-                            GtkWidget *dialog)
+                            GtkBuilder *builder)
 {
+    GtkWidget *dialog = GTK_WIDGET (gtk_builder_get_object (builder, "dialog_saving"));
+    GtkWidget *treeview = GTK_WIDGET (gtk_builder_get_object (builder, "saved-sessions-list"));
+    GtkWidget *notebook = GTK_WIDGET (gtk_builder_get_object (builder, "plug-child"));
+    GtkWidget *btn_clear = GTK_WIDGET (gtk_builder_get_object(builder, "btn_clear_sessions"));
     GtkWidget *pbar = g_object_get_data(G_OBJECT(dialog), "pbar");
+    GtkTreeModel    *model;
+    GList *sessions;
+    XfceRc *rc;
     guint pulse_id;
     guint sig_id;
     GError *error = NULL;
@@ -147,6 +156,17 @@ session_editor_save_session(GtkWidget *btn,
     g_signal_handler_disconnect(manager_dbus_proxy, sig_id);
     gtk_widget_hide(dialog);
     gtk_widget_set_sensitive(btn, TRUE);
+    /* After saving the session we ensure the clear button is sensitive */
+    gtk_widget_set_sensitive (btn_clear, TRUE);
+    /* Always make sure the "Saved Sessions" tab is visible  and the treeview is populated after saving a session */
+    rc = settings_list_sessions_open_rc ();
+    if (rc)
+    {
+        gtk_widget_show (gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 3));
+        sessions = settings_list_sessions (rc);
+        model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview));
+        settings_list_sessions_populate (model, sessions);
+    }
 }
 
 static void
@@ -160,8 +180,10 @@ session_editor_sel_changed_btn(GtkTreeSelection *sel,
 
 static void
 session_editor_clear_sessions(GtkWidget *btn,
-                              GtkWidget *treeview)
+                              GtkBuilder *builder)
 {
+    GtkWidget *treeview = GTK_WIDGET (gtk_builder_get_object (builder, "treeview_clients"));
+    GtkWidget *notebook = GTK_WIDGET (gtk_builder_get_object (builder, "plug-child"));
     TRACE("entering");
 
     gtk_widget_set_sensitive(btn, FALSE);
@@ -218,6 +240,9 @@ session_editor_clear_sessions(GtkWidget *btn,
 
         g_dir_close(cache_dir);
         g_free(cache_dir_path);
+
+        /* Always make sure the "Saved Sessions" tab is hidden after deleting all sessions */
+        gtk_widget_hide (gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 3));
     }
     else {
         gtk_widget_set_sensitive(btn, TRUE);
@@ -833,11 +858,11 @@ session_editor_init(GtkBuilder *builder)
 
     btn_save = gtk_builder_get_object(builder, "btn_save_session");
     g_signal_connect(btn_save, "clicked",
-                     G_CALLBACK(session_editor_save_session), GTK_WIDGET(dlg_saving));
+                     G_CALLBACK(session_editor_save_session), builder);
 
     btn_clear = gtk_builder_get_object(builder, "btn_clear_sessions");
     g_signal_connect(btn_clear, "clicked",
-                     G_CALLBACK(session_editor_clear_sessions), treeview);
+                     G_CALLBACK(session_editor_clear_sessions), builder);
 
     btn_quit = gtk_builder_get_object(builder, "btn_quit_client");
     g_signal_connect(btn_quit, "clicked",
diff --git a/settings/xfce4-session-settings.ui b/settings/xfce4-session-settings.ui
index 5d513d0..d77e34a 100644
--- a/settings/xfce4-session-settings.ui
+++ b/settings/xfce4-session-settings.ui
@@ -372,7 +372,7 @@
               <object class="GtkLabel" id="label3">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="label" translatable="yes">Sessio_n</property>
+                <property name="label" translatable="yes">Current Sessio_n</property>
                 <property name="use_underline">True</property>
               </object>
               <packing>
@@ -381,6 +381,50 @@
               </packing>
             </child>
             <child>
+              <object class="GtkBox">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="border_width">12</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkScrolledWindow" id="saved-sessions">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkTreeView" id="saved-sessions-list">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection"/>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">3</property>
+                <property name="reorderable">True</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Saved Sessions</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child>
               <object class="GtkBox" id="vbox3">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
@@ -546,7 +590,7 @@
                 </child>
               </object>
               <packing>
-                <property name="position">2</property>
+                <property name="position">3</property>
               </packing>
             </child>
             <child type="tab">
@@ -557,7 +601,7 @@
                 <property name="use_underline">True</property>
               </object>
               <packing>
-                <property name="position">2</property>
+                <property name="position">3</property>
                 <property name="tab_fill">False</property>
               </packing>
             </child>
diff --git a/xfce4-session/xfsm-chooser.c b/xfce4-session/xfsm-chooser.c
index ee10135..636a957 100644
--- a/xfce4-session/xfsm-chooser.c
+++ b/xfce4-session/xfsm-chooser.c
@@ -52,16 +52,6 @@ static void xfsm_chooser_realized      (GtkWidget         *widget,
                                         XfsmChooser       *chooser);
 
 
-enum
-{
-  PREVIEW_COLUMN,
-  NAME_COLUMN,
-  TITLE_COLUMN,
-  ATIME_COLUMN,
-  N_COLUMNS,
-};
-
-
 
 G_DEFINE_TYPE (XfsmChooser, xfsm_chooser, GTK_TYPE_DIALOG)
 
@@ -72,37 +62,11 @@ xfsm_chooser_set_sessions (XfsmChooser *chooser,
                            GList       *sessions,
                            const gchar *default_session)
 {
-  XfsmSessionInfo *session;
   GtkTreeModel    *model;
-  GtkTreeIter      iter;
-  gchar           *accessed;
-  gchar           *title;
-  GList           *lp;
 
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (chooser->tree));
-  gtk_list_store_clear (GTK_LIST_STORE (model));
 
-  for (lp = sessions; lp != NULL; lp = lp->next)
-    {
-      session = (XfsmSessionInfo *) lp->data;
-
-      accessed = g_strdup_printf (_("Last accessed: %s"),
-                                  ctime (&session->atime));
-      title = g_strdup_printf ("<b><big>%s</big></b>\n"
-                               "<small><i>%s</i></small>",
-                               session->name, accessed);
-
-      gtk_list_store_append (GTK_LIST_STORE (model), &iter);
-      gtk_list_store_set (GTK_LIST_STORE (model), &iter,
-                          PREVIEW_COLUMN, session->preview,
-                          NAME_COLUMN, session->name,
-                          TITLE_COLUMN, title,
-                          ATIME_COLUMN, session->atime,
-                          -1);
-
-      g_free (accessed);
-      g_free (title);
-    }
+  settings_list_sessions_populate (GTK_TREE_MODEL (model), sessions);
 }
 
 
@@ -201,10 +165,6 @@ xfsm_chooser_class_init (XfsmChooserClass *klass)
 static void
 xfsm_chooser_init (XfsmChooser *chooser)
 {
-  GtkTreeSelection *selection;
-  GtkTreeViewColumn *column;
-  GtkCellRenderer *renderer;
-  GtkListStore *model;
   GtkWidget *button;
   GtkWidget *swin;
   GtkWidget *vbox;
@@ -240,33 +200,12 @@ xfsm_chooser_init (XfsmChooser *chooser)
   gtk_box_pack_start (GTK_BOX (vbox), swin, TRUE, TRUE, 0);
 
   /* tree view */
-  model = gtk_list_store_new (N_COLUMNS,
-                              GDK_TYPE_PIXBUF,
-                              G_TYPE_STRING,
-                              G_TYPE_STRING,
-                              G_TYPE_INT);
-  chooser->tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(model));
-  g_object_unref (G_OBJECT (model));
+  chooser->tree = gtk_tree_view_new ();
+  settings_list_sessions_treeview_init (GTK_TREE_VIEW (chooser->tree));
   gtk_widget_set_tooltip_text (chooser->tree,
                                _("Choose the session you want to restore. "
                                  "You can simply double-click the session "
                                  "name to restore it."));
-
-  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (chooser->tree), FALSE);
-  column = gtk_tree_view_column_new ();
-  renderer = gtk_cell_renderer_pixbuf_new ();
-  gtk_tree_view_column_pack_start (column, renderer, FALSE);
-  gtk_tree_view_column_set_attributes (column, renderer,
-                                       "pixbuf", PREVIEW_COLUMN,
-                                       NULL);
-  renderer = gtk_cell_renderer_text_new ();
-  gtk_tree_view_column_pack_start (column, renderer, TRUE);
-  gtk_tree_view_column_set_attributes (column, renderer,
-                                       "markup", TITLE_COLUMN,
-                                       NULL);
-  gtk_tree_view_append_column (GTK_TREE_VIEW (chooser->tree), column);
-  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (chooser->tree));
-  gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
   g_signal_connect (G_OBJECT (chooser->tree), "row-activated",
                     G_CALLBACK (xfsm_chooser_row_activated), chooser);
   gtk_container_add (GTK_CONTAINER (swin), chooser->tree);
diff --git a/xfce4-session/xfsm-chooser.h b/xfce4-session/xfsm-chooser.h
index e8bb956..e75f60a 100644
--- a/xfce4-session/xfsm-chooser.h
+++ b/xfce4-session/xfsm-chooser.h
@@ -37,7 +37,6 @@ G_BEGIN_DECLS;
 
 typedef struct _XfsmChooser XfsmChooser;
 typedef struct _XfsmChooserClass XfsmChooserClass;
-typedef struct _XfsmSessionInfo  XfsmSessionInfo;
 
 struct _XfsmChooserClass
 {
@@ -51,13 +50,6 @@ struct _XfsmChooser
   GtkWidget *tree;
 };
 
-struct _XfsmSessionInfo
-{
-  gchar     *name;      /* name of the session */
-  time_t     atime;     /* last access time */
-  GdkPixbuf *preview;   /* preview icon (52x42) */
-};
-
 GType xfsm_chooser_get_type (void) G_GNUC_CONST;
 
 void xfsm_chooser_set_sessions (XfsmChooser *chooser,
diff --git a/xfce4-session/xfsm-global.c b/xfce4-session/xfsm-global.c
index 4dd3ab1..41fdb66 100644
--- a/xfce4-session/xfsm-global.c
+++ b/xfce4-session/xfsm-global.c
@@ -174,31 +174,6 @@ xfsm_generate_client_id (SmsConn sms_conn)
 }
 
 
-GdkPixbuf *
-xfsm_load_session_preview (const gchar *name)
-{
-  GdkDisplay *display;
-  GdkPixbuf  *pb = NULL;
-  gchar *display_name;
-  gchar *filename;
-  gchar *path;
-
-  /* determine thumb file */
-  display = gdk_display_get_default ();
-  display_name = xfsm_gdk_display_get_fullname (display);
-  path = g_strconcat ("sessions/thumbs-", display_name, "/", name, ".png", NULL);
-  filename = xfce_resource_lookup (XFCE_RESOURCE_CACHE, path);
-  g_free (display_name);
-  g_free (path);
-
-  if (filename != NULL)
-    pb = gdk_pixbuf_new_from_file (filename, NULL);
-  g_free (filename);
-
-  return pb;
-}
-
-
 GValue *
 xfsm_g_value_new (GType gtype)
 {
diff --git a/xfce4-session/xfsm-global.h b/xfce4-session/xfsm-global.h
index 78131bc..abda5e7 100644
--- a/xfce4-session/xfsm-global.h
+++ b/xfce4-session/xfsm-global.h
@@ -69,8 +69,6 @@ void xfsm_verbose_real (const char *func,
 
 gchar *xfsm_generate_client_id (SmsConn sms_conn) G_GNUC_PURE;
 
-GdkPixbuf *xfsm_load_session_preview (const gchar *name);
-
 GValue *xfsm_g_value_new (GType gtype);
 void    xfsm_g_value_free (GValue *value);
 
diff --git a/xfce4-session/xfsm-manager.c b/xfce4-session/xfsm-manager.c
index 14b74a8..3d12e2f 100644
--- a/xfce4-session/xfsm-manager.c
+++ b/xfce4-session/xfsm-manager.c
@@ -67,9 +67,6 @@
 #include <xfce4-session/xfsm-logout-dialog.h>
 
 
-#define DEFAULT_SESSION_NAME "Default"
-
-
 struct _XfsmManager
 {
   XfsmDbusManagerSkeleton parent;
@@ -432,46 +429,13 @@ xfsm_manager_choose_session (XfsmManager *manager,
                              XfceRc      *rc)
 {
   XfsmSessionInfo *session;
-  GdkPixbuf       *preview_default = NULL;
   gboolean         load = FALSE;
   GList           *sessions = NULL;
   GList           *lp;
-  gchar          **groups;
   gchar           *name;
   gint             result;
-  gint             n;
-
-  groups = xfce_rc_get_groups (rc);
-  for (n = 0; groups[n] != NULL; ++n)
-    {
-      if (strncmp (groups[n], "Session: ", 9) == 0)
-        {
-          xfce_rc_set_group (rc, groups[n]);
-          session = g_new0 (XfsmSessionInfo, 1);
-          session->name = groups[n] + 9;
-          session->atime = xfce_rc_read_int_entry (rc, "LastAccess", 0);
-          session->preview = xfsm_load_session_preview (session->name);
 
-          if (session->preview == NULL)
-            {
-              if (G_UNLIKELY (preview_default == NULL))
-                {
-                  G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-                  /* TODO: Turn this into a normal pixbuf? */
-                  preview_default = gdk_pixbuf_new_from_inline (-1, xfsm_chooser_icon_data,
-                                                                FALSE, NULL);
-                  G_GNUC_END_IGNORE_DEPRECATIONS
-                }
-
-              session->preview = GDK_PIXBUF (g_object_ref (preview_default));
-            }
-
-          sessions = g_list_append (sessions, session);
-        }
-    }
-
-  if (preview_default != NULL)
-    g_object_unref (preview_default);
+  sessions = settings_list_sessions (rc);
 
   if (sessions != NULL)
     {
@@ -502,8 +466,6 @@ xfsm_manager_choose_session (XfsmManager *manager,
       g_list_free (sessions);
     }
 
-  g_strfreev (groups);
-
   return load;
 }
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list