summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2012-10-19 13:33:31 -0400
committerJasper St. Pierre <jstpierre@mecheye.net>2012-12-13 10:51:38 -0500
commit9dc4c5ce73b61d4900ab293ec076c96f067a77dd (patch)
tree06a44e52292ce1b41b80e65244487e5548a0c273 /gdk
parent444a92d6d833c0254d554e64e393bfc823d3555f (diff)
downloadgtk+-9dc4c5ce73b61d4900ab293ec076c96f067a77dd.tar.gz
xi2: Abort early if we don't have a proper GDK window
This can happen in mutter or other applications that use GDK filters but don't actually create GDK windows for everything they get events for. https://bugzilla.gnome.org/show_bug.cgi?id=689401
Diffstat (limited to 'gdk')
-rw-r--r--gdk/x11/gdkdevicemanager-xi2.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
index cfbfe6fc0e..a0fba5f64e 100644
--- a/gdk/x11/gdkdevicemanager-xi2.c
+++ b/gdk/x11/gdkdevicemanager-xi2.c
@@ -917,12 +917,14 @@ is_parent_of (GdkWindow *parent,
return FALSE;
}
-static GdkWindow *
+static gboolean
get_event_window (GdkEventTranslator *translator,
- XIEvent *ev)
+ XIEvent *ev,
+ GdkWindow **window_p)
{
GdkDisplay *display;
GdkWindow *window = NULL;
+ gboolean should_have_window = TRUE;
display = gdk_device_manager_get_display (GDK_DEVICE_MANAGER (translator));
@@ -976,9 +978,17 @@ get_event_window (GdkEventTranslator *translator,
window = gdk_x11_window_lookup_for_display (display, xev->event);
}
break;
+ default:
+ should_have_window = FALSE;
+ break;
}
- return window;
+ *window_p = window;
+
+ if (should_have_window && !window)
+ return FALSE;
+
+ return TRUE;
}
static gboolean
@@ -1122,7 +1132,8 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator,
if (!ev)
return FALSE;
- window = get_event_window (translator, ev);
+ if (!get_event_window (translator, ev, &window))
+ return FALSE;
if (window && GDK_WINDOW_DESTROYED (window))
return FALSE;
@@ -1650,6 +1661,7 @@ gdk_x11_device_manager_xi2_get_window (GdkEventTranslator *translator,
{
GdkX11DeviceManagerXI2 *device_manager;
XIEvent *ev;
+ GdkWindow *window = NULL;
device_manager = (GdkX11DeviceManagerXI2 *) translator;
@@ -1659,7 +1671,8 @@ gdk_x11_device_manager_xi2_get_window (GdkEventTranslator *translator,
ev = (XIEvent *) xevent->xcookie.data;
- return get_event_window (translator, ev);
+ get_event_window (translator, ev, &window);
+ return window;
}
GdkDevice *