[mutter/wip/wayland-work: 19/22] MetaPluginManager: don't require plugins to pass events to clutter



commit 626dd9d48c1fb0ce010b51aab4046c2d651d3072
Author: Giovanni Campagna <gcampagn redhat com>
Date:   Wed Sep 4 18:11:43 2013 +0200

    MetaPluginManager: don't require plugins to pass events to clutter
    
    We don't want the shell to know if it's running on ClutterX11 or
    not, so we should forward the event ourselves.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=707482

 src/compositor/compositor.c          |    5 +----
 src/compositor/meta-plugin-manager.c |   30 +-----------------------------
 src/compositor/meta-plugin-manager.h |    2 ++
 src/compositor/meta-plugin.c         |   22 ++++++++++++++++++++++
 4 files changed, 26 insertions(+), 33 deletions(-)
---
diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c
index 80046c6..a17218c 100644
--- a/src/compositor/compositor.c
+++ b/src/compositor/compositor.c
@@ -1066,10 +1066,7 @@ meta_compositor_process_event (MetaCompositor *compositor,
 {
   if (compositor->modal_plugin && is_grabbed_event (compositor->display, event))
     {
-      MetaPluginClass *klass = META_PLUGIN_GET_CLASS (compositor->modal_plugin);
-
-      if (klass->xevent_filter)
-        klass->xevent_filter (compositor->modal_plugin, event);
+      _meta_plugin_xevent_filter (compositor->modal_plugin, event);
 
       /* We always consume events even if the plugin says it didn't handle them;
        * exclusive is exclusive */
diff --git a/src/compositor/meta-plugin-manager.c b/src/compositor/meta-plugin-manager.c
index fa9fe96..dee1b08 100644
--- a/src/compositor/meta-plugin-manager.c
+++ b/src/compositor/meta-plugin-manager.c
@@ -306,41 +306,13 @@ meta_plugin_manager_filter_keybinding (MetaPluginManager *plugin_mgr,
   return FALSE;
 }
 
-/*
- * The public method that the compositor hooks into for desktop switching.
- *
- * Returns TRUE if the plugin handled the event type (i.e.,
- * if the return value is FALSE, there will be no subsequent call to the
- * manager completed() callback, and the compositor must ensure that any
- * appropriate post-effect cleanup is carried out.
- */
 gboolean
 meta_plugin_manager_xevent_filter (MetaPluginManager *plugin_mgr,
                                    XEvent            *xev)
 {
   MetaPlugin *plugin = plugin_mgr->plugin;
-  MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
-
-  /* We need to make sure that clutter gets certain events, like
-   * ConfigureNotify on the stage window. If there is a plugin that
-   * provides an xevent_filter function, then it's the responsibility
-   * of that plugin to pass events to Clutter. Otherwise, we send the
-   * event directly to Clutter ourselves.
-   */
-  if (klass->xevent_filter)
-    return klass->xevent_filter (plugin, xev);
-
-  /* When mutter is running as a wayland compositor, things like input
-   * events just come directly from clutter so it won't have disabled
-   * clutter's event retrieval and won't need to forward it events (if
-   * it did it would lead to recursion). Also when running as a
-   * wayland compositor we shouldn't be assuming that we're running
-   * with the clutter x11 backend.
-   */
-  if (meta_is_wayland_compositor ())
-    return FALSE;
 
-  return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
+  return _meta_plugin_xevent_filter (plugin, xev);
 }
 
 void
diff --git a/src/compositor/meta-plugin-manager.h b/src/compositor/meta-plugin-manager.h
index 215d450..f39f5ca 100644
--- a/src/compositor/meta-plugin-manager.h
+++ b/src/compositor/meta-plugin-manager.h
@@ -72,6 +72,8 @@ gboolean meta_plugin_manager_filter_keybinding (MetaPluginManager  *mgr,
 
 gboolean meta_plugin_manager_xevent_filter (MetaPluginManager *mgr,
                                             XEvent            *xev);
+gboolean _meta_plugin_xevent_filter (MetaPlugin *plugin,
+                                     XEvent     *xev);
 
 void     meta_plugin_manager_confirm_display_change (MetaPluginManager *mgr);
 
diff --git a/src/compositor/meta-plugin.c b/src/compositor/meta-plugin.c
index 723b4eb..95aec5c 100644
--- a/src/compositor/meta-plugin.c
+++ b/src/compositor/meta-plugin.c
@@ -183,6 +183,28 @@ _meta_plugin_effect_started (MetaPlugin *plugin)
   priv->running++;
 }
 
+gboolean
+_meta_plugin_xevent_filter (MetaPlugin *plugin,
+                            XEvent     *xev)
+{
+  MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
+
+  /* When mutter is running as a wayland compositor, things like input
+   * events just come directly from clutter so it won't have disabled
+   * clutter's event retrieval and won't need to forward it events (if
+   * it did it would lead to recursion). Also when running as a
+   * wayland compositor we shouldn't be assuming that we're running
+   * with the clutter x11 backend.
+   */
+
+  if (klass->xevent_filter && klass->xevent_filter (plugin, xev))
+    return TRUE;
+  else if (!meta_is_wayland_compositor ())
+    return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
+  else
+    return FALSE;
+}
+
 void
 meta_plugin_switch_workspace_completed (MetaPlugin *plugin)
 {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]