Blame SOURCES/0016-session-selector-add-toggle-for-classic-normal-selec.patch

5d36d8
From a5a64308ef552d7a1ef4210db9d848c9fd7b3740 Mon Sep 17 00:00:00 2001
5d36d8
From: Ray Strode <rstrode@redhat.com>
5d36d8
Date: Tue, 7 Jan 2014 21:02:02 -0500
5d36d8
Subject: [PATCH 16/19] session-selector: add toggle for classic/normal
5d36d8
 selection
5d36d8
5d36d8
Since we offer both classic mode and regular mode when
5d36d8
not using the session selector, we should also offer it
5d36d8
when using the session selector.
5d36d8
---
5d36d8
 data/session-selector.ui       |  39 ++++++++++++++-
5d36d8
 tools/gnome-session-selector.c | 106 +++++++++++++++++++++++++++++++++++++++++
5d36d8
 2 files changed, 143 insertions(+), 2 deletions(-)
5d36d8
5d36d8
diff --git a/data/session-selector.ui b/data/session-selector.ui
5d36d8
index 4d1e3009..beab73a1 100644
5d36d8
--- a/data/session-selector.ui
5d36d8
+++ b/data/session-selector.ui
5d36d8
@@ -153,71 +153,106 @@
5d36d8
                                 <property name="fill">False</property>
5d36d8
                                 <property name="position">2</property>
5d36d8
                               </packing>
5d36d8
                             </child>
5d36d8
                           </object>
5d36d8
                           <packing>
5d36d8
                             <property name="expand">False</property>
5d36d8
                             <property name="fill">True</property>
5d36d8
                             <property name="position">1</property>
5d36d8
                           </packing>
5d36d8
                         </child>
5d36d8
                       </object>
5d36d8
                       <packing>
5d36d8
                         <property name="expand">True</property>
5d36d8
                         <property name="fill">True</property>
5d36d8
                         <property name="position">1</property>
5d36d8
                       </packing>
5d36d8
                     </child>
5d36d8
                   </object>
5d36d8
                   <packing>
5d36d8
                     <property name="expand">True</property>
5d36d8
                     <property name="fill">True</property>
5d36d8
                     <property name="position">1</property>
5d36d8
                   </packing>
5d36d8
                 </child>
5d36d8
                 <child>
5d36d8
                   <object class="GtkHButtonBox" id="hbuttonbox2">
5d36d8
                     <property name="visible">True</property>
5d36d8
                     <property name="can_focus">False</property>
5d36d8
                     <property name="spacing">6</property>
5d36d8
-                    <property name="layout_style">end</property>
5d36d8
+                    <child>
5d36d8
+                      <object class="GtkBox" id="box1">
5d36d8
+                        <property name="visible">True</property>
5d36d8
+                        <property name="can_focus">False</property>
5d36d8
+                        <property name="spacing">6</property>
5d36d8
+                        <child>
5d36d8
+                          <object class="GtkLabel" id="classic-mode-label">
5d36d8
+                            <property name="visible">True</property>
5d36d8
+                            <property name="can_focus">False</property>
5d36d8
+                            <property name="label" translatable="yes">Classic Experience</property>
5d36d8
+                          </object>
5d36d8
+                          <packing>
5d36d8
+                            <property name="expand">False</property>
5d36d8
+                            <property name="fill">True</property>
5d36d8
+                            <property name="position">0</property>
5d36d8
+                          </packing>
5d36d8
+                        </child>
5d36d8
+                        <child>
5d36d8
+                          <object class="GtkSwitch" id="classic-mode-switch">
5d36d8
+                            <property name="visible">True</property>
5d36d8
+                            <property name="can_focus">True</property>
5d36d8
+                          </object>
5d36d8
+                          <packing>
5d36d8
+                            <property name="expand">False</property>
5d36d8
+                            <property name="fill">True</property>
5d36d8
+                            <property name="position">1</property>
5d36d8
+                          </packing>
5d36d8
+                        </child>
5d36d8
+                      </object>
5d36d8
+                      <packing>
5d36d8
+                        <property name="expand">False</property>
5d36d8
+                        <property name="fill">True</property>
5d36d8
+                        <property name="position">0</property>
5d36d8
+                      </packing>
5d36d8
+                    </child>
5d36d8
                     <child>
