From ac8e0ce2554b17aea03043b974ab3bad11ae549f Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Wed, 16 Mar 2022 15:35:55 +0100 Subject: [PATCH] win32u: Move NtUserSetTimer implementation from user32. Signed-off-by: Jacek Caban Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/user32/message.c | 35 +---------------------------------- dlls/user32/user32.spec | 2 +- dlls/win32u/message.c | 32 ++++++++++++++++++++++++++++++++ dlls/win32u/syscall.c | 1 + dlls/win32u/win32u.spec | 2 +- dlls/wow64win/syscall.h | 1 + dlls/wow64win/user.c | 11 +++++++++++ include/ntuser.h | 1 + 8 files changed, 49 insertions(+), 36 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c index c5bdc0efccc..da0abef9469 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -4408,45 +4408,12 @@ BOOL WINAPI MessageBeep( UINT i ) } -/*********************************************************************** - * SetCoalescableTimer (USER32.@) - */ -UINT_PTR WINAPI SetCoalescableTimer( HWND hwnd, UINT_PTR id, UINT timeout, TIMERPROC proc, ULONG tolerance ) -{ - UINT_PTR ret; - WNDPROC winproc = 0; - - if (proc) winproc = WINPROC_AllocProc( (WNDPROC)proc, FALSE ); - - timeout = min( max( USER_TIMER_MINIMUM, timeout ), USER_TIMER_MAXIMUM ); - - SERVER_START_REQ( set_win_timer ) - { - req->win = wine_server_user_handle( hwnd ); - req->msg = WM_TIMER; - req->id = id; - req->rate = timeout; - req->lparam = (ULONG_PTR)winproc; - if (!wine_server_call_err( req )) - { - ret = reply->id; - if (!ret) ret = TRUE; - } - else ret = 0; - } - SERVER_END_REQ; - - TRACE("Added %p %lx %p timeout %d\n", hwnd, id, winproc, timeout ); - return ret; -} - - /****************************************************************** * SetTimer (USER32.@) */ UINT_PTR WINAPI SetTimer( HWND hwnd, UINT_PTR id, UINT timeout, TIMERPROC proc ) { - return SetCoalescableTimer( hwnd, id, timeout, proc, TIMERV_DEFAULT_COALESCING ); + return NtUserSetTimer( hwnd, id, timeout, proc, TIMERV_DEFAULT_COALESCING ); } diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec index a70ac8605d7..7f27a0731a2 100644 --- a/dlls/user32/user32.spec +++ b/dlls/user32/user32.spec @@ -655,7 +655,7 @@ @ stdcall SetClassWord(long long long) NtUserSetClassWord @ stdcall SetClipboardData(long long) @ stdcall SetClipboardViewer(long) -@ stdcall SetCoalescableTimer(long long long ptr long) +@ stdcall SetCoalescableTimer(long long long ptr long) NtUserSetTimer # @ stub SetConsoleReserveKeys @ stdcall -import SetCursor(long) NtUserSetCursor @ stub SetCursorContents diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index c28114668b8..e895f65c652 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -128,6 +128,38 @@ BOOL WINAPI NtUserGetGUIThreadInfo( DWORD id, GUITHREADINFO *info ) return ret; } +/*********************************************************************** + * NtUserSetTimer (win32u.@) + */ +UINT_PTR WINAPI NtUserSetTimer( HWND hwnd, UINT_PTR id, UINT timeout, TIMERPROC proc, ULONG tolerance ) +{ + UINT_PTR ret; + WNDPROC winproc = 0; + + if (proc) winproc = alloc_winproc( (WNDPROC)proc, TRUE ); + + timeout = min( max( USER_TIMER_MINIMUM, timeout ), USER_TIMER_MAXIMUM ); + + SERVER_START_REQ( set_win_timer ) + { + req->win = wine_server_user_handle( hwnd ); + req->msg = WM_TIMER; + req->id = id; + req->rate = timeout; + req->lparam = (ULONG_PTR)winproc; + if (!wine_server_call_err( req )) + { + ret = reply->id; + if (!ret) ret = TRUE; + } + else ret = 0; + } + SERVER_END_REQ; + + TRACE( "Added %p %lx %p timeout %d\n", hwnd, id, winproc, timeout ); + return ret; +} + /* see SendMessageW */ LRESULT send_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) { diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index abe32b8d70c..b167ecc9680 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -154,6 +154,7 @@ static void * const syscalls[] = NtUserSetProcessWindowStation, NtUserSetProp, NtUserSetThreadDesktop, + NtUserSetTimer, NtUserSetWinEventHook, NtUserSetWindowsHookEx, NtUserUnhookWinEvent, diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 2b5e4d71461..7d4599f0241 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -1236,7 +1236,7 @@ @ stub NtUserSetThreadInputBlocked @ stub NtUserSetThreadLayoutHandles @ stub NtUserSetThreadState -@ stub NtUserSetTimer +@ stdcall -syscall NtUserSetTimer(long long long ptr long) @ stdcall -syscall NtUserSetWinEventHook(long long long ptr ptr long long long) @ stub NtUserSetWindowArrangement @ stub NtUserSetWindowBand diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index b6cdf5edfb2..3ded58962b8 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -139,6 +139,7 @@ SYSCALL_ENTRY( NtUserSetProcessWindowStation ) \ SYSCALL_ENTRY( NtUserSetProp ) \ SYSCALL_ENTRY( NtUserSetThreadDesktop ) \ + SYSCALL_ENTRY( NtUserSetTimer ) \ SYSCALL_ENTRY( NtUserSetWinEventHook ) \ SYSCALL_ENTRY( NtUserSetWindowsHookEx ) \ SYSCALL_ENTRY( NtUserUnhookWinEvent ) \ diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index b8c4a86a352..c9f81d86672 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -533,6 +533,17 @@ NTSTATUS WINAPI wow64_NtUserGetGUIThreadInfo( UINT *args ) return TRUE; } +NTSTATUS WINAPI wow64_NtUserSetTimer( UINT *args ) +{ + HWND hwnd = get_handle( &args ); + UINT_PTR id = get_ulong( &args ); + UINT timeout = get_ulong( &args ); + TIMERPROC proc = get_ptr( &args ); + ULONG tolerance = get_ulong( &args ); + + return NtUserSetTimer( hwnd, id, timeout, proc, tolerance ); +} + NTSTATUS WINAPI wow64_NtUserCopyAcceleratorTable( UINT *args ) { HACCEL src = get_handle( &args ); diff --git a/include/ntuser.h b/include/ntuser.h index 4ca4c063ef8..a055aa47905 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -403,6 +403,7 @@ BOOL WINAPI NtUserSetProcessWindowStation( HWINSTA handle ); BOOL WINAPI NtUserSetProp( HWND hwnd, const WCHAR *str, HANDLE handle ); BOOL WINAPI NtUserSetSysColors( INT count, const INT *colors, const COLORREF *values ); BOOL WINAPI NtUserSetThreadDesktop( HDESK handle ); +UINT_PTR WINAPI NtUserSetTimer( HWND hwnd, UINT_PTR id, UINT timeout, TIMERPROC proc, ULONG tolerance ); LONG WINAPI NtUserSetWindowLong( HWND hwnd, INT offset, LONG newval, BOOL ansi ); LONG_PTR WINAPI NtUserSetWindowLongPtr( HWND hwnd, INT offset, LONG_PTR newval, BOOL ansi ); BOOL WINAPI NtUserSetWindowPos( HWND hwnd, HWND after, INT x, INT y, INT cx, INT cy, UINT flags ); -- 2.11.4.GIT