[gtk+/events-refactor: 785/1085] GdkDeviceManagerCore: Remove get_event_window() implementation.
- From: Carlos Garnacho <carlosg src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gtk+/events-refactor: 785/1085] GdkDeviceManagerCore: Remove get_event_window() implementation.
- Date: Tue, 29 Sep 2009 10:48:22 +0000 (UTC)
commit d2bc526bd6ed8ba5b36930693d678e6a57090a67
Author: Carlos Garnacho <carlos lanedo com>
Date: Sun Aug 23 18:21:43 2009 +0200
GdkDeviceManagerCore: Remove get_event_window() implementation.
This is now used internally. Also some extra checks have been added.
gdk/x11/gdkdevicemanager-core.c | 114 ++++++++++++++++++---------------------
1 files changed, 52 insertions(+), 62 deletions(-)
---
diff --git a/gdk/x11/gdkdevicemanager-core.c b/gdk/x11/gdkdevicemanager-core.c
index b70f75a..6d55def 100644
--- a/gdk/x11/gdkdevicemanager-core.c
+++ b/gdk/x11/gdkdevicemanager-core.c
@@ -44,8 +44,6 @@ static gboolean gdk_device_manager_core_translate_event (GdkEventTranslator *tr
GdkDisplay *display,
GdkEvent *event,
XEvent *xevent);
-static Window gdk_device_manager_core_get_event_window (GdkEventTranslator *translator,
- XEvent *xevent);
G_DEFINE_TYPE_WITH_CODE (GdkDeviceManagerCore, gdk_device_manager_core, GDK_TYPE_DEVICE_MANAGER,
@@ -66,7 +64,6 @@ static void
gdk_device_manager_event_translator_init (GdkEventTranslatorIface *iface)
{
iface->translate_event = gdk_device_manager_core_translate_event;
- iface->get_event_window = gdk_device_manager_core_get_event_window;
}
static GdkDevice *
@@ -305,6 +302,54 @@ translate_notify_type (int detail)
}
static gboolean
+is_parent_of (GdkWindow *parent,
+ GdkWindow *child)
+{
+ GdkWindow *w;
+
+ w = child;
+ while (w != NULL)
+ {
+ if (w == parent)
+ return TRUE;
+
+ w = gdk_window_get_parent (w);
+ }
+
+ return FALSE;
+}
+
+static GdkWindow *
+get_event_window (GdkEventTranslator *translator,
+ XEvent *xevent)
+{
+ GdkDisplay *display;
+ GdkWindow *window;
+
+ display = gdk_device_manager_get_display (GDK_DEVICE_MANAGER (translator));
+ window = gdk_window_lookup_for_display (display, xevent->xany.window);
+
+ /* Apply keyboard grabs to non-native windows */
+ if (/* Is key event */
+ (xevent->type == KeyPress || xevent->type == KeyRelease) &&
+ /* And we have a grab */
+ display->keyboard_grab.window != NULL &&
+ (
+ /* The window is not a descendant of the grabbed window */
+ !is_parent_of ((GdkWindow *)display->keyboard_grab.window, window) ||
+ /* Or owner event is false */
+ !display->keyboard_grab.owner_events
+ )
+ )
+ {
+ /* Report key event against grab window */
+ return display->keyboard_grab.window;
+ }
+
+ return window;
+}
+
+static gboolean
gdk_device_manager_core_translate_event (GdkEventTranslator *translator,
GdkDisplay *display,
GdkEvent *event,
@@ -321,18 +366,12 @@ gdk_device_manager_core_translate_event (GdkEventTranslator *translator,
device_manager = GDK_DEVICE_MANAGER_CORE (translator);
return_val = FALSE;
- /* init these, since the done: block uses them */
- window = NULL;
- window_private = NULL;
- event->any.window = NULL;
-
- /* Find the GdkWindow that this event relates to.
- * Basically this means substructure events
- * are reported same as structure events
- */
- window = gdk_event_translator_get_event_window (translator, display, xevent);
+ window = get_event_window (translator, xevent);
window_private = (GdkWindowObject *) window;
+ if (window && GDK_WINDOW_DESTROYED (window))
+ return FALSE;
+
if (window)
{
toplevel = _gdk_x11_window_get_toplevel (window);
@@ -860,55 +899,6 @@ gdk_device_manager_core_translate_event (GdkEventTranslator *translator,
return return_val;
}
-static gboolean
-is_parent_of (GdkWindow *parent,
- GdkWindow *child)
-{
- GdkWindow *w;
-
- w = child;
- while (w != NULL)
- {
- if (w == parent)
- return TRUE;
-
- w = gdk_window_get_parent (w);
- }
-
- return FALSE;
-}
-
-static Window
-gdk_device_manager_core_get_event_window (GdkEventTranslator *translator,
- XEvent *xevent)
-{
- GdkDisplay *display;
-
- display = gdk_device_manager_get_display (GDK_DEVICE_MANAGER (translator));
-
- /* Apply keyboard grabs to non-native windows */
- if (/* Is key event */
- (xevent->type == KeyPress || xevent->type == KeyRelease) &&
- /* And we have a grab */
- display->keyboard_grab.window != NULL)
- {
- GdkWindow *window;
-
- window = gdk_window_lookup_for_display (display, xevent->xkey.window);
-
- if (/* The window is not a descendant of the grabbed window */
- !is_parent_of ((GdkWindow *)display->keyboard_grab.window, window) ||
- /* Or owner event is false */
- !display->keyboard_grab.owner_events)
- {
- /* Report key event against grab window */
- return GDK_WINDOW_XID (display->keyboard_grab.window);
- }
- }
-
- return None;
-}
-
static GList *
gdk_device_manager_core_get_devices (GdkDeviceManager *device_manager,
GdkDeviceType type)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]