diff options
Diffstat (limited to 'mutter-pluginmanager.patch')
-rw-r--r-- | mutter-pluginmanager.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/mutter-pluginmanager.patch b/mutter-pluginmanager.patch new file mode 100644 index 0000000..c24c7fa --- /dev/null +++ b/mutter-pluginmanager.patch @@ -0,0 +1,78 @@ +From d91d503eb25412432e8aa9b4863d469d5828a4b7 Mon Sep 17 00:00:00 2001 +From: Owen W. Taylor <otaylor@fishsoup.net> +Date: Wed, 22 Jul 2009 18:37:43 +0000 +Subject: Pass event to clutter when the plugin doesn't have xevent_filter + +With recent changes, Clutter no longer sets up the viewport correctly, +unless it receives ConfigureNotify events. If there is a plugin with +an xevent_filter function, then it's that plugins responsibility to pass +the event to Clutter if it doesn't want it. If there is no plugin, +or the plugin doesn't have an xevent_filter function, then we should +call clutter_x11_handle_event() ourselves. + +http://bugzilla.gnome.org/show_bug.cgi?id=589419 +--- +diff --git a/src/compositor/mutter-plugin-manager.c b/src/compositor/mutter-plugin-manager.c +index 98d3f19..9d8ae74 100644 +--- a/src/compositor/mutter-plugin-manager.c ++++ b/src/compositor/mutter-plugin-manager.c +@@ -30,6 +30,8 @@ + + #include <string.h> + ++#include <clutter/x11/clutter-x11.h> ++ + /* + * There is only one instace of each module per the process. + */ +@@ -585,12 +587,31 @@ mutter_plugin_manager_xevent_filter (MutterPluginManager *plugin_mgr, + XEvent *xev) + { + GList *l; ++ gboolean have_plugin_xevent_func; + + if (!plugin_mgr) + return FALSE; + + l = plugin_mgr->plugins; + ++ /* 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. ++ * ++ * What happens if there are two plugins with xevent_filter functions ++ * is undefined; in general, multiple competing plugins are something ++ * we don't support well or care much about. ++ * ++ * FIXME: Really, we should just always handle sending the event to ++ * clutter if a plugin doesn't report the event as handled by ++ * returning TRUE, but it doesn't seem worth breaking compatibility ++ * of the plugin interface right now to achieve this; the way it is ++ * now works fine in practice. ++ */ ++ have_plugin_xevent_func = FALSE; ++ + while (l) + { + MutterPlugin *plugin = l->data; +@@ -598,6 +619,7 @@ mutter_plugin_manager_xevent_filter (MutterPluginManager *plugin_mgr, + + if (klass->xevent_filter) + { ++ have_plugin_xevent_func = TRUE; + if (klass->xevent_filter (plugin, xev) == TRUE) + return TRUE; + } +@@ -605,5 +627,8 @@ mutter_plugin_manager_xevent_filter (MutterPluginManager *plugin_mgr, + l = l->next; + } + ++ if (!have_plugin_xevent_func) ++ return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE; ++ + return FALSE; + } +-- +cgit v0.8.2 |