From 198a41aea747f87b3d6514e3c81d0bcf1b89e408 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 9 Jul 2013 13:34:43 +1000 Subject: [PATCH] Fix crash in gnome-shell when tapping a menu twice (fdo #66720) --- ...ing-an-active-grab-accept-pointer-gr.patch | 46 +++++++++++++++++++ xorg-x11-server.spec | 8 +++- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 0001-dix-when-ungrabbing-an-active-grab-accept-pointer-gr.patch diff --git a/0001-dix-when-ungrabbing-an-active-grab-accept-pointer-gr.patch b/0001-dix-when-ungrabbing-an-active-grab-accept-pointer-gr.patch new file mode 100644 index 0000000..1f3e24c --- /dev/null +++ b/0001-dix-when-ungrabbing-an-active-grab-accept-pointer-gr.patch @@ -0,0 +1,46 @@ +From 43f732478606e952fe728a109adeb8edbb63fc13 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Tue, 9 Jul 2013 13:27:19 +1000 +Subject: [PATCH] dix: when ungrabbing an active grab, accept pointer grabs + (#66720) + +Ungrabbing a device during an active touch grab rejects the grab. Ungrabbing +a device during an active pointer grab accepts the grab. + +Rejection is not really an option for a pointer-emulated grab, if a client +has a button mask on the window it would get a ButtonPress emulated after +UngrabDevice. That is against the core grab behaviour. + +X.Org Bug 66720 + +Signed-off-by: Peter Hutterer +--- + dix/events.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/dix/events.c b/dix/events.c +index e5db348..de41d6f 100644 +--- a/dix/events.c ++++ b/dix/events.c +@@ -1522,13 +1522,16 @@ DeactivatePointerGrab(DeviceIntPtr mouse) + for (i = 0; !wasPassive && mouse->touch && i < mouse->touch->num_touches; i++) { + TouchPointInfoPtr ti = mouse->touch->touches + i; + if (ti->active && TouchResourceIsOwner(ti, grab_resource)) { ++ int mode = XIRejectTouch; + /* Rejecting will generate a TouchEnd, but we must not + emulate a ButtonRelease here. So pretend the listener + already has the end event */ + if (grab->grabtype == CORE || grab->grabtype == XI || +- !xi2mask_isset(mouse->deviceGrab.grab->xi2mask, mouse, XI_TouchBegin)) ++ !xi2mask_isset(mouse->deviceGrab.grab->xi2mask, mouse, XI_TouchBegin)) { ++ mode = XIAcceptTouch; + ti->listeners[0].state = LISTENER_HAS_END; +- TouchListenerAcceptReject(mouse, ti, 0, XIRejectTouch); ++ } ++ TouchListenerAcceptReject(mouse, ti, 0, mode); + } + } + +-- +1.8.2.1 + diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index eb232fc..1cc5fb1 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -42,7 +42,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.14.2 -Release: 1%{?gitdate:.%{gitdate}}%{dist} +Release: 2%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -138,6 +138,9 @@ Patch8032: 0033-dix-call-UpdateDeviceState-for-emulated-TouchEndEven.patch Patch8033: 0034-Abstract-cursor-refcounting.patch Patch8034: 0035-dix-remove-logspam-in-RefCursor.patch +# Bug 66720 - Server crash when ungrabbing a touch device on the second touch +# https://bugs.freedesktop.org/show_bug.cgi?id=66720 +Patch8035: 0001-dix-when-ungrabbing-an-active-grab-accept-pointer-gr.patch # upstream in -next for 1.15, e21e183059df5975e7086850d1931edb2c1bbd06 %if !0%{?rhel} @@ -616,6 +619,9 @@ rm -rf $RPM_BUILD_ROOT %{xserver_source_dir} %changelog +* Tue Jul 09 2013 Peter Hutterer 1.14.2-2 +- Fix crash in gnome-shell when tapping a menu twice (fdo #66720) + * Thu Jul 04 2013 Peter Hutterer 1.14.2-1 - xorg-server 1.4.2 - drop merged patches