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