From: John Chadwick john@jchw.io
WTPACKET's structure is never directly exposed via the API; it's internal to Wine. The HCTX value is only used on the wintab32 side, not the driver side, and it is used as an integer rather than a pointer, so this should be safe to do.
This eliminates the need to have a wow64 thunk for tablet_get_packet. --- dlls/winex11.drv/wintab.c | 2 +- dlls/wintab32/context.c | 9 ++++++--- dlls/wintab32/wintab_internal.h | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/dlls/winex11.drv/wintab.c b/dlls/winex11.drv/wintab.c index 6f1437f14c6..eff872fa873 100644 --- a/dlls/winex11.drv/wintab.c +++ b/dlls/winex11.drv/wintab.c @@ -236,7 +236,7 @@ typedef struct tagWTI_DEVICES_INFO #define CSR_TYPE_OTHER 0x000
typedef struct tagWTPACKET { - HCTX pkContext; + UINT pkContext; UINT pkStatus; LONG pkTime; WTPKT pkChanged; diff --git a/dlls/wintab32/context.c b/dlls/wintab32/context.c index b432e902a09..488e2b7d075 100644 --- a/dlls/wintab32/context.c +++ b/dlls/wintab32/context.c @@ -102,7 +102,7 @@ static const char* DUMPBITS(int x)
static inline void DUMPPACKET(WTPACKET packet) { - TRACE("pkContext: %p pkStatus: 0x%x pkTime : 0x%lx pkChanged: 0x%lx pkSerialNumber: 0x%x pkCursor : %i pkButtons: %lx pkX: %li pkY: %li pkZ: %li pkNormalPressure: %i pkTangentPressure: %i pkOrientation: (%i,%i,%i) pkRotation: (%i,%i,%i)\n", + TRACE("pkContext: 0x%x pkStatus: 0x%x pkTime : 0x%lx pkChanged: 0x%lx pkSerialNumber: 0x%x pkCursor : %i pkButtons: %lx pkX: %li pkY: %li pkZ: %li pkNormalPressure: %i pkTangentPressure: %i pkOrientation: (%i,%i,%i) pkRotation: (%i,%i,%i)\n", packet.pkContext, packet.pkStatus, packet.pkTime, packet.pkChanged, packet.pkSerialNumber, packet.pkCursor, packet.pkButtons, packet.pkX, packet.pkY, packet.pkZ, packet.pkNormalPressure, packet.pkTangentPressure, @@ -205,7 +205,7 @@ LPOPENCONTEXT AddPacketToContextQueue(LPWTPACKET packet, HWND hwnd)
tgt = ptr->PacketsQueued;
- packet->pkContext = ptr->handle; + packet->pkContext = (UINT)(DWORD_PTR)ptr->handle;
/* translate packet data to the context */ packet->pkChanged = packet->pkChanged & ptr->context.lcPktData; @@ -296,12 +296,15 @@ static LPVOID TABLET_CopyPacketData(LPOPENCONTEXT context, LPVOID lpPkt, LPWTPACKET wtp) { LPBYTE ptr; + HCTX ctx;
ptr = lpPkt; TRACE("Packet Bits %s\n",DUMPBITS(context->context.lcPktData));
+ ctx = (HCTX)(DWORD_PTR)wtp->pkContext; + if (context->context.lcPktData & PK_CONTEXT) - ptr+=CopyTabletData(ptr,&wtp->pkContext,sizeof(HCTX)); + ptr+=CopyTabletData(ptr,&ctx,sizeof(HCTX)); if (context->context.lcPktData & PK_STATUS) ptr+=CopyTabletData(ptr,&wtp->pkStatus,sizeof(UINT)); if (context->context.lcPktData & PK_TIME) diff --git a/dlls/wintab32/wintab_internal.h b/dlls/wintab32/wintab_internal.h index b0a2e8fd58f..f1529a59bb1 100644 --- a/dlls/wintab32/wintab_internal.h +++ b/dlls/wintab32/wintab_internal.h @@ -117,7 +117,7 @@ typedef struct tagWTI_EXTENSIONS_INFO } WTI_EXTENSIONS_INFO, *LPWTI_EXTENSIONS_INFO;
typedef struct tagWTPACKET { - HCTX pkContext; + UINT pkContext; UINT pkStatus; LONG pkTime; WTPKT pkChanged;