From 674b3d1e35526de8ab073854aae5d457954d40e6 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 31 May 2018 11:52:09 +1000
Subject: [PATCH] winex11: Handle negative orAltitude values

---
 dlls/winex11.drv/wintab.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/dlls/winex11.drv/wintab.c b/dlls/winex11.drv/wintab.c
index ef42a1f07c..7b1bf38146 100644
--- a/dlls/winex11.drv/wintab.c
+++ b/dlls/winex11.drv/wintab.c
@@ -903,6 +903,11 @@ static BOOL motion_event( HWND hwnd, XEvent *event )
                                             (abs(motion->axis_data[3]),
                                              abs(motion->axis_data[4])))
                                            * (gMsgPacket.pkStatus & TPS_INVERT?-1:1));
+
+    if (gMsgPacket.pkOrientation.orAltitude < 0)
+    {
+        FIXME("Negative orAltitude detected\n");
+    }
     gMsgPacket.pkNormalPressure = motion->axis_data[2];
     gMsgPacket.pkButtons = get_button_state(curnum);
     gMsgPacket.pkChanged = get_changed_state(&gMsgPacket);
@@ -929,6 +934,7 @@ static BOOL button_event( HWND hwnd, XEvent *event )
     gMsgPacket.pkTime = EVENT_x11_time_to_win32_time(button->time);
     gMsgPacket.pkSerialNumber = gSerial++;
     gMsgPacket.pkCursor = curnum;
+
     if (button->axes_count > 0) {
         gMsgPacket.pkX = button->axis_data[0];
         gMsgPacket.pkY = button->axis_data[1];
@@ -943,6 +949,12 @@ static BOOL button_event( HWND hwnd, XEvent *event )
         gMsgPacket.pkOrientation = last_packet.pkOrientation;
         gMsgPacket.pkNormalPressure = last_packet.pkNormalPressure;
     }
+
+    if (gMsgPacket.pkOrientation.orAltitude < 0)
+    {
+        FIXME("Negative orAltitude detected\n");
+    }
+
     gMsgPacket.pkButtons = get_button_state(curnum);
     gMsgPacket.pkChanged = get_changed_state(&gMsgPacket);
     SendMessageW(hwndTabletDefault,WT_PACKET,gMsgPacket.pkSerialNumber,(LPARAM)hwnd);
@@ -985,6 +997,10 @@ static BOOL proximity_event( HWND hwnd, XEvent *event )
     gMsgPacket.pkOrientation.orAltitude = ((1000 - 15 * max(abs(proximity->axis_data[3]),
                                                             abs(proximity->axis_data[4])))
                                            * (gMsgPacket.pkStatus & TPS_INVERT?-1:1));
+    if (gMsgPacket.pkOrientation.orAltitude < 0)
+    {
+        FIXME("Negative orAltitude detected\n");
+    }
     gMsgPacket.pkNormalPressure = proximity->axis_data[2];
     gMsgPacket.pkButtons = get_button_state(curnum);
 
-- 
2.17.1