5d36d8
                       <object class="GtkButton" id="continue-button">
5d36d8
                         <property name="label" translatable="yes">_Continue</property>
5d36d8
                         <property name="visible">True</property>
5d36d8
                         <property name="can_focus">True</property>
5d36d8
                         <property name="can_default">True</property>
5d36d8
                         <property name="has_default">True</property>
5d36d8
                         <property name="receives_default">True</property>
5d36d8
                         <property name="use_underline">True</property>
5d36d8
                       </object>
5d36d8
                       <packing>
5d36d8
                         <property name="expand">False</property>
5d36d8
                         <property name="fill">False</property>
5d36d8
-                        <property name="position">0</property>
5d36d8
+                        <property name="position">1</property>
5d36d8
+                        <property name="non_homogeneous">True</property>
5d36d8
                       </packing>
5d36d8
                     </child>
5d36d8
                   </object>
5d36d8
                   <packing>
5d36d8
                     <property name="expand">False</property>
5d36d8
                     <property name="fill">True</property>
5d36d8
                     <property name="position">2</property>
5d36d8
                   </packing>
5d36d8
                 </child>
5d36d8
               </object>
5d36d8
             </child>
5d36d8
           </object>
5d36d8
         </child>
5d36d8
       </object>
5d36d8
     </child>
5d36d8
   </object>
5d36d8
   <object class="GtkListStore" id="session-store">
5d36d8
     <columns>
5d36d8
       
5d36d8
       <column type="gchararray"/>
5d36d8
     </columns>
5d36d8
   </object>
5d36d8
   <object class="GtkTreeModelSort" id="sort-model">
5d36d8
     <property name="model">session-store</property>
5d36d8
   </object>
5d36d8
 </interface>
5d36d8
diff --git a/tools/gnome-session-selector.c b/tools/gnome-session-selector.c
5d36d8
index 8f37eca4..f7f12e7b 100644
5d36d8
--- a/tools/gnome-session-selector.c
5d36d8
+++ b/tools/gnome-session-selector.c
5d36d8
@@ -16,60 +16,61 @@
5d36d8
  * along with this program; if not, see <http://www.gnu.org/licenses/>.
5d36d8
  *
5d36d8
  * Written by: Matthias Clasen <mclasen@redhat.com>
5d36d8
  */
5d36d8
 
5d36d8
 #include "config.h"
5d36d8
 
5d36d8
 #include <fcntl.h>
5d36d8
 #include <stdlib.h>
5d36d8
 #include <string.h>
5d36d8
 #include <sys/types.h>
5d36d8
 #include <sys/stat.h>
5d36d8
 #include <unistd.h>
5d36d8
 
5d36d8
 #include <glib.h>
5d36d8
 #include <gtk/gtk.h>
5d36d8
 #include <gio/gio.h>
5d36d8
 
5d36d8
 #include <glib/gi18n.h>
5d36d8
 #include <glib/gstdio.h>
5d36d8
 
5d36d8
 #include <dbus/dbus-glib.h>
5d36d8
 #include <dbus/dbus-glib-lowlevel.h>
5d36d8
 
5d36d8
 #define GSM_SERVICE_DBUS   "org.gnome.SessionManager"
5d36d8
 #define GSM_PATH_DBUS      "/org/gnome/SessionManager"
5d36d8
 #define GSM_INTERFACE_DBUS "org.gnome.SessionManager"
5d36d8
 
5d36d8
 #define GSM_MANAGER_SCHEMA        "org.gnome.SessionManager"
5d36d8
 #define KEY_AUTOSAVE_ONE_SHOT     "auto-save-session-one-shot"
