diff --git a/gdk/macos/gdkmacosdisplay-private.h b/gdk/macos/gdkmacosdisplay-private.h index 15508faee1..592e2ceff3 100644 --- a/gdk/macos/gdkmacosdisplay-private.h +++ b/gdk/macos/gdkmacosdisplay-private.h @@ -161,7 +161,8 @@ void _gdk_macos_display_send_event (GdkMacosDisp void _gdk_macos_display_warp_pointer (GdkMacosDisplay *self, int x, int y); -NSEvent *_gdk_macos_display_get_nsevent (GdkEvent *event); +NSEvent *_gdk_macos_display_get_matching_nsevent (GdkEvent *event); +NSEvent *_gdk_macos_display_get_exact_nsevent (GdkEvent *event); NSEvent *_gdk_macos_display_get_last_nsevent (void); GdkDrag *_gdk_macos_display_find_drag (GdkMacosDisplay *self, NSInteger sequence_number); diff --git a/gdk/macos/gdkmacosdisplay.c b/gdk/macos/gdkmacosdisplay.c index c190ae88cd..6dad7fddd7 100644 --- a/gdk/macos/gdkmacosdisplay.c +++ b/gdk/macos/gdkmacosdisplay.c @@ -991,17 +991,41 @@ _gdk_macos_display_warp_pointer (GdkMacosDisplay *self, CGWarpMouseCursorPosition ((CGPoint) { x, y }); } +/* Find the matching `NSEvent` for an `GdkEvent`. This function + * return the `NSEvent`, also for rewritten `GdkEvent`'s. + */ NSEvent * -_gdk_macos_display_get_nsevent (GdkEvent *event) +_gdk_macos_display_get_matching_nsevent (GdkEvent *event) { - for (const GList *iter = event_map.head; iter; iter = iter->next) + for (GList *iter = event_map.head; iter; iter = iter->next) { - const GdkToNSEventMap *map = iter->data; + GdkToNSEventMap *map = iter->data; if (map->gdk_event->event_type == event->event_type && map->gdk_event->device == event->device && map->gdk_event->time == event->time) - return map->nsevent; + { + return map->nsevent; + } + } + + return NULL; +} + +/* Find the matching `NSEvent` for the original `GdkEvent`. + * If an event was rewritten, it returns `NULL`. + */ +NSEvent * +_gdk_macos_display_get_exact_nsevent (GdkEvent *event) +{ + for (GList *iter = event_map.head; iter; iter = iter->next) + { + GdkToNSEventMap *map = iter->data; + + if (map->gdk_event == event) + { + return map->nsevent; + } } return NULL; diff --git a/gdk/macos/gdkmacoseventsource.c b/gdk/macos/gdkmacoseventsource.c index 44083d9557..b9384778ff 100644 --- a/gdk/macos/gdkmacoseventsource.c +++ b/gdk/macos/gdkmacoseventsource.c @@ -738,7 +738,7 @@ gdk_macos_event_source_dispatch (GSource *source, if (!handled) { - NSEvent *nsevent = _gdk_macos_display_get_nsevent (event); + NSEvent *nsevent = _gdk_macos_display_get_exact_nsevent (event); if (nsevent != NULL) [NSApp sendEvent: nsevent]; } diff --git a/gtk/gtkimcontextquartz.c b/gtk/gtkimcontextquartz.c index ad0df397d0..e0e068c3ee 100644 --- a/gtk/gtkimcontextquartz.c +++ b/gtk/gtkimcontextquartz.c @@ -185,7 +185,7 @@ quartz_filter_keypress (GtkIMContext *context, keyval = gdk_key_event_get_keyval (event); keycode = gdk_key_event_get_keycode (event); - NSEvent *nsevent = _gdk_macos_display_get_nsevent ((GdkEvent *)event); + NSEvent *nsevent = _gdk_macos_display_get_matching_nsevent ((GdkEvent *)event); if (!nsevent) {