* Wed Mar 25 2009 Peter Hutterer <peter.hutterer@redhat.com> 1.6.0-15

- xserver-1.6.0-xtest-pointerscreen.patch: set POINTER_SCREEN flag for core
  XTestFakeInput events (#490984)
- xserver-1.6.0-xinerama-cursors.patch: don't display SW cursors when
  switching screens.
- xserver-1.6.0-xinerama-crashes.patch: don't crash on key repeats in xinerama
  setups.
This commit is contained in:
Peter Hutterer 2009-03-25 06:49:08 +00:00
parent 662973f97c
commit ca7f815695
4 changed files with 172 additions and 1 deletions

View File

@ -19,7 +19,7 @@
Summary: X.Org X11 X server Summary: X.Org X11 X server
Name: xorg-x11-server Name: xorg-x11-server
Version: 1.6.0 Version: 1.6.0
Release: 14%{?dist} Release: 15%{?dist}
URL: http://www.x.org URL: http://www.x.org
License: MIT License: MIT
Group: User Interface/X Group: User Interface/X
@ -101,6 +101,13 @@ Patch6021: xserver-1.6.0-selinux-raw.patch
Patch6022: xserver-1.6.0-primary.patch Patch6022: xserver-1.6.0-primary.patch
Patch6023: xserver-1.6.0-selinux-destroy.patch Patch6023: xserver-1.6.0-selinux-destroy.patch
Patch6024: xserver-1.6.0-xinerama-cursors.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=490984
Patch6025: xserver-1.6.0-xtest-pointerscreen.patch
# http://bugs.freedesktop.org/show_bug.cgi?id=20557
Patch6026: xserver-1.6.0-xinerama-crashes.patch
%define moduledir %{_libdir}/xorg/modules %define moduledir %{_libdir}/xorg/modules
%define drimoduledir %{_libdir}/dri %define drimoduledir %{_libdir}/dri
%define sdkdir %{_includedir}/xorg %define sdkdir %{_includedir}/xorg
@ -521,6 +528,14 @@ rm -rf $RPM_BUILD_ROOT
%changelog %changelog
* Wed Mar 25 2009 Peter Hutterer <peter.hutterer@redhat.com> 1.6.0-15
- xserver-1.6.0-xtest-pointerscreen.patch: set POINTER_SCREEN flag for core
XTestFakeInput events (#490984)
- xserver-1.6.0-xinerama-cursors.patch: don't display SW cursors when
switching screens.
- xserver-1.6.0-xinerama-crashes.patch: don't crash on key repeats in xinerama
setups.
* Wed Mar 18 2009 Adam Jackson <ajax@redhat.com> 1.6.0-14 * Wed Mar 18 2009 Adam Jackson <ajax@redhat.com> 1.6.0-14
- s390 fixes (Karsten Hopp) - s390 fixes (Karsten Hopp)

View File

@ -0,0 +1,46 @@
From 24e682d0fcc98d7c3f63fa484cc28285df48b499 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed, 25 Mar 2009 13:08:27 +1000
Subject: [PATCH] dix: ignore non-pointer events in XineramaCheckMotion (#20557)
Note that deviceKeyButtonPointer and keyButtonPointer have the same wire
layout, so we only need to check for event types.
X.Org Bug 20557 <http://bugs.freedesktop.org/show_bug.cgi?id=20557>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
dix/events.c | 17 +++++++++++++++++
1 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/dix/events.c b/dix/events.c
index 6743cae..63b0674 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -625,6 +625,23 @@ XineramaCheckMotion(xEvent *xE, DeviceIntPtr pDev)
if (xE && !syncEvents.playingEvents)
{
+ /* GetPointerEvents() guarantees that pointer events have the correct
+ rootX/Y set already. */
+ switch(xE->u.u.type)
+ {
+ case ButtonPress:
+ case ButtonRelease:
+ case MotionNotify:
+ break;
+ default:
+ if (xE->u.u.type == DeviceButtonPress ||
+ xE->u.u.type == DeviceButtonRelease ||
+ xE->u.u.type == DeviceMotionNotify)
+ break;
+ /* all other events return FALSE */
+ return FALSE;
+ }
+
/* Motion events entering DIX get translated to Screen 0
coordinates. Replayed events have already been
translated since they've entered DIX before */
--
1.6.0.6

View File

@ -0,0 +1,37 @@
From 3323f7ac880d5a8261d5b22059374fc9de8ca683 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed, 25 Mar 2009 12:55:42 +1000
Subject: [PATCH] xfree86: fix SWCursor check in xf86CursorSetCursor.
Wrong check for inputInfo.pointer resulted in a SW cursor being rendered when
the pointer left the screen (in a Xinerama setup).
We must call the sprite rendering function if
- SW cursors are enabled, or
- The current device is not the VCP and not attached to the VCP.
Reported-by: Gordon Yuan <GordonYuan@viatech.com.cn>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
hw/xfree86/ramdac/xf86Cursor.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/hw/xfree86/ramdac/xf86Cursor.c b/hw/xfree86/ramdac/xf86Cursor.c
index 2b73b16..896ed37 100644
--- a/hw/xfree86/ramdac/xf86Cursor.c
+++ b/hw/xfree86/ramdac/xf86Cursor.c
@@ -302,9 +302,9 @@ xf86CursorSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs,
if (pCurs == NullCursor) { /* means we're supposed to remove the cursor */
- if (ScreenPriv->SWCursor || pDev != inputInfo.pointer)
- (*ScreenPriv->spriteFuncs->SetCursor)(pDev, pScreen, NullCursor,
- x, y);
+ if (ScreenPriv->SWCursor ||
+ !(pDev == inputInfo.pointer || !pDev->isMaster && pDev->u.master == inputInfo.pointer))
+ (*ScreenPriv->spriteFuncs->SetCursor)(pDev, pScreen, NullCursor, x, y);
else if (ScreenPriv->isUp) {
xf86SetCursor(pScreen, NullCursor, x, y);
ScreenPriv->isUp = FALSE;
--
1.6.0.6

View File

@ -0,0 +1,73 @@
From c3e5af42be915b27056644c2df6a4ce30b4ab5f3 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed, 25 Mar 2009 15:51:43 +1000
Subject: [PATCH] Xext: set POINTER_SCREEN flag in XTestFakeInput if necessary. (RH #490984)
The POINTER_SCREEN flag must be set explicitly for XTest core events to avoid
out-of-range events when the lastSlave was an SD with an explicit axis range.
Device events sent through XTest don't need this flag, they are expected to be
in the valuator range of the device anyway.
Red Hat Bug 490984 <https://bugzilla.redhat.com/show_bug.cgi?id=490984>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
Xext/xtest.c | 14 +++++++++++---
1 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/Xext/xtest.c b/Xext/xtest.c
index a7f3830..3ff02ed 100644
--- a/Xext/xtest.c
+++ b/Xext/xtest.c
@@ -161,6 +161,7 @@ ProcXTestFakeInput(client)
int nevents;
int i;
int base = 0;
+ int flags = 0;
nev = (stuff->length << 2) - sizeof(xReq);
if ((nev % sizeof(xEvent)) || !nev)
@@ -211,8 +212,14 @@ ProcXTestFakeInput(client)
client->errorValue = ev->u.u.type;
return BadValue;
}
+
+ if (ev->u.u.detail == xFalse)
+ flags |= POINTER_ABSOLUTE;
} else
+ {
firstValuator = 0;
+ flags |= POINTER_ABSOLUTE;
+ }
if (nev == 1 && type == XI_DeviceMotionNotify && !dev->valuator)
{
@@ -281,6 +288,8 @@ ProcXTestFakeInput(client)
valuators[1] = ev->u.keyButtonPointer.rootY;
numValuators = 2;
firstValuator = 0;
+ if (ev->u.u.detail == xFalse)
+ flags = POINTER_ABSOLUTE | POINTER_SCREEN;
break;
default:
client->errorValue = ev->u.u.type;
@@ -378,14 +387,13 @@ ProcXTestFakeInput(client)
GetEventList(&events);
switch(type) {
case MotionNotify:
- nevents = GetPointerEvents(events, dev, type, 0,
- (ev->u.u.detail == xFalse) ? POINTER_ABSOLUTE : 0,
+ nevents = GetPointerEvents(events, dev, type, 0, flags,
firstValuator, numValuators, valuators);
break;
case ButtonPress:
case ButtonRelease:
nevents = GetPointerEvents(events, dev, type, ev->u.u.detail,
- POINTER_ABSOLUTE, firstValuator,
+ flags, firstValuator,
numValuators, valuators);
break;
case KeyPress:
--
1.6.0.6