From 06c4598fc52cf21c7c0355761f3fa2e7e5923e9c Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Wed, 30 Jan 2013 15:11:59 -0500 Subject: [PATCH] GdkX11DeviceManagerXI2: handle focus events not on a known window If we get a focus event for a X window we don't recognize, just ignore it and avoid a g-critical when _gdk_device_manager_core_handle_focus() is called with a NULL window. --- gdk/x11/gdkdevicemanager-xi2.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c index a0fba5f64..62c108ea2 100644 --- a/gdk/x11/gdkdevicemanager-xi2.c +++ b/gdk/x11/gdkdevicemanager-xi2.c @@ -1569,22 +1569,25 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, case XI_FocusIn: case XI_FocusOut: { - XIEnterEvent *xev = (XIEnterEvent *) ev; - GdkDevice *device, *source_device; + if (window) + { + XIEnterEvent *xev = (XIEnterEvent *) ev; + GdkDevice *device, *source_device; - device = g_hash_table_lookup (device_manager->id_table, - GINT_TO_POINTER (xev->deviceid)); + device = g_hash_table_lookup (device_manager->id_table, + GINT_TO_POINTER (xev->deviceid)); - source_device = g_hash_table_lookup (device_manager->id_table, - GUINT_TO_POINTER (xev->sourceid)); + source_device = g_hash_table_lookup (device_manager->id_table, + GUINT_TO_POINTER (xev->sourceid)); - _gdk_device_manager_core_handle_focus (window, - xev->event, - device, - source_device, - (ev->evtype == XI_FocusIn) ? TRUE : FALSE, - xev->detail, - xev->mode); + _gdk_device_manager_core_handle_focus (window, + xev->event, + device, + source_device, + (ev->evtype == XI_FocusIn) ? TRUE : FALSE, + xev->detail, + xev->mode); + } return_val = FALSE; } -- 2.43.2