Updating branch refs/heads/nick/xfrun4-merge
to e79305d087d333e9a005731490288f1830ed4346 (commit)
from 317ecab89a1fbb55be34639fb11a2558dc3b3fb7 (commit)
commit e79305d087d333e9a005731490288f1830ed4346
Author: Nick Schermer <[email protected]>
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)
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits