From: "Anna (navi) Figueiredo Gomes" <navi@vlhl.dev> --- dlls/dinput/tests/device8.c | 22 ++++++++++++++++++++++ dlls/user32/misc.c | 17 ----------------- dlls/user32/tests/input.c | 2 -- dlls/user32/user32.spec | 2 +- dlls/win32u/input.c | 15 ++++++++++++--- 5 files changed, 35 insertions(+), 23 deletions(-) diff --git a/dlls/dinput/tests/device8.c b/dlls/dinput/tests/device8.c index 37ed9428561..c2fefe37abe 100644 --- a/dlls/dinput/tests/device8.c +++ b/dlls/dinput/tests/device8.c @@ -1937,6 +1937,7 @@ static void test_hid_touch_screen(void) RAWINPUTDEVICE rawdevice = {.usUsagePage = HID_USAGE_PAGE_DIGITIZER, .usUsage = HID_USAGE_DIGITIZER_TOUCH_SCREEN}; UINT rawbuffer_count, rawbuffer_size, expect_flags, id, width, height; WCHAR device_path[MAX_PATH]; + POINTER_INPUT_TYPE type; char rawbuffer[1024]; RAWINPUT *rawinput; HANDLE file; @@ -2022,6 +2023,9 @@ static void test_hid_touch_screen(void) todo_wine /* missing POINTER_MESSAGE_FLAG_FIRSTBUTTON */ ok( HIWORD( pointer_wparam[0] ) == expect_flags, "got wparam %#Ix\n", pointer_wparam[0] ); ok( LOWORD( pointer_wparam[0] ) > 0, "got wparam %#Ix\n", pointer_wparam[0] ); + ret = GetPointerType( LOWORD( pointer_wparam[0] ), &type ); + ok( ret, "GetPointerType failed, error %lu\n", GetLastError() ); + ok( type == PT_TOUCH, "got pointer type %#lx\n", type ); ok( LOWORD( pointer_lparam[0] ) * 128 / width == 0x08, "got lparam %#Ix\n", pointer_lparam[0] ); ok( HIWORD( pointer_lparam[0] ) * 128 / height == 0x10, "got lparam %#Ix\n", pointer_lparam[0] ); id = LOWORD( pointer_wparam[0] ); @@ -2165,6 +2169,9 @@ static void test_hid_touch_screen(void) todo_wine /* missing POINTER_MESSAGE_FLAG_FIRSTBUTTON */ ok( HIWORD( pointer_wparam[0] ) == expect_flags, "got wparam %#Ix\n", pointer_wparam[0] ); ok( LOWORD( pointer_wparam[0] ) > 0, "got wparam %#Ix\n", pointer_wparam[0] ); + ret = GetPointerType( LOWORD( pointer_wparam[0] ), &type ); + ok( ret, "GetPointerType failed, error %lu\n", GetLastError() ); + ok( type == PT_TOUCH, "got pointer type %#lx\n", type ); ok( LOWORD( pointer_lparam[0] ) * 128 / width == 0x08, "got lparam %#Ix\n", pointer_lparam[0] ); ok( HIWORD( pointer_lparam[0] ) * 128 / height == 0x10, "got lparam %#Ix\n", pointer_lparam[0] ); ok( pointer_wparam[1] == 0, "got wparam %#Ix\n", pointer_wparam[1] ); @@ -2189,6 +2196,9 @@ static void test_hid_touch_screen(void) broken(HIWORD( pointer_wparam[0] ) == (expect_flags & ~POINTER_MESSAGE_FLAG_CONFIDENCE)), /* Win8 32bit */ "got wparam %#Ix\n", pointer_wparam[0] ); ok( LOWORD( pointer_wparam[0] ) == id, "got wparam %#Ix\n", pointer_wparam[0] ); + ret = GetPointerType( LOWORD( pointer_wparam[0] ), &type ); + ok( ret, "GetPointerType failed, error %lu\n", GetLastError() ); + ok( type == PT_TOUCH, "got pointer type %#lx\n", type ); ok( LOWORD( pointer_lparam[0] ) * 128 / width == 0x08, "got lparam %#Ix\n", pointer_lparam[0] ); ok( HIWORD( pointer_lparam[0] ) * 128 / height == 0x10, "got lparam %#Ix\n", pointer_lparam[0] ); ok( pointer_wparam[1] == 0, "got wparam %#Ix\n", pointer_wparam[1] ); @@ -2215,6 +2225,9 @@ static void test_hid_touch_screen(void) todo_wine /* missing POINTER_MESSAGE_FLAG_FIRSTBUTTON */ ok( HIWORD( pointer_wparam[0] ) == expect_flags, "got wparam %#Ix\n", pointer_wparam[0] ); ok( LOWORD( pointer_wparam[0] ) > 0, "got wparam %#Ix\n", pointer_wparam[0] ); + ret = GetPointerType( LOWORD( pointer_wparam[0] ), &type ); + ok( ret, "GetPointerType failed, error %lu\n", GetLastError() ); + ok( type == PT_TOUCH, "got pointer type %#lx\n", type ); ok( LOWORD( pointer_lparam[0] ) * 128 / width == 0x08, "got lparam %#Ix\n", pointer_lparam[0] ); ok( HIWORD( pointer_lparam[0] ) * 128 / height == 0x10, "got lparam %#Ix\n", pointer_lparam[0] ); id = LOWORD( pointer_wparam[0] ); @@ -2226,6 +2239,9 @@ static void test_hid_touch_screen(void) broken(HIWORD( pointer_wparam[1] ) == (expect_flags & ~POINTER_MESSAGE_FLAG_CONFIDENCE)), /* Win8 32bit */ "got wparam %#Ix\n", pointer_wparam[1] ); ok( LOWORD( pointer_wparam[1] ) == id + 1, "got wparam %#Ix\n", pointer_wparam[1] ); + ret = GetPointerType( LOWORD( pointer_wparam[1] ), &type ); + ok( ret, "GetPointerType failed, error %lu\n", GetLastError() ); + ok( type == PT_TOUCH, "got pointer type %#lx\n", type ); ok( LOWORD( pointer_lparam[1] ) * 128 / width == 0x18, "got lparam %#Ix\n", pointer_lparam[1] ); ok( HIWORD( pointer_lparam[1] ) * 128 / height == 0x20, "got lparam %#Ix\n", pointer_lparam[1] ); @@ -2249,6 +2265,9 @@ static void test_hid_touch_screen(void) broken(HIWORD( pointer_wparam[0] ) == (expect_flags & ~POINTER_MESSAGE_FLAG_CONFIDENCE)), /* Win8 32bit */ "got wparam %#Ix\n", pointer_wparam[0] ); ok( LOWORD( pointer_wparam[0] ) == id, "got wparam %#Ix\n", pointer_wparam[0] ); + ret = GetPointerType( LOWORD( pointer_wparam[0] ), &type ); + ok( ret, "GetPointerType failed, error %lu\n", GetLastError() ); + ok( type == PT_TOUCH, "got pointer type %#lx\n", type ); ok( LOWORD( pointer_lparam[0] ) * 128 / width == 0x08, "got lparam %#Ix\n", pointer_lparam[0] ); ok( HIWORD( pointer_lparam[0] ) * 128 / height == 0x10, "got lparam %#Ix\n", pointer_lparam[0] ); @@ -2257,6 +2276,9 @@ static void test_hid_touch_screen(void) broken(HIWORD( pointer_wparam[1] ) == (expect_flags & ~POINTER_MESSAGE_FLAG_CONFIDENCE)), /* Win8 32bit */ "got wparam %#Ix\n", pointer_wparam[1] ); ok( LOWORD( pointer_wparam[1] ) == id + 1, "got wparam %#Ix\n", pointer_wparam[1] ); + ret = GetPointerType( LOWORD( pointer_wparam[1] ), &type ); + ok( ret, "GetPointerType failed, error %lu\n", GetLastError() ); + ok( type == PT_TOUCH, "got pointer type %#lx\n", type ); ok( LOWORD( pointer_lparam[1] ) * 128 / width == 0x18, "got lparam %#Ix\n", pointer_lparam[1] ); ok( HIWORD( pointer_lparam[1] ) * 128 / height == 0x20, "got lparam %#Ix\n", pointer_lparam[1] ); diff --git a/dlls/user32/misc.c b/dlls/user32/misc.c index 6333fcb48b4..622325f7ad0 100644 --- a/dlls/user32/misc.c +++ b/dlls/user32/misc.c @@ -507,23 +507,6 @@ LRESULT WINAPI PackTouchHitTestingProximityEvaluation(const TOUCH_HIT_TESTING_IN return 0; } -/********************************************************************** - * GetPointerType [USER32.@] - */ -BOOL WINAPI GetPointerType(UINT32 id, POINTER_INPUT_TYPE *type) -{ - FIXME("(%d %p): stub\n", id, type); - - if(!id || !type) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - - *type = PT_MOUSE; - return TRUE; -} - BOOL WINAPI GetPointerInfo(UINT32 id, POINTER_INFO *info) { FIXME("(%d %p): stub\n", id, info); diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c index 6ad01e82978..f3afb09c21b 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c @@ -5627,9 +5627,7 @@ static void test_GetPointerInfo( BOOL mouse_in_pointer_enabled ) ok( GetLastError() == ERROR_INVALID_PARAMETER, "got error %lu\n", GetLastError() ); SetLastError( 0xdeadbeef ); ret = pGetPointerType( 0xdead, &type ); - todo_wine ok( !ret, "GetPointerType succeeded\n" ); - todo_wine ok( GetLastError() == ERROR_INVALID_PARAMETER, "got error %lu\n", GetLastError() ); ret = pGetPointerType( 1, &type ); ok( ret, "GetPointerType failed, error %lu\n", GetLastError() ); diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec index 93ced8d8f3d..afe4a06b2f8 100644 --- a/dlls/user32/user32.spec +++ b/dlls/user32/user32.spec @@ -646,7 +646,7 @@ # @ stub GetPointerPenInfoHistory @ stdcall GetPointerTouchInfo(long ptr) @ stdcall GetPointerTouchInfoHistory(long ptr ptr) -@ stdcall GetPointerType(long ptr) +@ stdcall GetPointerType(long ptr) NtUserGetPointerType @ stdcall GetPriorityClipboardFormat(ptr long) NtUserGetPriorityClipboardFormat @ stdcall GetProcessDefaultLayout(ptr) @ stdcall GetProcessDpiAwarenessInternal(long ptr) diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index 33746498584..259333ef0f3 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -3020,9 +3020,18 @@ BOOL WINAPI NtUserInitializeTouchInjection( UINT max_count, UINT mode ) */ BOOL WINAPI NtUserGetPointerType( UINT32 id, POINTER_INPUT_TYPE *type ) { - FIXME( "id %u, type %p stub!\n", id, type ); - RtlSetLastWin32Error( ERROR_CALL_NOT_IMPLEMENTED ); - return FALSE; + struct pointer *pointer; + + TRACE( "%u, %p\n", id, type ); + + if (!id || !type || !(pointer = find_pointerid( id )) ) + { + RtlSetLastWin32Error( ERROR_INVALID_PARAMETER ); + return FALSE; + } + + *type = pointer->type; + return TRUE; } /********************************************************************** -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11171