[mutter/wayland] Kill meta_ui_add_event_func / remove_event_func
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wayland] Kill meta_ui_add_event_func / remove_event_func
- Date: Mon, 31 Mar 2014 03:11:19 +0000 (UTC)
commit afce4482819642645c6f74938f844b1400824c21
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Sun Mar 30 20:58:11 2014 -0400
Kill meta_ui_add_event_func / remove_event_func
The reason we don't simply use gdk_window_add_filter directly is
because of some twisted idea that any GDK symbol being used from
core/ is a layer violation. While we certainly want to keep any
serious GDK code out of ui/, event handling is quite important
to have in core/, so simply use a GDK event filter directly.
src/core/events.c | 20 +++++++++---------
src/ui/ui.c | 55 +++++++++-------------------------------------------
src/ui/ui.h | 7 ------
3 files changed, 20 insertions(+), 62 deletions(-)
---
diff --git a/src/core/events.c b/src/core/events.c
index 1cbd6ba..aaf97f9 100644
--- a/src/core/events.c
+++ b/src/core/events.c
@@ -2124,13 +2124,17 @@ meta_display_handle_event (MetaDisplay *display,
return bypass_clutter;
}
-static gboolean
-xevent_callback (XEvent *event,
- gpointer data)
+static GdkFilterReturn
+xevent_filter (GdkXEvent *xevent,
+ GdkEvent *event,
+ gpointer data)
{
MetaDisplay *display = data;
- return meta_display_handle_xevent (display, event);
+ if (meta_display_handle_xevent (display, xevent))
+ return GDK_FILTER_REMOVE;
+ else
+ return GDK_FILTER_CONTINUE;
}
static gboolean
@@ -2145,9 +2149,7 @@ event_callback (const ClutterEvent *event,
void
meta_display_init_events (MetaDisplay *display)
{
- meta_ui_add_event_func (display->xdisplay,
- xevent_callback,
- display);
+ gdk_window_add_filter (NULL, xevent_filter, display);
display->clutter_event_filter = clutter_event_add_filter (NULL,
event_callback,
NULL,
@@ -2157,9 +2159,7 @@ meta_display_init_events (MetaDisplay *display)
void
meta_display_free_events (MetaDisplay *display)
{
- meta_ui_remove_event_func (display->xdisplay,
- xevent_callback,
- display);
+ gdk_window_remove_filter (NULL, xevent_filter, display);
clutter_event_remove_filter (display->clutter_event_filter);
display->clutter_event_filter = 0;
}
diff --git a/src/ui/ui.c b/src/ui/ui.c
index 1a19838..822eff5 100644
--- a/src/ui/ui.c
+++ b/src/ui/ui.c
@@ -228,58 +228,17 @@ maybe_redirect_mouse_event (XEvent *xevent)
return TRUE;
}
-typedef struct _EventFunc EventFunc;
-
-struct _EventFunc
-{
- MetaEventFunc func;
- gpointer data;
-};
-
-static EventFunc *ef = NULL;
-
static GdkFilterReturn
-filter_func (GdkXEvent *xevent,
- GdkEvent *event,
- gpointer data)
+ui_filter_func (GdkXEvent *xevent,
+ GdkEvent *event,
+ gpointer data)
{
- g_return_val_if_fail (ef != NULL, GDK_FILTER_CONTINUE);
-
- if ((* ef->func) (xevent, ef->data) ||
- maybe_redirect_mouse_event (xevent))
+ if (maybe_redirect_mouse_event (xevent))
return GDK_FILTER_REMOVE;
else
return GDK_FILTER_CONTINUE;
}
-void
-meta_ui_add_event_func (Display *xdisplay,
- MetaEventFunc func,
- gpointer data)
-{
- g_return_if_fail (ef == NULL);
-
- ef = g_new (EventFunc, 1);
- ef->func = func;
- ef->data = data;
-
- gdk_window_add_filter (NULL, filter_func, ef);
-}
-
-/* removal is by data due to proxy function */
-void
-meta_ui_remove_event_func (Display *xdisplay,
- MetaEventFunc func,
- gpointer data)
-{
- g_return_if_fail (ef != NULL);
-
- gdk_window_remove_filter (NULL, filter_func, ef);
-
- g_free (ef);
- ef = NULL;
-}
-
MetaUI*
meta_ui_new (Display *xdisplay,
Screen *screen)
@@ -294,6 +253,8 @@ meta_ui_new (Display *xdisplay,
gdisplay = gdk_x11_lookup_xdisplay (xdisplay);
g_assert (gdisplay == gdk_display_get_default ());
+ gdk_window_add_filter (NULL, ui_filter_func, NULL);
+
ui->frames = meta_frames_new (XScreenNumberOfScreen (screen));
/* GTK+ needs the frame-sync protocol to work in order to properly
* handle style changes. This means that the dummy widget we create
@@ -303,6 +264,8 @@ meta_ui_new (Display *xdisplay,
*/
gtk_widget_show (GTK_WIDGET (ui->frames));
+ gdk_window_add_filter (NULL, ui_filter_func, NULL);
+
g_object_set_data (G_OBJECT (gdisplay), "meta-ui", ui);
return ui;
@@ -318,6 +281,8 @@ meta_ui_free (MetaUI *ui)
gdisplay = gdk_x11_lookup_xdisplay (ui->xdisplay);
g_object_set_data (G_OBJECT (gdisplay), "meta-ui", NULL);
+ gdk_window_remove_filter (NULL, ui_filter_func, NULL);
+
g_free (ui);
}
diff --git a/src/ui/ui.h b/src/ui/ui.h
index ca52f4c..42b2b09 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -46,13 +46,6 @@ Display* meta_ui_get_display (void);
gint meta_ui_get_screen_number (void);
-void meta_ui_add_event_func (Display *xdisplay,
- MetaEventFunc func,
- gpointer data);
-void meta_ui_remove_event_func (Display *xdisplay,
- MetaEventFunc func,
- gpointer data);
-
MetaUI* meta_ui_new (Display *xdisplay,
Screen *screen);
void meta_ui_free (MetaUI *ui);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]