diff options
author | Matthias Clasen <mclasen@redhat.com> | 2018-01-15 16:43:54 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2018-01-16 14:14:10 -0500 |
commit | ab283933be20412b9025909e7d2a175df71e41ae (patch) | |
tree | a31b36a1561d74d2e649e0bbcd245aa85669d1e6 | |
parent | 9dc14b630df560c59e4cc6faa47bcdb78cc8009f (diff) | |
download | gtk+-ab283933be20412b9025909e7d2a175df71e41ae.tar.gz |
mount operation: Stop using ::button-press-event
A multipress gesture does just fine here.
-rw-r--r-- | gtk/gtkmountoperation.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/gtk/gtkmountoperation.c b/gtk/gtkmountoperation.c index 36dbd916b0..4be287f629 100644 --- a/gtk/gtkmountoperation.c +++ b/gtk/gtkmountoperation.c @@ -52,6 +52,7 @@ #include "gtksettings.h" #include "gtkstylecontextprivate.h" #include "gtkdialogprivate.h" +#include "gtkgesturemultipress.h" #include <glib/gprintf.h> @@ -131,6 +132,8 @@ struct _GtkMountOperationPrivate { /* for the show-processes dialog */ GtkWidget *process_tree_view; GtkListStore *process_list_store; + + GtkGesture *multipress_gesture; }; enum { @@ -228,6 +231,8 @@ gtk_mount_operation_finalize (GObject *object) if (priv->handler) g_object_unref (priv->handler); + g_object_unref (priv->multipress_gesture); + G_OBJECT_CLASS (gtk_mount_operation_parent_class)->finalize (object); } @@ -1340,22 +1345,22 @@ on_popup_menu_for_process_tree_view (GtkWidget *widget, return do_popup_menu_for_process_tree_view (widget, NULL, op); } -static gboolean -on_button_press_event_for_process_tree_view (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data) +static void +multi_press_cb (GtkGesture *gesture, + int n_press, + double x, + double y, + gpointer user_data) { GtkMountOperation *op = GTK_MOUNT_OPERATION (user_data); - gboolean ret; - - ret = FALSE; - - if (gdk_event_triggers_context_menu ((GdkEvent *) event)) - { - ret = do_popup_menu_for_process_tree_view (widget, (GdkEvent *) event, op); - } + const GdkEvent *event; + GdkEventSequence *sequence; + GtkWidget *widget; - return ret; + sequence = gtk_gesture_get_last_updated_sequence (gesture); + event = gtk_gesture_get_last_event (gesture, sequence); + widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture)); + do_popup_menu_for_process_tree_view (widget, event, op); } static GtkWidget * @@ -1467,9 +1472,11 @@ create_show_processes_dialog (GtkMountOperation *op, g_signal_connect (tree_view, "popup-menu", G_CALLBACK (on_popup_menu_for_process_tree_view), op); - g_signal_connect (tree_view, "button-press-event", - G_CALLBACK (on_button_press_event_for_process_tree_view), - op); + + priv->multipress_gesture = gtk_gesture_multi_press_new (tree_view); + gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (priv->multipress_gesture), GDK_BUTTON_SECONDARY); + g_signal_connect (priv->multipress_gesture, "pressed", + G_CALLBACK (multi_press_cb), op); list_store = gtk_list_store_new (3, GDK_TYPE_TEXTURE, |