5d36d8
+#define DEFAULT_SESSION_NAME      "gnome"
5d36d8
 
5d36d8
 static GtkBuilder *builder;
5d36d8
 static GtkWidget *session_list;
5d36d8
 static GtkListStore *store;
5d36d8
 static GtkTreeModelSort *sort_model;
5d36d8
 static char *info_text;
5d36d8
 
5d36d8
 static void select_session (const char *name);
5d36d8
 static gboolean make_session_current (const char *name);
5d36d8
 
5d36d8
 static char *
5d36d8
 get_session_path (const char *name)
5d36d8
 {
5d36d8
         return g_build_filename (g_get_user_config_dir (), "gnome-session", name, NULL);
5d36d8
 }
5d36d8
 
5d36d8
 static char *
5d36d8
 find_new_session_name (void)
5d36d8
 {
5d36d8
         char *name;
5d36d8
         char *path;
5d36d8
         int i;
5d36d8
 
5d36d8
         for (i = 1; i < 20; i++) {
5d36d8
                 name = g_strdup_printf (_("Session %d"), i);
5d36d8
                 path = get_session_path (name);
5d36d8
                 if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
5d36d8
                         g_free (path);
5d36d8
                         return name;
5d36d8
                 }
5d36d8
@@ -125,104 +126,126 @@ is_valid_session_name (const char *name)
5d36d8
         gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
5d36d8
         do {
5d36d8
                 gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, 0, &n, -1);
5d36d8
                 if (strcmp (n, name) == 0) {
5d36d8
                         char *message;
5d36d8
                         message = g_strdup_printf (_("A session named ‘%s’ already exists"), name);
5d36d8
                         warning_text = g_strdup_printf ("%s\n<small>Note: %s</small>", info_text, message);
5d36d8
                         g_free (message);
5d36d8
                         g_free (n);
5d36d8
                         break;
5d36d8
                 }
5d36d8
                 g_free (n);
5d36d8
         } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter));
5d36d8
 
5d36d8
         info_bar = (GtkWidget *) gtk_builder_get_object (builder, "info-bar");
5d36d8
         label = (GtkWidget*) gtk_builder_get_object (builder, "info-label");
5d36d8
 
5d36d8
         if (warning_text != NULL) {
5d36d8
             gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), GTK_MESSAGE_WARNING);
5d36d8
             gtk_label_set_markup (GTK_LABEL (label), warning_text);
5d36d8
             g_free (warning_text);
5d36d8
             return FALSE;
5d36d8
         }
5d36d8
 
5d36d8
         gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), GTK_MESSAGE_OTHER);
5d36d8
         gtk_label_set_markup (GTK_LABEL (label), info_text);
5d36d8
 
5d36d8
         return TRUE;
5d36d8
 }
5d36d8
 
5d36d8
+static char *
5d36d8
+get_session_type_from_file (const char *name)
5d36d8
+{
5d36d8
+        char *file;
5d36d8
+        char *type;
5d36d8
+        gboolean loaded;
5d36d8
+
5d36d8
+        file = g_build_filename (g_get_user_config_dir (), "gnome-session", name, "type", NULL);
5d36d8
+        loaded = g_file_get_contents (file, &type, NULL, NULL);
5d36d8
+        g_free (file);
5d36d8
+
5d36d8
+        if (!loaded)
5d36d8
+                return g_strdup (DEFAULT_SESSION_NAME);
5d36d8
+
5d36d8
+        return type;
5d36d8
+}
5d36d8
+
5d36d8
 static void
5d36d8
 populate_session_list (GtkWidget *session_list)
