diff options
author | Simon Steinbeiss <simon.steinbeiss@elfenbeinturm.at> | 2019-05-11 00:12:01 +0200 |
---|---|---|
committer | Simon Steinbeiss <simon.steinbeiss@elfenbeinturm.at> | 2019-05-13 22:10:28 +0200 |
commit | 38b5353a1b682cb5d88a779e3d46fa24d852db69 (patch) | |
tree | 5ae5364de2fde2c5034c659930193614eccb7f79 /settings | |
parent | baa7a70003751689e837048647722808fa67db6a (diff) | |
download | xfce4-session-38b5353a1b682cb5d88a779e3d46fa24d852db69.tar.gz |
Show saved sessions in settings dialog
Diffstat (limited to 'settings')
-rw-r--r-- | settings/main.c | 34 | ||||
-rw-r--r-- | settings/session-editor.c | 33 | ||||
-rw-r--r-- | settings/xfce4-session-settings.ui | 50 |
3 files changed, 109 insertions, 8 deletions
diff --git a/settings/main.c b/settings/main.c index cd488c7b..720cec16 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 8d3b809a..b9dd1939 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 5d513d0e..d77e34ae 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> |