user32: Reimplement MENU_FindSubMenu on the 16-bit side using only exported functions.
This commit is contained in:
parent
d4a7a9d43d
commit
00e75f2b9e
|
@ -158,7 +158,6 @@ extern void MENU_TrackMouseMenuBar( HWND hwnd, INT ht, POINT pt ) DECLSPEC_HIDDE
|
||||||
extern void MENU_TrackKbdMenuBar( HWND hwnd, UINT wParam, WCHAR wChar ) DECLSPEC_HIDDEN;
|
extern void MENU_TrackKbdMenuBar( HWND hwnd, UINT wParam, WCHAR wChar ) DECLSPEC_HIDDEN;
|
||||||
extern UINT MENU_DrawMenuBar( HDC hDC, LPRECT lprect,
|
extern UINT MENU_DrawMenuBar( HDC hDC, LPRECT lprect,
|
||||||
HWND hwnd, BOOL suppress_draw ) DECLSPEC_HIDDEN;
|
HWND hwnd, BOOL suppress_draw ) DECLSPEC_HIDDEN;
|
||||||
extern UINT MENU_FindSubMenu( HMENU *hmenu, HMENU hSubTarget ) DECLSPEC_HIDDEN;
|
|
||||||
extern void MENU_EndMenu(HWND) DECLSPEC_HIDDEN;
|
extern void MENU_EndMenu(HWND) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* nonclient area */
|
/* nonclient area */
|
||||||
|
|
|
@ -656,7 +656,7 @@ static MENUITEM *MENU_FindItem( HMENU *hmenu, UINT *nPos, UINT wFlags )
|
||||||
* *hmenu in case it is found in another sub-menu.
|
* *hmenu in case it is found in another sub-menu.
|
||||||
* If the submenu cannot be found, NO_SELECTED_ITEM is returned.
|
* If the submenu cannot be found, NO_SELECTED_ITEM is returned.
|
||||||
*/
|
*/
|
||||||
UINT MENU_FindSubMenu( HMENU *hmenu, HMENU hSubTarget )
|
static UINT MENU_FindSubMenu( HMENU *hmenu, HMENU hSubTarget )
|
||||||
{
|
{
|
||||||
POPUPMENU *menu;
|
POPUPMENU *menu;
|
||||||
UINT i;
|
UINT i;
|
||||||
|
|
|
@ -587,6 +587,24 @@ static HANDLE16 convert_handle_32_to_16(UINT_PTR src, unsigned int flags)
|
||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int find_sub_menu( HMENU *hmenu, HMENU16 target )
|
||||||
|
{
|
||||||
|
int i, pos, count = GetMenuItemCount( *hmenu );
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
HMENU sub = GetSubMenu( *hmenu, i );
|
||||||
|
if (!sub) continue;
|
||||||
|
if (HMENU_16(sub) == target) return i;
|
||||||
|
if ((pos = find_sub_menu( &sub, target )) != -1)
|
||||||
|
{
|
||||||
|
*hmenu = sub;
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* WINPROC_CallProc16To32A
|
* WINPROC_CallProc16To32A
|
||||||
*/
|
*/
|
||||||
|
@ -825,8 +843,8 @@ LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT1
|
||||||
if((LOWORD(lParam) & MF_POPUP) && (LOWORD(lParam) != 0xFFFF))
|
if((LOWORD(lParam) & MF_POPUP) && (LOWORD(lParam) != 0xFFFF))
|
||||||
{
|
{
|
||||||
HMENU hmenu = HMENU_32(HIWORD(lParam));
|
HMENU hmenu = HMENU_32(HIWORD(lParam));
|
||||||
UINT pos = MENU_FindSubMenu( &hmenu, HMENU_32(wParam) );
|
int pos = find_sub_menu( &hmenu, wParam );
|
||||||
if (pos == 0xffff) pos = 0; /* NO_SELECTED_ITEM */
|
if (pos == -1) pos = 0;
|
||||||
wParam = pos;
|
wParam = pos;
|
||||||
}
|
}
|
||||||
ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ),
|
ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ),
|
||||||
|
|
Loading…
Reference in New Issue