diff options
author | William Hua <william@attente.ca> | 2014-12-01 08:54:13 -0500 |
---|---|---|
committer | William Hua <william@attente.ca> | 2015-02-05 17:26:17 +0100 |
commit | f1cfd23cd2d5c12cc828720ff45c36eb0e11738f (patch) | |
tree | a72564c80b68f1e3f2e8d7980139cf26f3eb5641 /gdk/mir/gdkmireventsource.c | |
parent | e2320678ae2bca845a6b2e9c1d53231b6dfba922 (diff) | |
download | gtk+-f1cfd23cd2d5c12cc828720ff45c36eb0e11738f.tar.gz |
mir: pass motion events down to transient children
Diffstat (limited to 'gdk/mir/gdkmireventsource.c')
-rw-r--r-- | gdk/mir/gdkmireventsource.c | 26 |
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..."); |