[gnome-shell] gnome-shell-plugin: Port event filter to XInput2
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] gnome-shell-plugin: Port event filter to XInput2
- Date: Wed, 2 Jan 2013 18:43:48 +0000 (UTC)
commit 9f9518c8726b636a0456449379477100331f302c
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Thu Dec 20 21:34:59 2012 -0500
gnome-shell-plugin: Port event filter to XInput2
Otherwise, we'll see issues with tray icons.
https://bugzilla.gnome.org/show_bug.cgi?id=690590
src/gnome-shell-plugin.c | 26 +++++++++++++++++---------
1 files changed, 17 insertions(+), 9 deletions(-)
---
diff --git a/src/gnome-shell-plugin.c b/src/gnome-shell-plugin.c
index 4c72e14..46da710 100644
--- a/src/gnome-shell-plugin.c
+++ b/src/gnome-shell-plugin.c
@@ -286,18 +286,18 @@ gnome_shell_plugin_kill_switch_workspace (MetaPlugin *plugin)
static gboolean
ignore_crossing_event (MetaPlugin *plugin,
- XEvent *xev)
+ XIEnterEvent *enter_event)
{
MetaScreen *screen = meta_plugin_get_screen (plugin);
ClutterStage *stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen));
- if (xev->xcrossing.window == clutter_x11_get_stage_window (stage))
+ if (enter_event->event == clutter_x11_get_stage_window (stage))
{
/* If the pointer enters a child of the stage window (eg, a
* trayicon), we want to consider it to still be in the stage,
* so don't let Clutter see the event.
*/
- if (xev->xcrossing.detail == NotifyInferior)
+ if (enter_event->detail == XINotifyInferior)
return TRUE;
/* If the pointer is grabbed by a window it is not currently in,
@@ -307,9 +307,9 @@ ignore_crossing_event (MetaPlugin *plugin,
* out of sync, but that happens fairly often with grabs, and we
* can work around it. (Eg, shell_global_sync_pointer().)
*/
- if (xev->xcrossing.mode == NotifyGrab &&
- (xev->xcrossing.detail == NotifyNonlinear ||
- xev->xcrossing.detail == NotifyNonlinearVirtual))
+ if (enter_event->mode == XINotifyGrab &&
+ (enter_event->detail == XINotifyNonlinear ||
+ enter_event->detail == XINotifyNonlinearVirtual))
return TRUE;
}
@@ -320,6 +320,9 @@ static gboolean
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *xev)
{
+ MetaScreen *screen = meta_plugin_get_screen (plugin);
+ MetaDisplay *display = meta_screen_get_display (screen);
+
GnomeShellPlugin *shell_plugin = GNOME_SHELL_PLUGIN (plugin);
#ifdef GLX_INTEL_swap_event
if (shell_plugin->have_swap_event &&
@@ -341,9 +344,14 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
/* Make sure that Clutter doesn't see certain focus change events,
* so that when we're moving into something like a tray icon, we
* don't unfocus the container. */
- if ((xev->xany.type == EnterNotify || xev->xany.type == LeaveNotify) &&
- ignore_crossing_event (plugin, xev))
- return TRUE;
+ if (xev->type == GenericEvent &&
+ xev->xcookie.extension == meta_display_get_xinput_opcode (display))
+ {
+ XIEvent *input_event = (XIEvent *) xev->xcookie.data;
+ if ((input_event->evtype == XI_Enter || input_event->evtype == XI_Leave) &&
+ ignore_crossing_event (plugin, (XIEnterEvent *) input_event))
+ return TRUE;
+ }
/*
* Pass the event to shell-global
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]