Module: wine Branch: master Commit: 172ae86945cb861d672cba37790e65782dac722f URL: https://source.winehq.org/git/wine.git/?a=commit;h=172ae86945cb861d672cba377...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Apr 22 14:45:25 2022 +0200
win32u: Move NtUserSetMenuDefaultItem implementation from user32.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/user32/mdi.c | 2 +- dlls/user32/menu.c | 58 +------------------------------------------------ dlls/user32/user32.spec | 2 +- dlls/win32u/menu.c | 48 ++++++++++++++++++++++++++++++++++++++++ dlls/win32u/syscall.c | 1 + dlls/win32u/win32u.spec | 2 +- dlls/wow64win/syscall.h | 1 + dlls/wow64win/user.c | 9 ++++++++ include/ntuser.h | 1 + 9 files changed, 64 insertions(+), 60 deletions(-)
diff --git a/dlls/user32/mdi.c b/dlls/user32/mdi.c index 69957af1380..df470f74762 100644 --- a/dlls/user32/mdi.c +++ b/dlls/user32/mdi.c @@ -894,7 +894,7 @@ static BOOL MDI_AugmentFrameMenu( HWND frame, HWND hChild ) NtUserEnableMenuItem(hSysPopup, SC_SIZE, MF_BYCOMMAND | MF_GRAYED); NtUserEnableMenuItem(hSysPopup, SC_MOVE, MF_BYCOMMAND | MF_GRAYED); NtUserEnableMenuItem(hSysPopup, SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED); - SetMenuDefaultItem(hSysPopup, SC_CLOSE, FALSE); + NtUserSetMenuDefaultItem(hSysPopup, SC_CLOSE, FALSE);
/* redraw menu */ DrawMenuBar(frame); diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c index 36aed74c6c6..6fb9422cf9d 100644 --- a/dlls/user32/menu.c +++ b/dlls/user32/menu.c @@ -375,7 +375,7 @@ static HMENU MENU_CopySysPopup(BOOL mdi) SetMenuItemInfoW( hMenu, SC_MAXIMIZE, FALSE, &miteminfo); miteminfo.hbmpItem = HBMMENU_POPUP_MINIMIZE; SetMenuItemInfoW( hMenu, SC_MINIMIZE, FALSE, &miteminfo); - SetMenuDefaultItem(hMenu, SC_CLOSE, FALSE); + NtUserSetMenuDefaultItem( hMenu, SC_CLOSE, FALSE ); } else ERR("Unable to load default system menu\n" ); @@ -4875,62 +4875,6 @@ BOOL WINAPI SetMenuItemInfoW(HMENU hmenu, UINT item, BOOL bypos, return ret; }
-static BOOL set_menu_default_item(POPUPMENU *menu, UINT uItem, UINT bypos) -{ - unsigned int i; - MENUITEM *item; - - /* reset all default-item flags */ - item = menu->items; - for (i = 0; i < menu->nItems; i++, item++) - { - item->fState &= ~MFS_DEFAULT; - } - - /* no default item */ - if (-1 == uItem) - return TRUE; - - item = menu->items; - if ( bypos ) - { - if ( uItem >= menu->nItems ) return FALSE; - item[uItem].fState |= MFS_DEFAULT; - return TRUE; - } - else - { - for (i = 0; i < menu->nItems; i++, item++) - { - if (item->wID == uItem) - { - item->fState |= MFS_DEFAULT; - return TRUE; - } - } - } - - return FALSE; -} - -/********************************************************************** - * SetMenuDefaultItem (USER32.@) - * - */ -BOOL WINAPI SetMenuDefaultItem(HMENU hmenu, UINT uItem, UINT bypos) -{ - POPUPMENU *menu; - BOOL ret; - - TRACE("(%p,%d,%d)\n", hmenu, uItem, bypos); - - if (!(menu = grab_menu_ptr(hmenu))) return FALSE; - ret = set_menu_default_item(menu, uItem, bypos); - release_menu_ptr(menu); - - return ret; -} - /********************************************************************** * GetMenuDefaultItem (USER32.@) */ diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec index 727a21a5935..f8683a78426 100644 --- a/dlls/user32/user32.spec +++ b/dlls/user32/user32.spec @@ -680,7 +680,7 @@ @ stdcall SetLogonNotifyWindow(long long) @ stdcall SetMenu(long long) NtUserSetMenu @ stdcall SetMenuContextHelpId(long long) NtUserSetMenuContextHelpId -@ stdcall SetMenuDefaultItem(long long long) +@ stdcall SetMenuDefaultItem(long long long) NtUserSetMenuDefaultItem @ stdcall SetMenuInfo(long ptr) @ stdcall SetMenuItemBitmaps(long long long long long) @ stdcall SetMenuItemInfoA(long long long ptr) diff --git a/dlls/win32u/menu.c b/dlls/win32u/menu.c index dee68a95aa2..5d1a5ec12d6 100644 --- a/dlls/win32u/menu.c +++ b/dlls/win32u/menu.c @@ -541,3 +541,51 @@ BOOL WINAPI NtUserSetMenuContextHelpId( HMENU handle, DWORD id ) release_menu_ptr( menu ); return TRUE; } + +/********************************************************************** + * NtUserSetMenuDefaultItem (win32u.@) + */ +BOOL WINAPI NtUserSetMenuDefaultItem( HMENU handle, UINT item, UINT bypos ) +{ + MENUITEM *menu_item; + POPUPMENU *menu; + unsigned int i; + BOOL ret = FALSE; + + TRACE( "(%p,%d,%d)\n", handle, item, bypos ); + + if (!(menu = grab_menu_ptr( handle ))) return FALSE; + + /* reset all default-item flags */ + menu_item = menu->items; + for (i = 0; i < menu->nItems; i++, menu_item++) + { + menu_item->fState &= ~MFS_DEFAULT; + } + + if (item != -1) + { + menu_item = menu->items; + + if (bypos) + { + ret = item < menu->nItems; + if (ret) menu->items[item].fState |= MFS_DEFAULT; + } + else + { + for (i = 0; i < menu->nItems; i++) + { + if (menu->items[i].wID == item) + { + menu->items[i].fState |= MFS_DEFAULT; + ret = TRUE; + } + } + } + } + else ret = TRUE; + + release_menu_ptr( menu ); + return ret; +} diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index d543465d4d7..0be0863b992 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -157,6 +157,7 @@ static void * const syscalls[] = NtUserRemoveProp, NtUserSetKeyboardState, NtUserSetMenuContextHelpId, + NtUserSetMenuDefaultItem, NtUserSetObjectInformation, NtUserSetProcessDpiAwarenessContext, NtUserSetProcessWindowStation, diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index cfbf4ac1ad1..f3e2f9ca2f5 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -1208,7 +1208,7 @@ @ stub NtUserSetManipulationInputTarget @ stdcall NtUserSetMenu(long long) @ stdcall -syscall NtUserSetMenuContextHelpId(long long) -@ stub NtUserSetMenuDefaultItem +@ stdcall -syscall NtUserSetMenuDefaultItem(long long long) @ stub NtUserSetMenuFlagRtoL @ stub NtUserSetMirrorRendering @ stub NtUserSetMonitorWorkArea diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index f3cee62b577..124506bdb05 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -144,6 +144,7 @@ SYSCALL_ENTRY( NtUserRemoveProp ) \ SYSCALL_ENTRY( NtUserSetKeyboardState ) \ SYSCALL_ENTRY( NtUserSetMenuContextHelpId ) \ + SYSCALL_ENTRY( NtUserSetMenuDefaultItem ) \ SYSCALL_ENTRY( NtUserSetObjectInformation ) \ SYSCALL_ENTRY( NtUserSetProcessDpiAwarenessContext ) \ SYSCALL_ENTRY( NtUserSetProcessWindowStation ) \ diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 38905fd8a57..3e8004b005c 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -659,6 +659,15 @@ NTSTATUS WINAPI wow64_NtUserSetMenuContextHelpId( UINT *args ) return NtUserSetMenuContextHelpId( menu, id ); }
+NTSTATUS WINAPI wow64_NtUserSetMenuDefaultItem( UINT *args ) +{ + HMENU handle = get_handle( &args ); + UINT item = get_ulong( &args ); + UINT bypos = get_ulong( &args ); + + return NtUserSetMenuDefaultItem( handle, item, bypos ); +} + NTSTATUS WINAPI wow64_NtUserThunkedMenuInfo( UINT *args ) { HMENU menu = get_handle( &args ); diff --git a/include/ntuser.h b/include/ntuser.h index cdac581f193..7fc52979e7e 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -556,6 +556,7 @@ BOOL WINAPI NtUserSetKeyboardState( BYTE *state ); BOOL WINAPI NtUserSetLayeredWindowAttributes( HWND hwnd, COLORREF key, BYTE alpha, DWORD flags ); BOOL WINAPI NtUserSetMenu( HWND hwnd, HMENU menu ); BOOL WINAPI NtUserSetMenuContextHelpId( HMENU handle, DWORD id ); +BOOL WINAPI NtUserSetMenuDefaultItem( HMENU handle, UINT item, UINT bypos ); HWND WINAPI NtUserSetParent( HWND hwnd, HWND parent ); BOOL WINAPI NtUserSetProcessDpiAwarenessContext( ULONG awareness, ULONG unknown ); BOOL WINAPI NtUserSetProcessWindowStation( HWINSTA handle );