[gtk+/events-refactor: 749/1085] GdkEventSource: Enable window filters.
- From: Carlos Garnacho <carlosg src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gtk+/events-refactor: 749/1085] GdkEventSource: Enable window filters.
- Date: Tue, 29 Sep 2009 10:47:51 +0000 (UTC)
commit 5899f40aea09ad4d8bc8ed159ecbfa7c97c64bf5
Author: Carlos Garnacho <carlos lanedo com>
Date: Tue Aug 18 02:09:40 2009 +0200
GdkEventSource: Enable window filters.
commented out code has been removed in the event translators.
gdk/x11/gdkdevicemanager-core.c | 46 +--------------------
gdk/x11/gdkdisplay-x11.c | 29 +-------------
gdk/x11/gdkeventsource.c | 85 +++++++++++++++++++++++++++++++++++---
gdk/x11/gdkeventtranslator.c | 21 ----------
gdk/x11/gdkeventtranslator.h | 3 -
5 files changed, 81 insertions(+), 103 deletions(-)
---
diff --git a/gdk/x11/gdkdevicemanager-core.c b/gdk/x11/gdkdevicemanager-core.c
index 4775a83..b70f75a 100644
--- a/gdk/x11/gdkdevicemanager-core.c
+++ b/gdk/x11/gdkdevicemanager-core.c
@@ -311,7 +311,7 @@ gdk_device_manager_core_translate_event (GdkEventTranslator *translator,
XEvent *xevent)
{
GdkDeviceManagerCore *device_manager;
- GdkWindow *window, *filter_window;
+ GdkWindow *window;
GdkWindowObject *window_private;
GdkWindowImplX11 *window_impl = NULL;
gboolean return_val;
@@ -326,29 +326,11 @@ gdk_device_manager_core_translate_event (GdkEventTranslator *translator,
window_private = NULL;
event->any.window = NULL;
- /* Run default filters */
-#if 0
- if (_gdk_default_filters)
- {
- /* Apply global filters */
- GdkFilterReturn result;
- result = gdk_event_apply_filters (xevent, event,
- _gdk_default_filters);
-
- if (result != GDK_FILTER_CONTINUE)
- {
- return_val = (result == GDK_FILTER_TRANSLATE) ? TRUE : FALSE;
- goto done;
- }
- }
-#endif
-
/* 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);
- filter_window = gdk_event_translator_get_filter_window (translator, display, xevent);
window_private = (GdkWindowObject *) window;
if (window)
@@ -368,7 +350,7 @@ gdk_device_manager_core_translate_event (GdkEventTranslator *translator,
case KeyPress:
case KeyRelease:
xwindow = GDK_WINDOW_XID (window);
- xevent->xany.window = xwindow;
+ xevent->xany.window = xwindow
break;
default:
return FALSE;
@@ -390,30 +372,6 @@ gdk_device_manager_core_translate_event (GdkEventTranslator *translator,
goto done;
}
}
-#if 0
- else if (filter_window)
- {
- /* Apply per-window filters */
- GdkWindowObject *filter_private = (GdkWindowObject *) filter_window;
- GdkFilterReturn result;
-
- if (filter_private->filters)
- {
- g_object_ref (filter_window);
-
- result = gdk_event_apply_filters (xevent, event,
- filter_private->filters);
-
- g_object_unref (filter_window);
-
- if (result != GDK_FILTER_CONTINUE)
- {
- return_val = (result == GDK_FILTER_TRANSLATE) ? TRUE : FALSE;
- goto done;
- }
- }
- }
-#endif
if (window &&
(xevent->type == MotionNotify ||
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index d59209e..fbfae73 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -323,7 +323,7 @@ gdk_display_x11_translate_event (GdkEventTranslator *translator,
GdkEvent *event,
XEvent *xevent)
{
- GdkWindow *window, *filter_window;
+ GdkWindow *window;
GdkWindowObject *window_private;
GdkWindowImplX11 *window_impl = NULL;
GdkScreen *screen = NULL;
@@ -333,14 +333,11 @@ gdk_display_x11_translate_event (GdkEventTranslator *translator,
gboolean return_val;
Window xwindow = None;
- /* FIXME: default filters */
-
/* 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);
- filter_window = gdk_event_translator_get_filter_window (translator, display, xevent);
window_private = (GdkWindowObject *) window;
if (window)
@@ -365,30 +362,6 @@ gdk_display_x11_translate_event (GdkEventTranslator *translator,
goto done;
}
}
-#if 0
- else if (filter_window)
- {
- /* Apply per-window filters */
- GdkWindowObject *filter_private = (GdkWindowObject *) filter_window;
- GdkFilterReturn result;
-
- if (filter_private->filters)
- {
- g_object_ref (filter_window);
-
- result = gdk_event_apply_filters (xevent, event,
- filter_private->filters);
-
- g_object_unref (filter_window);
-
- if (result != GDK_FILTER_CONTINUE)
- {
- return_val = (result == GDK_FILTER_TRANSLATE) ? TRUE : FALSE;
- goto done;
- }
- }
- }
-#endif
/* FIXME: if window is NULL, xwindow should still have something meaningful here? */
if (xwindow != None &&
diff --git a/gdk/x11/gdkeventsource.c b/gdk/x11/gdkeventsource.c
index eac2f4b..b7adf4c 100644
--- a/gdk/x11/gdkeventsource.c
+++ b/gdk/x11/gdkeventsource.c
@@ -47,6 +47,44 @@ static GSourceFuncs event_funcs = {
static GList *event_sources = NULL;
+static gint
+gdk_event_apply_filters (XEvent *xevent,
+ GdkEvent *event,
+ GList *filters)
+{
+ GList *tmp_list;
+ GdkFilterReturn result;
+
+ tmp_list = filters;
+
+ while (tmp_list)
+ {
+ GdkEventFilter *filter = (GdkEventFilter*) tmp_list->data;
+
+ tmp_list = tmp_list->next;
+ result = filter->function (xevent, event, filter->data);
+
+ if (result != GDK_FILTER_CONTINUE)
+ return result;
+ }
+
+ return GDK_FILTER_CONTINUE;
+}
+
+static GdkWindow *
+gdk_event_source_get_filter_window (GdkEventSource *event_source,
+ XEvent *xevent)
+{
+ GdkWindow *window;
+
+ window = gdk_window_lookup_for_display (event_source->display,
+ xevent->xany.window);
+
+ if (window && !GDK_IS_WINDOW (window))
+ window = NULL;
+
+ return window;
+}
static GdkEvent *
gdk_event_source_translate_event (GdkEventSource *event_source,
@@ -54,6 +92,46 @@ gdk_event_source_translate_event (GdkEventSource *event_source,
{
GdkEvent *event = NULL;
GList *list = event_source->translators;
+ GdkFilterReturn result;
+ GdkWindow *filter_window;
+
+ /* Run default filters */
+ if (_gdk_default_filters)
+ {
+ /* Apply global filters */
+
+ result = gdk_event_apply_filters (xevent, event,
+ _gdk_default_filters);
+
+ if (result == GDK_FILTER_REMOVE)
+ return NULL;
+ else if (result == GDK_FILTER_TRANSLATE)
+ return event;
+ }
+
+ filter_window = gdk_event_source_get_filter_window (event_source, xevent);
+
+ if (filter_window)
+ {
+ /* Apply per-window filters */
+ GdkWindowObject *filter_private = (GdkWindowObject *) filter_window;
+ GdkFilterReturn result;
+
+ if (filter_private->filters)
+ {
+ g_object_ref (filter_window);
+
+ result = gdk_event_apply_filters (xevent, event,
+ filter_private->filters);
+
+ g_object_unref (filter_window);
+
+ if (result == GDK_FILTER_REMOVE)
+ return NULL;
+ else if (result == GDK_FILTER_TRANSLATE)
+ return event;
+ }
+ }
while (list && !event)
{
@@ -205,13 +283,6 @@ gdk_event_source_new (GdkDisplay *display)
event_sources = g_list_prepend (event_sources, source);
-#if 0
- gdk_display_add_client_message_filter (display,
- gdk_atom_intern_static_string ("WM_PROTOCOLS"),
- gdk_wm_protocols_filter,
- NULL);
-#endif
-
return source;
}
diff --git a/gdk/x11/gdkeventtranslator.c b/gdk/x11/gdkeventtranslator.c
index 39b3c8d..66f45dd 100644
--- a/gdk/x11/gdkeventtranslator.c
+++ b/gdk/x11/gdkeventtranslator.c
@@ -141,24 +141,3 @@ gdk_event_translator_get_event_window (GdkEventTranslator *translator,
return get_gdk_window (display, xwindow);
}
-
-GdkWindow *
-gdk_event_translator_get_filter_window (GdkEventTranslator *translator,
- GdkDisplay *display,
- XEvent *xevent)
-{
- GdkEventTranslatorIface *iface;
- Window xwindow = None;
-
- g_return_val_if_fail (GDK_IS_EVENT_TRANSLATOR (translator), NULL);
-
- iface = GDK_EVENT_TRANSLATOR_GET_IFACE (translator);
-
- if (iface->get_filter_window)
- xwindow = (iface->get_filter_window) (translator, xevent);
-
- if (xwindow == None)
- xwindow = xevent->xany.window;
-
- return get_gdk_window (display, xwindow);
-}
diff --git a/gdk/x11/gdkeventtranslator.h b/gdk/x11/gdkeventtranslator.h
index 4ec6cfc..a3efe56 100644
--- a/gdk/x11/gdkeventtranslator.h
+++ b/gdk/x11/gdkeventtranslator.h
@@ -59,9 +59,6 @@ GdkEvent * gdk_event_translator_translate (GdkEventTranslator *translator,
GdkWindow * gdk_event_translator_get_event_window (GdkEventTranslator *translator,
GdkDisplay *display,
XEvent *xevent);
-GdkWindow * gdk_event_translator_get_filter_window (GdkEventTranslator *translator,
- GdkDisplay *display,
- XEvent *xevent);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]