summaryrefslogtreecommitdiff
path: root/gdk/mir/gdkmireventsource.c
diff options
context:
space:
mode:
authorWilliam Hua <william@attente.ca>2014-12-01 08:54:13 -0500
committerWilliam Hua <william@attente.ca>2015-02-05 17:26:17 +0100
commitf1cfd23cd2d5c12cc828720ff45c36eb0e11738f (patch)
treea72564c80b68f1e3f2e8d7980139cf26f3eb5641 /gdk/mir/gdkmireventsource.c
parente2320678ae2bca845a6b2e9c1d53231b6dfba922 (diff)
downloadgtk+-f1cfd23cd2d5c12cc828720ff45c36eb0e11738f.tar.gz
mir: pass motion events down to transient children
Diffstat (limited to 'gdk/mir/gdkmireventsource.c')
-rw-r--r--gdk/mir/gdkmireventsource.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c
index cfe36e8df5..20b7972171 100644
--- a/gdk/mir/gdkmireventsource.c
+++ b/gdk/mir/gdkmireventsource.c
@@ -459,7 +459,31 @@ gdk_mir_event_source_convert_events (GdkMirEventSource *source)
* event was being dispatched...
*/
if (window != NULL)
- gdk_mir_event_source_queue_event (source->display, window, &event->event);
+ {
+ /* TODO: Remove once we have proper transient window support. */
+ if (event->event.type == mir_event_type_motion)
+ {
+ GdkWindow *child;
+ gint x;
+ gint y;
+
+ x = event->event.motion.pointer_coordinates[0].x;
+ y = event->event.motion.pointer_coordinates[0].y;
+
+ child = _gdk_mir_window_get_transient_child (window, x, y, &x, &y);
+
+ if (child && child != window)
+ {
+ window = child;
+
+ event->event.motion.pointer_count = MAX (event->event.motion.pointer_count, 1);
+ event->event.motion.pointer_coordinates[0].x = x;
+ event->event.motion.pointer_coordinates[0].y = y;
+ }
+ }
+
+ gdk_mir_event_source_queue_event (source->display, window, &event->event);
+ }
else
g_warning ("window was destroyed before event arrived...");