[xorg-x11-server/f16] Fix fdo bug 44079, XI2 focus events missing on immediate parent of the

Peter Hutterer whot at fedoraproject.org
Thu Mar 8 23:23:52 UTC 2012


commit 2bb166e8c0b63310df79af60cc7df5b9159c5bee
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Mar 9 09:26:03 2012 +1000

    Fix fdo bug 44079, XI2 focus events missing on immediate parent of the
    
      focus window

 ...terRootWin-send-a-FocusIn-to-the-sprite-w.patch |   32 ++++++++++++
 ...ocus-events-to-the-immediate-parent-44079.patch |   52 ++++++++++++++++++++
 xorg-x11-server.spec                               |   10 +++-
 3 files changed, 93 insertions(+), 1 deletions(-)
---
diff --git a/0001-dix-on-PointerRootWin-send-a-FocusIn-to-the-sprite-w.patch b/0001-dix-on-PointerRootWin-send-a-FocusIn-to-the-sprite-w.patch
new file mode 100644
index 0000000..d5f196f
--- /dev/null
+++ b/0001-dix-on-PointerRootWin-send-a-FocusIn-to-the-sprite-w.patch
@@ -0,0 +1,32 @@
+From 3ce102c362cadcd7087bdcf48440d9498eaf77d0 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer at who-t.net>
+Date: Thu, 5 Jan 2012 07:08:01 -0500
+Subject: [PATCH] dix: on PointerRootWin send a FocusIn to the sprite window
+ too
+
+XTS XSetDeviceFocus-7
+
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+Reviewed-by: Chase Douglas <chase.douglas at canonical.com>
+---
+ dix/enterleave.c |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/dix/enterleave.c b/dix/enterleave.c
+index 2b8c7c5..89a82ab 100644
+--- a/dix/enterleave.c
++++ b/dix/enterleave.c
+@@ -1299,7 +1299,10 @@ DeviceFocusEvents(DeviceIntPtr dev,
+         for (i = 0; i < nscreens; i++)
+             DeviceFocusEvent(dev, XI_FocusIn, mode, in, screenInfo.screens[i]->root);
+         if (to == PointerRootWin)
++        {
+             DeviceFocusInEvents(dev, GetCurrentRootWindow(dev), sprite->win, mode, NotifyPointer);
++            DeviceFocusEvent(dev, XI_FocusIn, mode, NotifyPointer, sprite->win);
++        }
+     }
+     else
+     {
+-- 
+1.7.7.6
+
diff --git a/0001-dix-send-focus-events-to-the-immediate-parent-44079.patch b/0001-dix-send-focus-events-to-the-immediate-parent-44079.patch
new file mode 100644
index 0000000..c6d580c
--- /dev/null
+++ b/0001-dix-send-focus-events-to-the-immediate-parent-44079.patch
@@ -0,0 +1,52 @@
+From a125aabda3a5cf27aa98cb61f16e49280b66f451 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer at who-t.net>
+Date: Thu, 5 Jan 2012 07:02:51 -0500
+Subject: [PATCH] dix: send focus events to the immediate parent (#44079)
+
+For a transition from windows A to B, A->parent did not receive an event.
+DeviceFocusOutEvents sends to windows ]from, to[, so start with the actual
+window, not it's parent.
+
+X.Org Bug 44079 <http://bugs.freedesktop.org/show_bug.cgi?id=44079>
+
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+Reviewed-by: Chase Douglas <chase.douglas at canonical.com>
+Reviewed-by: Keith Packard <keithp at keithp.com>
+---
+ dix/enterleave.c |    6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/dix/enterleave.c b/dix/enterleave.c
+index a39e640..2b8c7c5 100644
+--- a/dix/enterleave.c
++++ b/dix/enterleave.c
+@@ -1292,7 +1292,7 @@ DeviceFocusEvents(DeviceIntPtr dev,
+                         NotifyPointer);
+             DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyNonlinear, from);
+             /* next call catches the root too, if the screen changed */
+-            DeviceFocusOutEvents(dev, from->parent, NullWindow, mode,
++            DeviceFocusOutEvents(dev, from, NullWindow, mode,
+                     NotifyNonlinearVirtual);
+         }
+         /* Notify all the roots */
+@@ -1321,7 +1321,7 @@ DeviceFocusEvents(DeviceIntPtr dev,
+             if (IsParent(to, from))
+             {
+                 DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyAncestor, from);
+-                DeviceFocusOutEvents(dev, from->parent, to, mode,
++                DeviceFocusOutEvents(dev, from, to, mode,
+                         NotifyVirtual);
+                 DeviceFocusEvent(dev, XI_FocusIn, mode, NotifyInferior, to);
+                 if ((IsParent(to, sprite->win)) &&
+@@ -1353,7 +1353,7 @@ DeviceFocusEvents(DeviceIntPtr dev,
+                                 NotifyPointer);
+                     DeviceFocusEvent(dev, XI_FocusOut, mode, NotifyNonlinear, from);
+                     if (from->parent != NullWindow)
+-                        DeviceFocusOutEvents(dev, from->parent, common, mode,
++                        DeviceFocusOutEvents(dev, from, common, mode,
+                                 NotifyNonlinearVirtual);
+                     if (to->parent != NullWindow)
+                         DeviceFocusInEvents(dev, common, to, mode, NotifyNonlinearVirtual);
+-- 
+1.7.7.6
+
diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec
index f257fac..a217d4e 100644
--- a/xorg-x11-server.spec
+++ b/xorg-x11-server.spec
@@ -30,7 +30,7 @@
 Summary:   X.Org X11 X server
 Name:      xorg-x11-server
 Version:   1.11.4
-Release:   1%{?gitdate:.%{gitdate}}%{dist}
+Release:   2%{?gitdate:.%{gitdate}}%{dist}
 URL:       http://www.x.org
 License:   MIT
 Group:     User Interface/X
@@ -87,6 +87,10 @@ Patch7007: xserver-1.10.99.1-test.patch
 # Submitted to upstream but not merged for 1.11
 Patch7009: xserver-1.10.99-config-add-udev-systemd-multi-seat-support.patch
 
+# fdo Bug 44079 - XI2 FocusOut events missing parent of focus'd window
+Patch7010: 0001-dix-send-focus-events-to-the-immediate-parent-44079.patch
+Patch7011: 0001-dix-on-PointerRootWin-send-a-FocusIn-to-the-sprite-w.patch
+
 %define moduledir	%{_libdir}/xorg/modules
 %define drimoduledir	%{_libdir}/dri
 %define sdkdir		%{_includedir}/xorg
@@ -551,6 +555,10 @@ rm -rf $RPM_BUILD_ROOT
 %{xserver_source_dir}
 
 %changelog
+* Fri Mar 09 2012 Peter Hutterer <peter.hutterer at redhat.com> 1.11.4-2
+- Fix fdo bug 44079, XI2 focus events missing on immediate parent of the
+  focus window
+
 * Thu Feb 09 2012 Peter Hutterer <peter.hutterer at redhat.com> 1.11.4-1
 - xserver 1.11.4
 - xserver-1.11.2-record-crasher.patch: drop, 53e347b22bb7


More information about the scm-commits mailing list