summaryrefslogtreecommitdiff
path: root/gtk/gtkmain.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2015-02-25 20:34:12 +0100
committerCarlos Garnacho <carlosg@gnome.org>2015-03-02 12:03:39 +0100
commit13e22e20300b7312e52bba7d077fc7e231695fc1 (patch)
treee425c38f376d0ea8d87652c5f6b23dbdcac64d23 /gtk/gtkmain.c
parent0796d7b6ff9393746d90841c8db2ba9a2f7e6df8 (diff)
downloadgtk+-13e22e20300b7312e52bba7d077fc7e231695fc1.tar.gz
gtkwindow: Move window dragging to a standalone drag gesture
The gesture is hooked to the capture phase, so it works for buttons in header bars and whatnot. In order to be friendly to the widget it is capturing events from, an ugly hack is in place to avoid capturing events when the target widget has a gesture that would consume motion events.
Diffstat (limited to 'gtk/gtkmain.c')
-rw-r--r--gtk/gtkmain.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index 806dc6ddff..f50025e3c9 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -1567,12 +1567,6 @@ gtk_main_do_event (GdkEvent *event)
event_widget = gtk_get_event_widget (event);
}
- if (GTK_IS_WINDOW (event_widget))
- {
- if (_gtk_window_check_handle_wm_event (event))
- return;
- }
-
window_group = gtk_main_get_window_group (event_widget);
device = gdk_event_get_device (event);
@@ -1583,6 +1577,14 @@ gtk_main_do_event (GdkEvent *event)
if (!grab_widget)
grab_widget = gtk_window_group_get_current_grab (window_group);
+ if (GTK_IS_WINDOW (event_widget) ||
+ (grab_widget && grab_widget != event_widget &&
+ !gtk_widget_is_ancestor (event_widget, grab_widget)))
+ {
+ if (_gtk_window_check_handle_wm_event (event))
+ return;
+ }
+
/* Find out the topmost widget where captured event propagation
* should start, which is the widget holding the GTK+ grab
* if any, otherwise it's left NULL and events are emitted