From 1ee4a6ba7be2a262721677eb570cf4c2ec86cc70 Mon Sep 17 00:00:00 2001 From: Lionel Le Folgoc Date: Mon, 28 Mar 2011 19:59:12 +0200 Subject: Add a way to delete sessions This adds a "Clear saved sessions" button in xfce4-session-settings ("Session" tab), which lets the user delete $XDG_CACHE_HOME/sessions/xfce4-session-*. --- settings/session-editor.c | 62 ++++++++++++++++++++++++++++++++- settings/xfce4-session-settings.glade | 41 +++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletions(-) diff --git a/settings/session-editor.c b/settings/session-editor.c index 1e7d23a..a8647f7 100644 --- a/settings/session-editor.c +++ b/settings/session-editor.c @@ -160,6 +160,62 @@ session_editor_sel_changed_btn(GtkTreeSelection *sel, } static void +session_editor_clear_sessions(GtkWidget *btn, + GtkWidget *treeview) +{ + gtk_widget_set_sensitive(btn, FALSE); + + if(xfce_message_dialog(GTK_WINDOW(gtk_widget_get_toplevel(treeview)), + _("Clear sessions"), GTK_STOCK_DIALOG_QUESTION, + _("Are you sure you want to empty the saved sessions' cache?"), + _("The current saved sessions will not be reused at your next login."), + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + XFCE_BUTTON_TYPE_MIXED, GTK_STOCK_DELETE, _("_Proceed"), GTK_RESPONSE_ACCEPT, + NULL) == GTK_RESPONSE_ACCEPT) + { + guint i, list_size; + GError *error = NULL; + gchar *item_path; + gchar **sessions_list = NULL; + GFile *item_file; + GFileInfo *item_props; + + sessions_list = xfce_resource_match(XFCE_RESOURCE_CACHE, "sessions/xfce4-session-*", FALSE); + + list_size = g_strv_length(sessions_list); + for (i = 0; i < list_size && sessions_list[i]; ++i) + { + item_path = xfce_resource_lookup(XFCE_RESOURCE_CACHE, sessions_list[i]); + if(!item_path) + continue; + + item_file = g_file_new_for_path(item_path); + g_free(item_path); + item_props = g_file_query_info(item_file, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, + G_FILE_QUERY_INFO_NONE, NULL, NULL); + if(item_props && + g_file_info_get_attribute_boolean(item_props, + G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE)) { + if(!g_file_delete(item_file, NULL, &error)) { + xfce_message_dialog(GTK_WINDOW(gtk_widget_get_toplevel(treeview)), + _("Clear sessions"), GTK_STOCK_DIALOG_ERROR, + _("Unable to empty the saved sessions' cache."), + error->message, + GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, + NULL); + g_error_free(error); + } + } + g_object_unref(item_props); + g_object_unref(item_file); + } + + g_strfreev(sessions_list); + } + gtk_widget_set_sensitive(btn, TRUE); +} + +static void session_editor_quit_client(GtkWidget *btn, GtkWidget *treeview) { @@ -699,7 +755,7 @@ session_editor_populate_treeview(GtkTreeView *treeview) void session_editor_init(GtkBuilder *builder) { - GObject *btn_save, *btn_quit, *dlg_saving; + GObject *btn_save, *btn_quit, *btn_clear, *dlg_saving; GtkTreeView *treeview; GtkTreeSelection *sel; @@ -725,6 +781,10 @@ session_editor_init(GtkBuilder *builder) g_signal_connect(btn_save, "clicked", G_CALLBACK(session_editor_save_session), GTK_WIDGET(dlg_saving)); + btn_clear = gtk_builder_get_object(builder, "btn_clear_sessions"); + g_signal_connect(btn_clear, "clicked", + G_CALLBACK(session_editor_clear_sessions), treeview); + btn_quit = gtk_builder_get_object(builder, "btn_quit_client"); g_signal_connect(btn_quit, "clicked", G_CALLBACK(session_editor_quit_client), treeview); diff --git a/settings/xfce4-session-settings.glade b/settings/xfce4-session-settings.glade index c815bc5..be352de 100644 --- a/settings/xfce4-session-settings.glade +++ b/settings/xfce4-session-settings.glade @@ -527,6 +527,47 @@ + + True + True + True + True + Empty the saved sessions' cache + + + True + 4 + + + True + 1 + gtk-clear + + + 0 + + + + + True + 0 + _Clear saved sessions + True + + + 1 + + + + + + + False + end + 1 + + + True False -- 1.7.4.1