Jacek Caban : win32u: Move NtUserSetMenuDefaultItem implementation from user32.
Alexandre Julliard
julliard at winehq.org
Fri Apr 22 14:46:04 CDT 2022
Module: wine
Branch: master
Commit: 172ae86945cb861d672cba37790e65782dac722f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=172ae86945cb861d672cba37790e65782dac722f
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Apr 22 14:45:25 2022 +0200
win32u: Move NtUserSetMenuDefaultItem implementation from user32.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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 );
More information about the wine-cvs
mailing list