summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-08-02 01:14:08 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-08-02 01:14:08 +0000
commit2a528df977654fa84d637ff84f529400d7cba1d8 (patch)
tree47cd5889f4a68c5c21c8c261ac5fe063afbcc634 /gtk
parent84684bd56e48e7263790622249b725931e479b5e (diff)
parent23e79d2eb2bc9aa4b630ab2dee4b38a8fc70af5c (diff)
downloadgtk+-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.c52
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,