diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-08-02 01:14:08 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-08-02 01:14:08 +0000 |
commit | 2a528df977654fa84d637ff84f529400d7cba1d8 (patch) | |
tree | 47cd5889f4a68c5c21c8c261ac5fe063afbcc634 /gtk | |
parent | 84684bd56e48e7263790622249b725931e479b5e (diff) | |
parent | 23e79d2eb2bc9aa4b630ab2dee4b38a8fc70af5c (diff) | |
download | gtk+-2a528df977654fa84d637ff84f529400d7cba1d8.tar.gz |
Merge branch 'titlebar-gesture' into 'master'
Delegate titlebar action to the compositor if possible
See merge request GNOME/gtk!3797
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkwindowhandle.c | 52 |
1 files changed, 42 insertions, 10 deletions
diff --git a/gtk/gtkwindowhandle.c b/gtk/gtkwindowhandle.c index 1cf9067405..b1494043f2 100644 --- a/gtk/gtkwindowhandle.c +++ b/gtk/gtkwindowhandle.c @@ -266,26 +266,24 @@ do_popup (GtkWindowHandle *self, } static gboolean -perform_titlebar_action (GtkWindowHandle *self, - GdkEvent *event, - guint button, - int n_press) +perform_titlebar_action_fallback (GtkWindowHandle *self, + GdkEvent *event, + GdkTitlebarGesture gesture) { GtkSettings *settings; char *action = NULL; gboolean retval = TRUE; settings = gtk_widget_get_settings (GTK_WIDGET (self)); - switch (button) + switch (gesture) { - case GDK_BUTTON_PRIMARY: - if (n_press == 2) - g_object_get (settings, "gtk-titlebar-double-click", &action, NULL); + case GDK_TITLEBAR_GESTURE_DOUBLE_CLICK: + g_object_get (settings, "gtk-titlebar-double-click", &action, NULL); break; - case GDK_BUTTON_MIDDLE: + case GDK_TITLEBAR_GESTURE_MIDDLE_CLICK: g_object_get (settings, "gtk-titlebar-middle-click", &action, NULL); break; - case GDK_BUTTON_SECONDARY: + case GDK_TITLEBAR_GESTURE_RIGHT_CLICK: g_object_get (settings, "gtk-titlebar-right-click", &action, NULL); break; default: @@ -320,6 +318,40 @@ perform_titlebar_action (GtkWindowHandle *self, return retval; } +static gboolean +perform_titlebar_action (GtkWindowHandle *self, + GdkEvent *event, + guint button, + int n_press) +{ + GdkSurface *surface = + gtk_native_get_surface (gtk_widget_get_native (GTK_WIDGET (self))); + GdkTitlebarGesture gesture; + + switch (button) + { + case GDK_BUTTON_PRIMARY: + if (n_press == 2) + gesture = GDK_TITLEBAR_GESTURE_DOUBLE_CLICK; + else + return FALSE; + break; + case GDK_BUTTON_MIDDLE: + gesture = GDK_TITLEBAR_GESTURE_MIDDLE_CLICK; + break; + case GDK_BUTTON_SECONDARY: + gesture = GDK_TITLEBAR_GESTURE_RIGHT_CLICK; + break; + default: + break; + } + + if (gdk_toplevel_titlebar_gesture (GDK_TOPLEVEL (surface), gesture)) + return TRUE; + + return perform_titlebar_action_fallback (self, event, gesture); +} + static void click_gesture_pressed_cb (GtkGestureClick *gesture, int n_press, |