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
This commit is contained in:
parent
e84bf7144c
commit
d91d503eb2
@ -30,6 +30,8 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <clutter/x11/clutter-x11.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* There is only one instace of each module per the process.
|
* 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)
|
XEvent *xev)
|
||||||
{
|
{
|
||||||
GList *l;
|
GList *l;
|
||||||
|
gboolean have_plugin_xevent_func;
|
||||||
|
|
||||||
if (!plugin_mgr)
|
if (!plugin_mgr)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
l = plugin_mgr->plugins;
|
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)
|
while (l)
|
||||||
{
|
{
|
||||||
MutterPlugin *plugin = l->data;
|
MutterPlugin *plugin = l->data;
|
||||||
@ -598,6 +619,7 @@ mutter_plugin_manager_xevent_filter (MutterPluginManager *plugin_mgr,
|
|||||||
|
|
||||||
if (klass->xevent_filter)
|
if (klass->xevent_filter)
|
||||||
{
|
{
|
||||||
|
have_plugin_xevent_func = TRUE;
|
||||||
if (klass->xevent_filter (plugin, xev) == TRUE)
|
if (klass->xevent_filter (plugin, xev) == TRUE)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -605,5 +627,8 @@ mutter_plugin_manager_xevent_filter (MutterPluginManager *plugin_mgr,
|
|||||||
l = l->next;
|
l = l->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!have_plugin_xevent_func)
|
||||||
|
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user