xserver: Branch 'master'
Peter Hutterer
whot at kemper.freedesktop.org
Mon May 16 06:29:58 UTC 2016
dix/enterleave.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
New commits:
commit 2fbf5c2f91d33efbda573c4be036248b1d8ed7f1
Author: Andrew Comminos <andrew at comminos.com>
Date: Tue Dec 29 23:41:27 2015 -0800
Input: Send XI2 FocusOut NotifyPointer events to the pointer window.
This changes XInput 2's propagation of NotifyPointer focus out events to
include the pointer window as well, similar to core events. This fixes
a potential permanent focus in GDK when the focus moves to PointerRoot.
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=93539
Signed-off-by: Andrew Comminos <andrew at comminos.com>
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/dix/enterleave.c b/dix/enterleave.c
index 0fba8bd..0c6c616 100644
--- a/dix/enterleave.c
+++ b/dix/enterleave.c
@@ -1447,19 +1447,25 @@ DeviceFocusEvents(DeviceIntPtr dev, WindowPtr from, WindowPtr to, int mode)
if ((to == NullWindow) || (to == PointerRootWin)) {
if ((from == NullWindow) || (from == PointerRootWin)) {
- if (from == PointerRootWin)
+ if (from == PointerRootWin) {
+ DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyPointer,
+ sprite->win);
DeviceFocusOutEvents(dev, sprite->win,
GetCurrentRootWindow(dev), mode,
NotifyPointer);
+ }
/* Notify all the roots */
for (i = 0; i < nscreens; i++)
DeviceFocusEvent(dev, XI_FocusOut, mode, out,
screenInfo.screens[i]->root);
}
else {
- if (IsParent(from, sprite->win))
+ if (IsParent(from, sprite->win)) {
+ DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyPointer,
+ sprite->win);
DeviceFocusOutEvents(dev, sprite->win, from, mode,
NotifyPointer);
+ }
DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyNonlinear, from);
/* next call catches the root too, if the screen changed */
DeviceFocusOutEvents(dev, from, NullWindow, mode,
@@ -1477,10 +1483,13 @@ DeviceFocusEvents(DeviceIntPtr dev, WindowPtr from, WindowPtr to, int mode)
}
else {
if ((from == NullWindow) || (from == PointerRootWin)) {
- if (from == PointerRootWin)
+ if (from == PointerRootWin) {
+ DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyPointer,
+ sprite->win);
DeviceFocusOutEvents(dev, sprite->win,
GetCurrentRootWindow(dev), mode,
NotifyPointer);
+ }
for (i = 0; i < nscreens; i++)
DeviceFocusEvent(dev, XI_FocusOut, mode, out,
screenInfo.screens[i]->root);
@@ -1507,9 +1516,12 @@ DeviceFocusEvents(DeviceIntPtr dev, WindowPtr from, WindowPtr to, int mode)
if ((IsParent(from, sprite->win)) &&
(sprite->win != from) &&
(!IsParent(to, sprite->win)) &&
- (!IsParent(sprite->win, to)))
+ (!IsParent(sprite->win, to))) {
+ DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyPointer,
+ sprite->win);
DeviceFocusOutEvents(dev, sprite->win, from, mode,
NotifyPointer);
+ }
DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyInferior, from);
DeviceFocusInEvents(dev, from, to, mode, NotifyVirtual);
DeviceFocusEvent(dev, XI_FocusIn, mode, NotifyAncestor, to);
More information about the xorg-commit
mailing list