From f2fca096c69fca71ed31b276abca17ee24ed475c Mon Sep 17 00:00:00 2001 From: John Klehm Date: Tue, 29 Apr 2008 09:59:10 -0500 Subject: wintab32: Add messaging support for wintab child windows --- dlls/winex11.drv/wintab.c | 8 ++++++++ dlls/wintab32/context.c | 20 ++++++++++++++++---- dlls/wintab32/wintab32.c | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/dlls/winex11.drv/wintab.c b/dlls/winex11.drv/wintab.c index 3ee032c..05381ac 100644 --- a/dlls/winex11.drv/wintab.c +++ b/dlls/winex11.drv/wintab.c @@ -813,6 +813,9 @@ static void motion_event( HWND hwnd, XEvent *event ) XDeviceMotionEvent *motion = (XDeviceMotionEvent *)event; LPWTI_CURSORS_INFO cursor; int curnum = cursor_from_device(motion->deviceid, &cursor); + + TRACE("hwnd=%p, Xevent=%p\n", hwnd, event); + if (curnum < 0) return; @@ -842,6 +845,9 @@ static void button_event( HWND hwnd, XEvent *event ) XDeviceButtonEvent *button = (XDeviceButtonEvent *) event; LPWTI_CURSORS_INFO cursor; int curnum = cursor_from_device(button->deviceid, &cursor); + + TRACE("hwnd=%p, Xevent=%p\n", hwnd, event); + if (curnum < 0) return; @@ -868,6 +874,8 @@ static void button_event( HWND hwnd, XEvent *event ) static void key_event( HWND hwnd, XEvent *event ) { + TRACE("hwnd=%p, Xevent=%p\n", hwnd, event); + if (event->type == key_press_type) FIXME("Received tablet key press event\n"); else diff --git a/dlls/wintab32/context.c b/dlls/wintab32/context.c index 9551d87..6aaa320 100644 --- a/dlls/wintab32/context.c +++ b/dlls/wintab32/context.c @@ -174,7 +174,8 @@ LPOPENCONTEXT AddPacketToContextQueue(LPWTPACKET packet, HWND hwnd) ptr = gOpenContexts; while (ptr) { - TRACE("Trying Queue %p (%p %p)\n", ptr->handle, hwnd, ptr->hwndOwner); + /* Too verbose for now + * TRACE("Trying Queue %p (%p %p)\n", ptr->handle, hwnd, ptr->hwndOwner); */ if (ptr->hwndOwner == hwnd) { @@ -231,7 +232,8 @@ LPOPENCONTEXT AddPacketToContextQueue(LPWTPACKET packet, HWND hwnd) ptr = ptr->next; } LeaveCriticalSection(&csTablet); - TRACE("Done (%p)\n",ptr); + /* Too verbose for now + * TRACE("Done (%p)\n",ptr); */ return ptr; } @@ -455,11 +457,21 @@ HCTX WINAPI WTOpenW(HWND hWnd, LPLOGCONTEXTW lpLogCtx, BOOL fEnable) pAttachEventQueueToTablet(hWnd); + if (fEnable) + { + newcontext->enabled = TRUE; + /* TODO: Add to top of overlap order */ + newcontext->context.lcStatus = CXS_ONTOP; + } + else + { + newcontext->enabled = FALSE; + newcontext->context.lcStatus = CXS_DISABLED; + } + TABLET_PostTabletMessage(newcontext, _WT_CTXOPEN(newcontext->context.lcMsgBase), (WPARAM)newcontext->handle, newcontext->context.lcStatus, TRUE); - newcontext->context.lcStatus = CXS_ONTOP; - TABLET_PostTabletMessage(newcontext, _WT_CTXOVERLAP(newcontext->context.lcMsgBase), (WPARAM)newcontext->handle, newcontext->context.lcStatus, TRUE); diff --git a/dlls/wintab32/wintab32.c b/dlls/wintab32/wintab32.c index 5f2afb1..6325eea 100644 --- a/dlls/wintab32/wintab32.c +++ b/dlls/wintab32/wintab32.c @@ -105,6 +105,38 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpReserved) return TRUE; } +static BOOL CALLBACK TabletDispatchPacket(HWND hWnd, LPARAM lParam) +{ + static LPOPENCONTEXT handler; + static WTPACKET packet; + pGetCurrentPacket(&packet); + handler = AddPacketToContextQueue(&packet, hWnd); + if (handler && (handler->context.lcOptions & CXO_MESSAGES)) + { + TABLET_PostTabletMessage(handler, _WT_PACKET(handler->context.lcMsgBase), + (WPARAM)packet.pkSerialNumber, + (LPARAM)handler->handle, FALSE); + return FALSE; + } + + return TRUE; +} + +static BOOL CALLBACK TabletDispatchProximity(HWND hWnd, LPARAM lParam) +{ + static WTPACKET packet; + static LPOPENCONTEXT handler; + pGetCurrentPacket(&packet); + handler = AddPacketToContextQueue(&packet, hWnd); + if (handler) + { + TABLET_PostTabletMessage(handler, WT_PROXIMITY, + (WPARAM)handler->handle, lParam, TRUE); + return FALSE; + } + + return TRUE; +} /* * The window proc for the default TABLET window @@ -124,12 +156,16 @@ static LRESULT WINAPI TABLET_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, { WTPACKET packet; LPOPENCONTEXT handler; + pGetCurrentPacket(&packet); handler = AddPacketToContextQueue(&packet,(HWND)lParam); if (handler && handler->context.lcOptions & CXO_MESSAGES) TABLET_PostTabletMessage(handler, _WT_PACKET(handler->context.lcMsgBase), (WPARAM)packet.pkSerialNumber, (LPARAM)handler->handle, FALSE); + else + while (EnumChildWindows((HWND)lParam, (WNDENUMPROC)TabletDispatchPacket, 0)); + break; } case WT_PROXIMITY: @@ -141,6 +177,9 @@ static LRESULT WINAPI TABLET_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, if (handler) TABLET_PostTabletMessage(handler, WT_PROXIMITY, (WPARAM)handler->handle, lParam, TRUE); + else + while (EnumChildWindows((HWND)wParam, (WNDENUMPROC)TabletDispatchProximity, lParam)); + break; } } -- 1.5.4.5