From 310d3334ae70819c4b2712b4c0c652537db2dee1 Mon Sep 17 00:00:00 2001 From: Lionel Le Folgoc Date: Thu, 31 Mar 2011 12:34:07 +0200 Subject: Add a way to delete sessions (Bug #5730) This adds a "Clear saved sessions" button in xfce4-session-settings ("Session" tab), which lets the user delete Xfce-related cache items from $XDG_CACHE_HOME/sessions/. --- settings/session-editor.c | 57 ++++++++++++++++++++++++++++++++- settings/xfce4-session-settings.glade | 40 +++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletions(-) diff --git a/settings/session-editor.c b/settings/session-editor.c index 1e7d23a..6ce3749 100644 --- a/settings/session-editor.c +++ b/settings/session-editor.c @@ -160,6 +160,57 @@ 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 session cache?"), + _("The saved states of your applications will not be restored during your next login."), + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + XFCE_BUTTON_TYPE_MIXED, GTK_STOCK_DELETE, _("_Proceed"), GTK_RESPONSE_ACCEPT, + NULL) == GTK_RESPONSE_ACCEPT) + { + const gchar *item_name; + gchar *cache_dir_path, *item_path; + GDir *cache_dir; + GError *error = NULL; + + cache_dir_path = g_build_path(G_DIR_SEPARATOR_S, g_get_user_cache_dir(), "sessions", NULL); + cache_dir = g_dir_open(cache_dir_path, 0, &error); + if(!cache_dir) { + g_critical("Failed to open the session cache's directory: %s", error->message); + g_error_free(error); + g_free(cache_dir_path); + gtk_widget_set_sensitive(btn, TRUE); + return; + } + + while((item_name = g_dir_read_name(cache_dir))) { + /* only clean Xfce related items */ + if(!g_str_has_prefix(item_name, "xfce4-session-") && + !g_str_has_prefix(item_name, "Thunar-") && + !g_str_has_prefix(item_name, "xfwm4-")) { + continue; + } + + item_path = g_build_filename(cache_dir_path, item_name, NULL); + if(G_UNLIKELY(g_unlink(item_path) == -1)) { + g_warning("Failed to delete \"%s\" from the session cache.", item_path); + } + g_free(item_path); + } + g_dir_close(cache_dir); + g_free(cache_dir_path); + } + else { + gtk_widget_set_sensitive(btn, TRUE); + } +} + +static void session_editor_quit_client(GtkWidget *btn, GtkWidget *treeview) { @@ -699,7 +750,7 @@ session_editor_populate_treeview(GtkTreeView *treeview) void session_editor_init(GtkBuilder *builder) { - GObject *btn_save, *btn_quit, *dlg_saving; + GObject *btn_save, *btn_clear, *btn_quit, *dlg_saving; GtkTreeView *treeview; GtkTreeSelection *sel; @@ -725,6 +776,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..367022f 100644 --- a/settings/xfce4-session-settings.glade +++ b/settings/xfce4-session-settings.glade @@ -527,6 +527,46 @@ + + True + True + True + True + Empty the session cache + + + True + 4 + + + True + 1 + gtk-clear + + + 0 + + + + + True + 0 + _Clear saved sessions + True + + + 1 + + + + + + + False + 1 + + + True False -- 1.7.4.1