[Xfce4-commits] <xfce4-appfinder:nick/xfrun4-merge> Clear command history menu item.
Nick Schermer
noreply at xfce.org
Sun Jul 3 23:34:02 CEST 2011
Updating branch refs/heads/nick/xfrun4-merge
to e79305d087d333e9a005731490288f1830ed4346 (commit)
from 317ecab89a1fbb55be34639fb11a2558dc3b3fb7 (commit)
commit e79305d087d333e9a005731490288f1830ed4346
Author: Nick Schermer <nick at xfce.org>
Date: Sun Jul 3 23:32:24 2011 +0200
Clear command history menu item.
src/appfinder-model.c | 37 +++++++++++
src/appfinder-model.h | 2 +
src/appfinder-window.c | 162 +++++++++++++++++++++++++++++++++++++-----------
3 files changed, 165 insertions(+), 36 deletions(-)
diff --git a/src/appfinder-model.c b/src/appfinder-model.c
index efaad74..1edc597 100644
--- a/src/appfinder-model.c
+++ b/src/appfinder-model.c
@@ -24,6 +24,7 @@
#include <string.h>
#endif
+#include <glib/gstdio.h>
#include <libxfce4util/libxfce4util.h>
#include <libxfce4ui/libxfce4ui.h>
@@ -1582,6 +1583,42 @@ xfce_appfinder_model_icon_theme_changed (XfceAppfinderModel *model)
+void
+xfce_appfinder_model_commands_clear (XfceAppfinderModel *model)
+{
+ ModelItem *item;
+ GSList *li, *lnext;
+ gint idx;
+ GtkTreePath *path;
+ gchar *filename;
+
+ appfinder_return_if_fail (XFCE_IS_APPFINDER_MODEL (model));
+
+ for (li = model->items, idx = 0; li != NULL; li = lnext, idx++)
+ {
+ lnext = li->next;
+ item = li->data;
+ if (item->item != NULL)
+ continue;
+
+ model->items = g_slist_delete_link (model->items, li);
+
+ path = gtk_tree_path_new_from_indices (idx--, -1);
+ gtk_tree_model_row_deleted (GTK_TREE_MODEL (model), path);
+ gtk_tree_path_free (path);
+
+ xfce_appfinder_model_item_free (item, model);
+ }
+
+ /* remove the history file */
+ filename = xfce_resource_save_location (XFCE_RESOURCE_CACHE, HISTORY_PATH, FALSE);
+ if (filename != NULL)
+ g_unlink (filename);
+ g_free (filename);
+}
+
+
+
GarconMenuDirectory *
xfce_appfinder_model_get_command_category (void)
{
diff --git a/src/appfinder-model.h b/src/appfinder-model.h
index c75be78..f5c86fd 100644
--- a/src/appfinder-model.h
+++ b/src/appfinder-model.h
@@ -85,6 +85,8 @@ void xfce_appfinder_model_icon_theme_changed (XfceAppfinderMod
GarconMenuDirectory *xfce_appfinder_model_get_command_category (void);
+void xfce_appfinder_model_commands_clear (XfceAppfinderModel *model);
+
void xfce_appfinder_model_category_free (CategoryItem *category);
G_END_DECLS
diff --git a/src/appfinder-window.c b/src/appfinder-window.c
index fbb9719..a548a38 100644
--- a/src/appfinder-window.c
+++ b/src/appfinder-window.c
@@ -42,41 +42,45 @@
-static void xfce_appfinder_window_finalize (GObject *object);
-static void xfce_appfinder_window_unmap (GtkWidget *widget);
-static gboolean xfce_appfinder_window_key_press_event (GtkWidget *widget,
- GdkEventKey *event);
-static void xfce_appfinder_window_set_padding (GtkWidget *entry,
- GtkWidget *align);
-static void xfce_appfinder_window_entry_changed (XfceAppfinderWindow *window);
-static void xfce_appfinder_window_entry_activate (GtkEditable *entry,
- XfceAppfinderWindow *window);
-static gboolean xfce_appfinder_window_entry_key_press_event (GtkWidget *entry,
- GdkEventKey *event,
- XfceAppfinderWindow *window);
-static void xfce_appfinder_window_entry_icon_released (GtkEntry *entry,
- GtkEntryIconPosition icon_pos,
- GdkEvent *event,
- XfceAppfinderWindow *window);
-static void xfce_appfinder_window_drag_begin (GtkWidget *widget,
- GdkDragContext *drag_context,
- XfceAppfinderWindow *window);
-static void xfce_appfinder_window_drag_data_get (GtkWidget *widget,
- GdkDragContext *drag_context,
- GtkSelectionData *data,
- guint info,
- guint drag_time,
- XfceAppfinderWindow *window);
-static void xfce_appfinder_window_category_changed (GtkTreeSelection *selection,
- XfceAppfinderWindow *window);
-static void xfce_appfinder_window_category_set_categories (XfceAppfinderWindow *window);
-static gboolean xfce_appfinder_window_item_visible (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data);
-static void xfce_appfinder_window_item_changed (XfceAppfinderWindow *window);
-static void xfce_appfinder_window_row_activated (XfceAppfinderWindow *window);
-static void xfce_appfinder_window_icon_theme_changed (XfceAppfinderWindow *window);
-static void xfce_appfinder_window_execute (XfceAppfinderWindow *window);
+static void xfce_appfinder_window_finalize (GObject *object);
+static void xfce_appfinder_window_unmap (GtkWidget *widget);
+static gboolean xfce_appfinder_window_key_press_event (GtkWidget *widget,
+ GdkEventKey *event);
+static void xfce_appfinder_window_set_padding (GtkWidget *entry,
+ GtkWidget *align);
+static void xfce_appfinder_window_entry_changed (XfceAppfinderWindow *window);
+static void xfce_appfinder_window_entry_activate (GtkEditable *entry,
+ XfceAppfinderWindow *window);
+static gboolean xfce_appfinder_window_entry_key_press_event (GtkWidget *entry,
+ GdkEventKey *event,
+ XfceAppfinderWindow *window);
+static void xfce_appfinder_window_entry_icon_released (GtkEntry *entry,
+ GtkEntryIconPosition icon_pos,
+ GdkEvent *event,
+ XfceAppfinderWindow *window);
+static void xfce_appfinder_window_drag_begin (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ XfceAppfinderWindow *window);
+static void xfce_appfinder_window_drag_data_get (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ GtkSelectionData *data,
+ guint info,
+ guint drag_time,
+ XfceAppfinderWindow *window);
+static void xfce_appfinder_window_category_changed (GtkTreeSelection *selection,
+ XfceAppfinderWindow *window);
+static void xfce_appfinder_window_category_set_categories (XfceAppfinderWindow *window);
+static gboolean xfce_appfinder_window_item_visible (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data);
+static void xfce_appfinder_window_item_changed (XfceAppfinderWindow *window);
+static void xfce_appfinder_window_row_activated (XfceAppfinderWindow *window);
+static void xfce_appfinder_window_icon_theme_changed (XfceAppfinderWindow *window);
+static void xfce_appfinder_window_execute (XfceAppfinderWindow *window);
+static gboolean xfce_appfinder_window_sidepane_popup_menu (XfceAppfinderWindow *window);
+static gboolean xfce_appfinder_window_sidepane_button_release_event (GtkWidget *sidepane,
+ GdkEventButton *event,
+ XfceAppfinderWindow *window);
@@ -240,7 +244,9 @@ xfce_appfinder_window_init (XfceAppfinderWindow *window)
sidepane = window->sidepane = gtk_tree_view_new_with_model (GTK_TREE_MODEL (window->category_model));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (sidepane), FALSE);
gtk_tree_view_set_enable_search (GTK_TREE_VIEW (sidepane), FALSE);
- g_signal_connect_swapped (GTK_TREE_VIEW (sidepane), "start-interactive-search", G_CALLBACK (gtk_widget_grab_focus), entry);
+ g_signal_connect_swapped (G_OBJECT (sidepane), "start-interactive-search", G_CALLBACK (gtk_widget_grab_focus), entry);
+ g_signal_connect_swapped (G_OBJECT (sidepane), "popup-menu", G_CALLBACK (xfce_appfinder_window_sidepane_popup_menu), window);
+ g_signal_connect (G_OBJECT (sidepane), "button-release-event", G_CALLBACK (xfce_appfinder_window_sidepane_button_release_event), window);
gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (sidepane),
xfce_appfinder_category_model_row_separator_func, NULL, NULL);
gtk_container_add (GTK_CONTAINER (scroll), sidepane);
@@ -868,6 +874,90 @@ xfce_appfinder_window_execute (XfceAppfinderWindow *window)
+static void
+xfce_appfinder_window_sidepane_clear (XfceAppfinderWindow *window)
+{
+ if (xfce_dialog_confirm (GTK_WINDOW (window), GTK_STOCK_CLEAR,
+ _("Clear Command History"),
+ _("This will permanently remove the custom command history."),
+ _("Are you sure you want to clear the command history?")))
+ {
+ xfce_appfinder_model_commands_clear (window->model);
+ }
+}
+
+
+static gboolean
+xfce_appfinder_window_sidepane_menu (XfceAppfinderWindow *window,
+ guint32 timestamp)
+{
+ GarconMenuDirectory *category;
+ gboolean result = FALSE;
+ GtkWidget *menu;
+ GtkWidget *mi;
+ GtkWidget *image;
+
+ category = xfce_appfinder_model_get_command_category ();
+ if (window->filter_category == category)
+ {
+ menu = gtk_menu_new ();
+ g_signal_connect (menu, "selection-done", G_CALLBACK (gtk_widget_destroy), NULL);
+
+ mi = gtk_image_menu_item_new_with_label (_("Clear Command History"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
+ g_signal_connect_swapped (G_OBJECT (mi), "activate", G_CALLBACK (xfce_appfinder_window_sidepane_clear), window);
+ gtk_widget_show (mi);
+
+ image = gtk_image_new_from_stock (GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image);
+
+ gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
+ 3, timestamp);
+
+ result = TRUE;
+ }
+ g_object_unref (G_OBJECT (category));
+
+ return result;
+}
+
+
+
+static gboolean
+xfce_appfinder_window_sidepane_popup_menu (XfceAppfinderWindow *window)
+{
+ return xfce_appfinder_window_sidepane_menu (window, gtk_get_current_event_time ());
+}
+
+
+
+static gboolean
+xfce_appfinder_window_sidepane_button_release_event (GtkWidget *sidepane,
+ GdkEventButton *event,
+ XfceAppfinderWindow *window)
+{
+ GtkTreePath *path;
+ gboolean result = FALSE;
+ GtkTreeSelection *selection;
+
+ if (event->button == 3
+ && event->type == GDK_BUTTON_RELEASE
+ && gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (sidepane),
+ event->x, event->y, &path,
+ NULL, NULL, NULL))
+ {
+ /* only try to popup if the clicked item is already selected */
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (sidepane));
+ if (gtk_tree_selection_path_is_selected (selection, path))
+ result = xfce_appfinder_window_sidepane_menu (window, event->time);
+ gtk_tree_path_free (path);
+ }
+
+ return result;
+}
+
+
+
void
xfce_appfinder_window_set_expanded (XfceAppfinderWindow *window,
gboolean expanded)
More information about the Xfce4-commits
mailing list