static GdkWindow * get_event_window (GdkEventTranslator *translator, XEvent *xevent) { GdkDeviceManager *device_manager; GdkDisplay *display; GdkWindow *window; device_manager = GDK_DEVICE_MANAGER (translator); display = gdk_device_manager_get_display (device_manager); window = gdk_x11_window_lookup_for_display (display, xevent->xany.window); /* Apply keyboard grabs to non-native windows */ if (xevent->type == KeyPress || xevent->type == KeyRelease) { GdkDeviceGrabInfo *info; gulong serial; serial = _gdk_display_get_next_serial (display); info = _gdk_display_has_device_grab (display, GDK_X11_DEVICE_MANAGER_CORE (device_manager)->core_keyboard, serial); if (info && (!is_parent_of (info->window, window) || !info->owner_events)) { /* Report key event against grab window */ window = info->window; } } return window; }
void _gdk_wayland_display_deliver_event (GdkDisplay *display, GdkEvent *event) { GList *node; node = _gdk_event_queue_append (display, event); _gdk_windowing_got_event (display, node, event, _gdk_display_get_next_serial (display)); }
static void send_event (GdkWindow *window, GdkDevice *device, GdkEvent *event) { GdkDisplay *display; GList *node; gdk_event_set_device (event, device); gdk_event_set_source_device (event, device); gdk_event_set_screen (event, gdk_display_get_screen (gdk_window_get_display (window), 0)); event->any.window = g_object_ref (window); display = gdk_window_get_display (window); node = _gdk_event_queue_append (display, event); _gdk_windowing_got_event (display, node, event, _gdk_display_get_next_serial (display)); }