5d36d8
 {
5d36d8
         GtkTreeIter iter;
5d36d8
         char *path;
5d36d8
         const char *name;
5d36d8
         GDir *dir;
5d36d8
         GError *error;
5d36d8
         char *saved_session;
5d36d8
         char *default_session;
5d36d8
         char *default_name;
5d36d8
         char last_session[PATH_MAX] = "";
5d36d8
 
5d36d8
         saved_session = get_session_path ("saved-session");
5d36d8
 
5d36d8
         if (!g_file_test (saved_session, G_FILE_TEST_IS_SYMLINK)) {
5d36d8
                 default_name = find_new_session_name ();
5d36d8
                 default_session = get_session_path (default_name);
5d36d8
                 rename (saved_session, default_session);
5d36d8
                 if (symlink (default_name, saved_session) < 0)
5d36d8
                         g_warning ("Failed to convert saved-session to symlink");
5d36d8
                 g_free (default_name);
5d36d8
                 g_free (default_session);
5d36d8
         }
5d36d8
 
5d36d8
         path = g_build_filename (g_get_user_config_dir (), "gnome-session", NULL);
5d36d8
         error = NULL;
5d36d8
         dir = g_dir_open (path, 0, &error);
5d36d8
         if (dir == NULL) {
5d36d8
                 g_warning ("Failed to open %s: %s", path, error->message);
5d36d8
                 g_error_free (error);
5d36d8
                 goto out;
5d36d8
         }
5d36d8
 
5d36d8
         default_name = NULL;
5d36d8
         if (readlink (saved_session, last_session, PATH_MAX - 1) > 0) {
5d36d8
                 default_name = g_path_get_basename (last_session);
5d36d8
         }
5d36d8
 
5d36d8
         while ((name = g_dir_read_name (dir)) != NULL) {
5d36d8
+                char *session_type;
5d36d8
+
5d36d8
                 if (strcmp (name, "saved-session") == 0)
5d36d8
                         continue;
5d36d8
 
5d36d8
+                session_type = get_session_type_from_file (name);
5d36d8
+
5d36d8
                 gtk_list_store_insert_with_values (store, &iter, 100, 0, name, -1);
5d36d8
+                g_free (session_type);
5d36d8
 
5d36d8
                 if (g_strcmp0 (default_name, name) == 0) {
5d36d8
                         GtkTreeSelection *selection;
5d36d8
                         GtkTreeIter child_iter;
5d36d8
 
5d36d8
                         gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (sort_model), &child_iter, &iter);
5d36d8
                         selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (session_list));
5d36d8
                         gtk_tree_selection_select_iter (selection, &child_iter);
5d36d8
                 }
5d36d8
         }
5d36d8
 
5d36d8
         g_free (default_name);
5d36d8
         g_dir_close (dir);
5d36d8
 
5d36d8
  out:
5d36d8
         g_free (saved_session);
5d36d8
         g_free (path);
5d36d8
 }
5d36d8
 
5d36d8
 static char *
5d36d8
 get_last_session (void)
