diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-06-26 23:50:16 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-07-30 13:14:12 +0200 |
commit | 88743ab975bce93454320bdf34cb74d1d321828c (patch) | |
tree | c728a0a70602900e3f3396bb715f6b777009f485 /tests/testiconview.c | |
parent | 6f15447633bd5b87aba85b98c73d63282aba35eb (diff) | |
download | gtk+-88743ab975bce93454320bdf34cb74d1d321828c.tar.gz |
tests: Use gesture to popup menu in testiconview
Diffstat (limited to 'tests/testiconview.c')
-rw-r--r-- | tests/testiconview.c | 84 |
1 files changed, 35 insertions, 49 deletions
diff --git a/tests/testiconview.c b/tests/testiconview.c index b008dd1093..8ecf6b204f 100644 --- a/tests/testiconview.c +++ b/tests/testiconview.c @@ -329,34 +329,13 @@ item_cb (GtkWidget *menuitem, } static void -do_popup_menu (GtkWidget *icon_list, - GdkEvent *event) +do_popup_menu (GtkWidget *icon_list, + GtkTreePath *path) { GtkIconView *icon_view = GTK_ICON_VIEW (icon_list); GtkWidget *menu; GtkWidget *menuitem; - GtkTreePath *path = NULL; - guint button, event_time; ItemData *data; - GList *list; - - if (event) - { - double x, y; - - gdk_event_get_coords (event, &x, &y); - path = gtk_icon_view_get_path_at_pos (icon_view, x, y); - } - else - { - list = gtk_icon_view_get_selected_items (icon_view); - - if (list) - { - path = (GtkTreePath*)list->data; - g_list_free_full (list, (GDestroyNotify) gtk_tree_path_free); - } - } if (!path) return; @@ -373,40 +352,41 @@ do_popup_menu (GtkWidget *icon_list, gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); g_signal_connect (menuitem, "activate", G_CALLBACK (item_cb), data); - if (event) - { - gdk_event_get_button (event, &button); - event_time = gdk_event_get_time (event); - } - else - { - button = 0; - event_time = gtk_get_current_event_time (); - } - - gtk_menu_popup_at_pointer (GTK_MENU (menu), event); + gtk_menu_popup_at_pointer (GTK_MENU (menu), NULL); } - -static gboolean -event_handler (GtkWidget *widget, - GdkEvent *event) +static void +press_handler (GtkGestureMultiPress *gesture, + guint n_press, + gdouble x, + gdouble y, + GtkWidget *widget) { + GtkTreePath *path = NULL; + /* Ignore double-clicks and triple-clicks */ - if (gdk_event_triggers_context_menu (event) && - gdk_event_get_event_type (event) == GDK_BUTTON_PRESS) - { - do_popup_menu (widget, event); - return TRUE; - } + if (n_press > 1) + return; - return FALSE; + path = gtk_icon_view_get_path_at_pos (GTK_ICON_VIEW (widget), x, y); + do_popup_menu (widget, path); } static gboolean popup_menu_handler (GtkWidget *widget) { - do_popup_menu (widget, NULL); + GtkTreePath *path = NULL; + GList *list; + + list = gtk_icon_view_get_selected_items (GTK_ICON_VIEW (widget)); + + if (list) + { + path = (GtkTreePath*)list->data; + g_list_free_full (list, (GDestroyNotify) gtk_tree_path_free); + } + + do_popup_menu (widget, path); return TRUE; } @@ -425,6 +405,7 @@ main (gint argc, gchar **argv) GtkCellRenderer *cell; GtkTreeViewColumn *tvc; GdkContentFormats *targets; + GtkGesture *gesture; #ifdef GTK_SRCDIR g_chdir (GTK_SRCDIR); @@ -453,8 +434,13 @@ main (gint argc, gchar **argv) tvc = gtk_tree_view_column_new (); gtk_tree_view_append_column (GTK_TREE_VIEW (tv), tvc); - g_signal_connect_after (icon_list, "event", - G_CALLBACK (event_handler), NULL); + gesture = gtk_gesture_multi_press_new (); + gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), + GDK_BUTTON_SECONDARY); + g_signal_connect (gesture, "pressed", + G_CALLBACK (press_handler), icon_list); + gtk_widget_add_controller (icon_list, GTK_EVENT_CONTROLLER (gesture)); + g_signal_connect (icon_list, "selection_changed", G_CALLBACK (selection_changed), NULL); g_signal_connect (icon_list, "popup_menu", |