Added patch to fix mouse jittering in Planetside 2.

This commit is contained in:
Sebastian Lackner 2015-01-26 11:59:58 +01:00
parent a5566f1e8e
commit 8d231bde1d
5 changed files with 87 additions and 1 deletions

View File

@ -38,10 +38,11 @@ Wine. All those differences are also documented on the
Included bug fixes and improvements
===================================
**Bugfixes and features included in the next upcoming release [2]:**
**Bugfixes and features included in the next upcoming release [3]:**
* Call DriverUnload function when unloading a device driver.
* Fix check for end_frame in RtlUnwindEx on x86_64. ([Wine Bug #34254](https://bugs.winehq.org/show_bug.cgi?id=34254))
* Fix mouse jittering in Planetside 2 ([Wine Bug #32913](https://bugs.winehq.org/show_bug.cgi?id=32913))
**Bugs fixed in Wine Staging 1.7.35 [146]:**

1
debian/changelog vendored
View File

@ -1,6 +1,7 @@
wine-staging (1.7.36) UNRELEASED; urgency=low
* Added patch to properly call DriverUnload when unloading device drivers.
* Added patch to fix check for end_frame in RtlUnwindEx on x86_64.
* Added patch to fix mouse jittering in Planetside 2.
-- Sebastian Lackner <sebastian@fds-team.de> Sun, 25 Jan 2015 05:58:36 +0100
wine-staging (1.7.35) unstable; urgency=low

View File

@ -188,6 +188,7 @@ patch_enable_all ()
enable_winepulse_PulseAudio_Support="$1"
enable_winex11_CandidateWindowPos="$1"
enable_winex11_Clipboard_HTML="$1"
enable_winex11_RawEventWarp="$1"
enable_winex11_Window_Groups="$1"
enable_winex11_Window_Style="$1"
enable_winex11_XEMBED="$1"
@ -583,6 +584,9 @@ patch_enable ()
winex11-Clipboard_HTML)
enable_winex11_Clipboard_HTML="$2"
;;
winex11-RawEventWarp)
enable_winex11_RawEventWarp="$2"
;;
winex11-Window_Groups)
enable_winex11_Window_Groups="$2"
;;
@ -3547,6 +3551,21 @@ if test "$enable_winex11_Clipboard_HTML" -eq 1; then
) >> "$patchlist"
fi
# Patchset winex11-RawEventWarp
# |
# | This patchset fixes the following Wine bugs:
# | * [#32913] Fix mouse jittering in Planetside 2
# |
# | Modified files:
# | * dlls/winex11.drv/mouse.c
# |
if test "$enable_winex11_RawEventWarp" -eq 1; then
patch_apply winex11-RawEventWarp/0001-winex11-Only-enable-XInput2-cursor-warp-workaround-i.patch
(
echo '+ { "Sebastian Lackner", "winex11: Only enable XInput2 cursor warp workaround if necessary.", 1 },';
) >> "$patchlist"
fi
# Patchset winex11-Window_Groups
# |
# | This patchset fixes the following Wine bugs:

View File

@ -0,0 +1,64 @@
From 88a383d2386e770e433b8c14d7a94b2511171695 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Mon, 26 Jan 2015 05:42:32 +0100
Subject: winex11: Only enable XInput2 cursor warp workaround if necessary.
Based on a patch by Patrick Rudolph.
---
dlls/winex11.drv/mouse.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index f1e58fe..5f5bdeb 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -131,6 +131,7 @@ static Cursor create_cursor( HANDLE handle );
#ifdef HAVE_X11_EXTENSIONS_XINPUT2_H
static BOOL xinput2_available;
+static BOOL broken_rawevents;
#define MAKE_FUNCPTR(f) static typeof(f) * p##f
MAKE_FUNCPTR(XIFreeDeviceInfo);
MAKE_FUNCPTR(XIQueryDevice);
@@ -1579,7 +1580,15 @@ void X11DRV_MotionNotify( HWND hwnd, XEvent *xev )
if (!hwnd)
{
struct x11drv_thread_data *thread_data = x11drv_thread_data();
- if (thread_data->warp_serial && (long)(event->serial - thread_data->warp_serial) < 0) return;
+ if (thread_data->warp_serial)
+ {
+ if ((long)(event->serial - thread_data->warp_serial) < 0)
+ {
+ TRACE( "pos %d,%d old serial %lu, ignoring\n", input.u.mi.dx, input.u.mi.dy, event->serial );
+ return;
+ }
+ thread_data->warp_serial = 0; /* we caught up now */
+ }
}
send_mouse_input( hwnd, event->window, event->state, &input );
@@ -1669,7 +1678,7 @@ static void X11DRV_RawMotion( XGenericEventCookie *xev )
break;
}
- if (thread_data->warp_serial)
+ if (broken_rawevents && thread_data->warp_serial)
{
if ((long)(xev->serial - thread_data->warp_serial) < 0)
{
@@ -1716,6 +1725,12 @@ void X11DRV_XInput2_Init(void)
#undef LOAD_FUNCPTR
xinput2_available = XQueryExtension( gdi_display, "XInputExtension", &xinput2_opcode, &event, &error );
+
+ /* Until version 1.10.4 rawinput was broken in XOrg, see
+ * https://bugs.freedesktop.org/show_bug.cgi?id=30068 */
+ broken_rawevents = strstr(XServerVendor( gdi_display ), "X.Org") &&
+ XVendorRelease( gdi_display ) < 11004000;
+
#else
TRACE( "X Input 2 support not compiled in.\n" );
#endif
--
2.2.1

View File

@ -0,0 +1 @@
Fixes: [32913] Fix mouse jittering in Planetside 2