summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Matos <[email protected]>2012-10-06 01:39:41 +0200
committerAlexei Sorokin <[email protected]>2017-03-18 22:17:36 +0300
commit9f6ea433ae452b67ed7c58178248e765b673e748 (patch)
tree78ee1afe409ea9b37bb12e3bed59ef10b4b6e44d
parent853cc71a92cb5e931f2a85b58cf6f3e2ba6bc2c2 (diff)
downloadmate-settings-daemon-9f6ea433ae452b67ed7c58178248e765b673e748.tar.bz2
mate-settings-daemon-9f6ea433ae452b67ed7c58178248e765b673e748.tar.xz
mouse: Also grab button presses so as to replay them on pointer locater
Applications might want to establish keyboard grabs on button presses so we should also ungrab the keyboard when a button press occurs after the locate pointer key is pressed. https://bugzilla.gnome.org/show_bug.cgi?id=125618
-rw-r--r--plugins/mouse/msd-locate-pointer.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/plugins/mouse/msd-locate-pointer.c b/plugins/mouse/msd-locate-pointer.c
index 468d840..c6ba14a 100644
--- a/plugins/mouse/msd-locate-pointer.c
+++ b/plugins/mouse/msd-locate-pointer.c
@@ -646,9 +646,23 @@ filter (GdkXEvent *xevent,
XAllowEvents (xev->xkey.display,
SyncKeyboard,
xev->xkey.time);
+ XGrabButton (xev->xkey.display,
+ AnyButton,
+ AnyModifier,
+ xev->xkey.window,
+ False,
+ ButtonPressMask,
+ GrabModeSync,
+ GrabModeAsync,
+ None,
+ None);
}
else
{
+ XUngrabButton (xev->xkey.display,
+ AnyButton,
+ AnyModifier,
+ xev->xkey.window);
XAllowEvents (xev->xkey.display,
AsyncKeyboard,
xev->xkey.time);
@@ -660,10 +674,26 @@ filter (GdkXEvent *xevent,
XAllowEvents (xev->xkey.display,
ReplayKeyboard,
xev->xkey.time);
- XUngrabKeyboard (GDK_DISPLAY_XDISPLAY (display),
+ XUngrabButton (xev->xkey.display,
+ AnyButton,
+ AnyModifier,
+ xev->xkey.window);
+ XUngrabKeyboard (xev->xkey.display,
xev->xkey.time);
}
}
+ else if (xev->type == ButtonPress)
+ {
+ XAllowEvents (xev->xbutton.display,
+ ReplayPointer,
+ xev->xbutton.time);
+ XUngrabButton (xev->xbutton.display,
+ AnyButton,
+ AnyModifier,
+ xev->xbutton.window);
+ XUngrabKeyboard (xev->xbutton.display,
+ xev->xbutton.time);
+ }
return GDK_FILTER_CONTINUE;
}