diff --git a/gdk/macos/gdkmacosdisplay-private.h b/gdk/macos/gdkmacosdisplay-private.h index 15508faee1..462d2cf66f 100644 --- a/gdk/macos/gdkmacosdisplay-private.h +++ b/gdk/macos/gdkmacosdisplay-private.h @@ -161,7 +161,7 @@ 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_pop_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..9a603ffcdc 100644 --- a/gdk/macos/gdkmacosdisplay.c +++ b/gdk/macos/gdkmacosdisplay.c @@ -992,16 +992,22 @@ _gdk_macos_display_warp_pointer (GdkMacosDisplay *self, } NSEvent * -_gdk_macos_display_get_nsevent (GdkEvent *event) +_gdk_macos_display_pop_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; + { + NSEvent *nsevent = map->nsevent; + g_queue_unlink (&event_map, iter); + gdk_event_unref (map->gdk_event); + g_free (map); + return nsevent; + } } return NULL; diff --git a/gdk/macos/gdkmacoseventsource.c b/gdk/macos/gdkmacoseventsource.c index 44083d9557..1724ad95be 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_pop_nsevent (event); if (nsevent != NULL) [NSApp sendEvent: nsevent]; } diff --git a/gtk/gtkimcontextquartz.c b/gtk/gtkimcontextquartz.c index ad0df397d0..afda65170d 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_pop_nsevent ((GdkEvent *)event); if (!nsevent) {