From ca7f81569594174ffb7763ac128284f609806aa2 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mar 25 2009 06:49:08 +0000 Subject: * Wed Mar 25 2009 Peter Hutterer 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. --- diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index d51dfdd..442e976 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -19,7 +19,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.6.0 -Release: 14%{?dist} +Release: 15%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -101,6 +101,13 @@ Patch6021: xserver-1.6.0-selinux-raw.patch Patch6022: xserver-1.6.0-primary.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 drimoduledir %{_libdir}/dri %define sdkdir %{_includedir}/xorg @@ -521,6 +528,14 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Wed Mar 25 2009 Peter Hutterer 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 1.6.0-14 - s390 fixes (Karsten Hopp) diff --git a/xserver-1.6.0-xinerama-crashes.patch b/xserver-1.6.0-xinerama-crashes.patch new file mode 100644 index 0000000..bb9adca --- /dev/null +++ b/xserver-1.6.0-xinerama-crashes.patch @@ -0,0 +1,46 @@ +From 24e682d0fcc98d7c3f63fa484cc28285df48b499 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +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 + +Signed-off-by: Peter Hutterer +--- + 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 + diff --git a/xserver-1.6.0-xinerama-cursors.patch b/xserver-1.6.0-xinerama-cursors.patch new file mode 100644 index 0000000..2e093ab --- /dev/null +++ b/xserver-1.6.0-xinerama-cursors.patch @@ -0,0 +1,37 @@ +From 3323f7ac880d5a8261d5b22059374fc9de8ca683 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +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 +Signed-off-by: Peter Hutterer +--- + 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 + diff --git a/xserver-1.6.0-xtest-pointerscreen.patch b/xserver-1.6.0-xtest-pointerscreen.patch new file mode 100644 index 0000000..286edd1 --- /dev/null +++ b/xserver-1.6.0-xtest-pointerscreen.patch @@ -0,0 +1,73 @@ +From c3e5af42be915b27056644c2df6a4ce30b4ab5f3 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +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 + +Signed-off-by: Peter Hutterer +--- + 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 +