5d36d8
 {
5d36d8
         char *saved_session;
5d36d8
         char last_session[PATH_MAX] = "";
5d36d8
         char *name = NULL;
5d36d8
 
5d36d8
         saved_session = get_session_path ("saved-session");
5d36d8
 
5d36d8
         if (readlink (saved_session, last_session, PATH_MAX - 1) > 0) {
5d36d8
                 name = g_path_get_basename (last_session);
5d36d8
@@ -260,60 +283,136 @@ remove_session (const char *name)
5d36d8
         GError *error;
5d36d8
 
5d36d8
         path1 = get_session_path ("saved-session");
5d36d8
         path2 = get_session_path (name);
5d36d8
 
5d36d8
         error = NULL;
5d36d8
         n = g_file_read_link (path1, &error);
5d36d8
         if (n == NULL) {
5d36d8
                 g_warning ("Failed to read link: %s", error->message);
5d36d8
                 g_error_free (error);
5d36d8
         }
5d36d8
         else if (strcmp (n, name) == 0) {
5d36d8
                 unlink (path1);
5d36d8
         }
5d36d8
         g_free (n);
5d36d8
 
5d36d8
         dir = g_dir_open (path2, 0, NULL);
5d36d8
         while ((d = g_dir_read_name (dir)) != NULL) {
5d36d8
                 path = g_build_filename (path2, d, NULL);
5d36d8
                 unlink (path);
5d36d8
                 g_free (path);
5d36d8
         }
5d36d8
         g_dir_close (dir);
5d36d8
 
5d36d8
         remove (path2);
5d36d8
 
5d36d8
         g_free (path1);
5d36d8
         g_free (path2);
5d36d8
 }
5d36d8
 
5d36d8
+static const char *
5d36d8
+get_session_type_from_switch (void)
5d36d8
+{
5d36d8
+        GtkWidget *mode_switch;
5d36d8
+        gboolean is_classic_mode;
5d36d8
+
5d36d8
+        mode_switch = (GtkWidget *)gtk_builder_get_object (builder, "classic-mode-switch");
5d36d8
+
5d36d8
+        is_classic_mode = gtk_switch_get_active (GTK_SWITCH (mode_switch));
5d36d8
+
5d36d8
+        if (is_classic_mode) {
5d36d8
+                return "gnome-classic";
5d36d8
+        } else {
5d36d8
+                return "gnome";
5d36d8
+        }
5d36d8
+}
5d36d8
+
5d36d8
+static void
5d36d8
+set_mode_switch_from_session_type_file (const char *name)
5d36d8
+{
5d36d8
+        GtkWidget *mode_switch;
5d36d8
+        gboolean is_classic_mode = FALSE;
5d36d8
+        char *type;
5d36d8
+
5d36d8
+        mode_switch = (GtkWidget *)gtk_builder_get_object (builder, "classic-mode-switch");
5d36d8
+
5d36d8
+        type = get_session_type_from_file (name);
5d36d8
+        is_classic_mode = strcmp (type, "gnome-classic") == 0;
5d36d8
+        g_free (type);
5d36d8
+
5d36d8
+        gtk_switch_set_active (GTK_SWITCH (mode_switch), is_classic_mode);
5d36d8
+}
5d36d8
+
5d36d8
+static void
5d36d8
+save_session_type (const char *save_dir,
5d36d8
+                   const char *type)
5d36d8
+{
5d36d8
+        char *file;
5d36d8
+        GError *error;
5d36d8
+
5d36d8
+        file = g_build_filename (save_dir, "type", NULL);
5d36d8
+
5d36d8
+        error = NULL;
5d36d8
+        g_file_set_contents (file, type, strlen (type), &error);
5d36d8
+        if (error != NULL)
5d36d8
+                g_warning ("couldn't save session type to %s: %s",
5d36d8
+                           type, error->message);
5d36d8
+
5d36d8
+        g_free (file);
5d36d8
+}
5d36d8
+
5d36d8
+static void
5d36d8
+save_session_type_from_switch (void)
5d36d8
+{
5d36d8
+        char *name, *path;
5d36d8
+        const char *session_type;
5d36d8
+
5d36d8
+        name = get_selected_session ();
5d36d8
+
5d36d8
+        if (name == NULL) {
5d36d8
+                return;
5d36d8
+        }
5d36d8
+
5d36d8
+        path = get_session_path (name);
5d36d8
+        g_free (name);
5d36d8
+
5d36d8
+        session_type = get_session_type_from_switch ();
5d36d8
+        save_session_type (path, session_type);
5d36d8
+}
5d36d8
+
5d36d8
+static void
5d36d8
+on_mode_switched (GtkSwitch *mode_switch)
5d36d8
+{
5d36d8
+        save_session_type_from_switch ();
5d36d8
+}
5d36d8
+
5d36d8
 static gboolean
5d36d8
 make_session_current (const char *name)
5d36d8
 {
5d36d8
         char *path1;
5d36d8
         gboolean ret = TRUE;
5d36d8
 
5d36d8
         path1 = g_build_filename (g_get_user_config_dir (), "gnome-session", "saved-session", NULL);
5d36d8
 
5d36d8
         unlink (path1);
5d36d8
         if (symlink (name, path1) < 0) {
5d36d8
                 g_warning ("Failed to make session '%s' current", name);
5d36d8
                 ret = FALSE;
5d36d8
         }
5d36d8
 
5d36d8
         g_free (path1);
5d36d8
 
5d36d8
         return ret;
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 on_remove_session_clicked (GtkButton *button,
5d36d8
                            gpointer   data)
5d36d8
 {
5d36d8
         GtkTreeSelection *selection;
5d36d8
         GtkTreeModel *model;
5d36d8
         GtkTreeIter iter;
5d36d8
         char *name;
5d36d8
 
5d36d8
         selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (session_list));
5d36d8
         if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
5d36d8
@@ -492,60 +591,62 @@ static void
5d36d8
 create_session_and_begin_rename (void)
5d36d8
 {
5d36d8
         gchar *name;
5d36d8
 
5d36d8
         name = find_new_session_name ();
5d36d8
         create_session (name);
5d36d8
         select_session (name);
5d36d8
 
5d36d8
         begin_rename ();
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 on_new_session_clicked (GtkButton *button,
5d36d8
                         gpointer   data)
5d36d8
 {
5d36d8
 	create_session_and_begin_rename ();
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 on_selection_changed (GtkTreeSelection *selection,
5d36d8
                       gpointer          data)
5d36d8
 {
5d36d8
         char *name;
5d36d8
 
5d36d8
         name = get_selected_session ();
5d36d8
 
5d36d8
         if (name == NULL) {
5d36d8
                 return;
5d36d8
         }
5d36d8
 
5d36d8
+        set_mode_switch_from_session_type_file (name);
5d36d8
+
5d36d8
         g_free (name);
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 update_remove_button (void)
5d36d8
 {
5d36d8
         GtkWidget *button;
5d36d8
 
5d36d8
         button = (GtkWidget *)gtk_builder_get_object (builder, "remove-session");
5d36d8
         if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL) > 1) {
5d36d8
                 gtk_widget_set_sensitive (button, TRUE);
5d36d8
         } else {
5d36d8
                 gtk_widget_set_sensitive (button, FALSE);
5d36d8
         }
5d36d8
 }
5d36d8
 
5d36d8
 static void
5d36d8
 on_row_edited (GtkCellRendererText *cell,
5d36d8
                const char          *path_string,
5d36d8
                const char          *new_name,
5d36d8
                gpointer             data)
5d36d8
 {
5d36d8
         GtkTreePath *path;
5d36d8
         GtkTreeIter  sort_iter, items_iter;
5d36d8
         char        *old_name;
5d36d8
         gboolean     was_renamed;
5d36d8
 
5d36d8
         path = gtk_tree_path_new_from_string (path_string);
5d36d8
         gtk_tree_model_get_iter (GTK_TREE_MODEL (sort_model), &sort_iter, path);
5d36d8
 
5d36d8
@@ -751,75 +852,80 @@ main (int argc, char *argv[])
5d36d8
         gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
5d36d8
                                               0, GTK_SORT_ASCENDING);
5d36d8
         g_signal_connect (store, "row-deleted", G_CALLBACK (on_row_deleted), NULL);
5d36d8
         g_signal_connect (store, "row-inserted", G_CALLBACK (on_row_inserted), NULL);
5d36d8
         session_list = (GtkWidget *) gtk_builder_get_object (builder, "session-list");
5d36d8
 
5d36d8
         selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (session_list));
5d36d8
         gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
5d36d8
 
5d36d8
         populate_session_list (session_list);
5d36d8
 
5d36d8
         cell = gtk_cell_renderer_text_new ();
5d36d8
         g_signal_connect (cell, "edited", G_CALLBACK (on_row_edited), NULL);
5d36d8
 
5d36d8
         column = gtk_tree_view_column_new_with_attributes ("", cell, "text", 0, NULL);
5d36d8
         gtk_tree_view_append_column (GTK_TREE_VIEW (session_list), GTK_TREE_VIEW_COLUMN (column));
5d36d8
 
5d36d8
         g_signal_connect (session_list, "row-activated", G_CALLBACK (on_row_activated), NULL);
5d36d8
 
5d36d8
         g_signal_connect (selection, "changed",
5d36d8
                           G_CALLBACK (on_selection_changed), NULL);
5d36d8
 
5d36d8
         widget = (GtkWidget *) gtk_builder_get_object (builder, "new-session");
5d36d8
         g_signal_connect (widget, "clicked", G_CALLBACK (on_new_session_clicked), NULL);
5d36d8
         widget = (GtkWidget *) gtk_builder_get_object (builder, "remove-session");
5d36d8
         g_signal_connect (widget, "clicked", G_CALLBACK (on_remove_session_clicked), NULL);
5d36d8
         widget = (GtkWidget *) gtk_builder_get_object (builder, "rename-session");
5d36d8
         g_signal_connect (widget, "clicked", G_CALLBACK (on_rename_session_clicked), NULL);
5d36d8
         widget = (GtkWidget *) gtk_builder_get_object (builder, "continue-button");
5d36d8
         g_signal_connect (widget, "clicked", G_CALLBACK (on_continue_clicked), NULL);
5d36d8
+        widget = (GtkWidget *) gtk_builder_get_object (builder, "classic-mode-switch");
5d36d8
+        g_signal_connect (widget, "notify::active", G_CALLBACK (on_mode_switched), NULL);
5d36d8
 
5d36d8
         g_signal_connect (window, "map", G_CALLBACK (on_map), NULL);
5d36d8
         gtk_widget_show (window);
5d36d8
 
5d36d8
         if (g_strcmp0 (action, "load") == 0) {
5d36d8
             info_text = _("Please select a custom session to run");
5d36d8
         } else if (g_strcmp0 (action, "print") == 0) {
5d36d8
             info_text = _("Please select a session to use");
5d36d8
         } else if (g_strcmp0 (action, "save") == 0) {
5d36d8
             info_text = _("Please select a session to save to");
5d36d8
         }
5d36d8
 
5d36d8
         label = (GtkWidget*) gtk_builder_get_object (builder, "info-label");
5d36d8
         gtk_label_set_markup (GTK_LABEL (label), info_text);
5d36d8
 
5d36d8
         selected_session = get_selected_session ();
5d36d8
 
5d36d8
         if (selected_session == NULL) {
5d36d8
 		create_session_and_begin_rename ();
5d36d8
 	} else {
5d36d8
+                set_mode_switch_from_session_type_file (selected_session);
5d36d8
 		g_free (selected_session);
5d36d8
         }
5d36d8
 
5d36d8
         gtk_main ();
5d36d8
 
5d36d8
         selected_session = get_selected_session ();
5d36d8
 
5d36d8
         if (g_strcmp0 (action, "load") == 0) {
5d36d8
                 make_session_current (selected_session);
5d36d8
+                save_session_type_from_switch ();
5d36d8
                 auto_save_next_session_if_needed ();
5d36d8
         } else if (g_strcmp0 (action, "save") == 0) {
5d36d8
                 char *last_session;
5d36d8
 
5d36d8
                 last_session = get_last_session ();
5d36d8
                 make_session_current (selected_session);
5d36d8
                 save_session ();
5d36d8
+                save_session_type_from_switch ();
5d36d8
                 if (last_session != NULL)
5d36d8
                     make_session_current (last_session);
5d36d8
         } else if (g_strcmp0 (action, "print") == 0) {
5d36d8
                 g_print ("%s\n", selected_session);
5d36d8
         }
5d36d8
         g_free (selected_session);
5d36d8
 
5d36d8
         return 0;
5d36d8
 }
5d36d8
-- 
5d36d8
2.12.0
5d36d8