Make national (hot)keys work in menus. Make menu code use unicode APIs

Dmitry Timoshkov dmitry at baikal.ru
Tue Nov 18 07:50:31 CST 2003


Hello,

we were double converting WM_MENUCHAR message between A<->W
and forbidding WM_CHAR messages with char codes above 127.

After all, menu window proc is a unicode only...

Changelog:
    Dmitry Timoshkov <dmitry at codeweavers.com>
    Make national (hot)keys work in menus. Make menu code use unicode APIs.

diff -u cvs/hq/wine/controls/menu.c wine/controls/menu.c
--- cvs/hq/wine/controls/menu.c	Thu Sep 18 10:43:27 2003
+++ wine/controls/menu.c	Tue Nov 18 20:35:41 2003
@@ -29,10 +29,7 @@
 #include "config.h"
 #include "wine/port.h"
 
-#include <assert.h>
-#include <ctype.h>
 #include <stdarg.h>
-#include <stdlib.h>
 #include <string.h>
 
 #include "windef.h"
@@ -186,7 +183,7 @@ DWORD WINAPI DrawMenuBarTemp(HWND hwnd, 
  */
 const struct builtin_class_descr MENU_builtin_class =
 {
-    POPUPMENU_CLASS_ATOM,          /* name */
+    POPUPMENU_CLASS_ATOMA,         /* name */
     CS_GLOBALCLASS | CS_SAVEBITS,  /* style */
     NULL,                          /* procA (winproc is Unicode only) */
     PopupMenuWndProc,              /* procW */
@@ -331,7 +328,9 @@ static HMENU get_win_sys_menu( HWND hwnd
  */
 static HMENU MENU_CopySysPopup(void)
 {
-    HMENU hMenu = LoadMenuA(GetModuleHandleA("USER32"), "SYSMENU");
+    static const WCHAR user32W[] = {'U','S','E','R','3','2',0};
+    static const WCHAR sysmenuW[] = {'S','Y','S','M','E','N','U',0};
+    HMENU hMenu = LoadMenuW(GetModuleHandleW(user32W), sysmenuW);
 
     if( hMenu ) {
         POPUPMENU* menu = MENU_GetMenu(hMenu);
@@ -374,7 +373,7 @@ HMENU MENU_GetSysMenu( HWND hWnd, HMENU 
 
 	if (hPopupMenu)
 	{
-	    InsertMenuA( hMenu, -1, MF_SYSMENU | MF_POPUP | MF_BYPOSITION,
+	    InsertMenuW( hMenu, -1, MF_SYSMENU | MF_POPUP | MF_BYPOSITION,
                          (UINT_PTR)hPopupMenu, NULL );
 
             menu->items[0].fType = MF_SYSMENU | MF_POPUP;
@@ -396,10 +395,10 @@ HMENU MENU_GetSysMenu( HWND hWnd, HMENU 
  *
  * Menus initialisation.
  */
-BOOL MENU_Init()
+BOOL MENU_Init(void)
 {
     HBITMAP hBitmap;
-    NONCLIENTMETRICSA ncm;
+    NONCLIENTMETRICSW ncm;
 
     static unsigned char shade_bits[16] = { 0x55, 0, 0xAA, 0,
 					    0x55, 0, 0xAA, 0,
@@ -407,14 +406,14 @@ BOOL MENU_Init()
 					    0x55, 0, 0xAA, 0 };
 
     /* Load menu bitmaps */
-    hStdMnArrow = LoadBitmapA(0, MAKEINTRESOURCEA(OBM_MNARROW));
+    hStdMnArrow = LoadBitmapW(0, MAKEINTRESOURCEW(OBM_MNARROW));
     /* Load system buttons bitmaps */
-    hBmpSysMenu = LoadBitmapA(0, MAKEINTRESOURCEA(OBM_CLOSE));
+    hBmpSysMenu = LoadBitmapW(0, MAKEINTRESOURCEW(OBM_CLOSE));
 
     if (hStdMnArrow)
     {
 	BITMAP bm;
-	GetObjectA( hStdMnArrow, sizeof(bm), &bm );
+	GetObjectW( hStdMnArrow, sizeof(bm), &bm );
 	arrow_bitmap_width = bm.bmWidth;
 	arrow_bitmap_height = bm.bmHeight;
     } else
@@ -430,18 +429,18 @@ BOOL MENU_Init()
     if (!(MENU_DefSysPopup = MENU_CopySysPopup()))
 	return FALSE;
 
-    ncm.cbSize = sizeof (NONCLIENTMETRICSA);
-    if (!(SystemParametersInfoA(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSA), &ncm, 0)))
+    ncm.cbSize = sizeof(NONCLIENTMETRICSW);
+    if (!(SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncm, 0)))
 	return FALSE;
 
-    if (!(hMenuFont = CreateFontIndirectA( &ncm.lfMenuFont )))
+    if (!(hMenuFont = CreateFontIndirectW( &ncm.lfMenuFont )))
 	return FALSE;
 
     ncm.lfMenuFont.lfWeight += 300;
     if ( ncm.lfMenuFont.lfWeight > 1000)
 	ncm.lfMenuFont.lfWeight = 1000;
 
-    if (!(hMenuFontBold = CreateFontIndirectA( &ncm.lfMenuFont )))
+    if (!(hMenuFontBold = CreateFontIndirectW( &ncm.lfMenuFont )))
 	return FALSE;
 
     return TRUE;
@@ -667,7 +666,7 @@ static MENUITEM *MENU_FindItemByCoords( 
 static UINT MENU_FindItemByKey( HWND hwndOwner, HMENU hmenu,
 				  UINT key, BOOL forceMenuChar )
 {
-    TRACE("\tlooking for '%c' in [%p]\n", (char)key, hmenu );
+    TRACE("\tlooking for '%c' (0x%02x) in [%p]\n", (char)key, key, hmenu );
 
     if (!IsMenu( hmenu )) hmenu = GetSubMenu( get_win_sys_menu(hwndOwner), 0);
 
@@ -675,13 +674,13 @@ static UINT MENU_FindItemByKey( HWND hwn
     {
 	POPUPMENU *menu = MENU_GetMenu( hmenu );
 	MENUITEM *item = menu->items;
-	LONG menuchar;
+	LRESULT menuchar;
 
 	if( !forceMenuChar )
 	{
 	     UINT i;
 
-	     key = toupper(key);
+	     key = toupperW(key);
 	     for (i = 0; i < menu->nItems; i++, item++)
 	     {
 		if (IS_STRING_ITEM(item->fType) && item->text)
@@ -692,11 +691,11 @@ static UINT MENU_FindItemByKey( HWND hwn
 		    	p = strchrW (p + 2, '&');
 		    }
 		    while (p != NULL && p [1] == '&');
-		    if (p && (toupper(p[1]) == key)) return i;
+		    if (p && (toupperW(p[1]) == key)) return i;
 		}
 	     }
 	}
-	menuchar = SendMessageA( hwndOwner, WM_MENUCHAR,
+	menuchar = SendMessageW( hwndOwner, WM_MENUCHAR,
                                  MAKEWPARAM( key, menu->wFlags ), (LPARAM)hmenu );
 	if (HIWORD(menuchar) == 2) return LOWORD(menuchar);
 	if (HIWORD(menuchar) == 1) return (UINT)(-2);
@@ -747,7 +746,7 @@ static void MENU_GetBitmapItemSize( UINT
             return;
         }
     }
-    if (GetObjectA(bmp, sizeof(bm), &bm ))
+    if (GetObjectW(bmp, sizeof(bm), &bm ))
     {
         size->cx = bm.bmWidth;
         size->cy = bm.bmHeight;
@@ -782,12 +781,12 @@ static void MENU_DrawBitmapItem( HDC hdc
             if (lpitem->dwItemData)
             {
                 bmp = (HBITMAP)lpitem->dwItemData;
-                if (!GetObjectA( bmp, sizeof(bm), &bm )) return;
+                if (!GetObjectW( bmp, sizeof(bm), &bm )) return;
             }
             else
             {
                 bmp = hBmpSysMenu;
-                if (!GetObjectA( bmp, sizeof(bm), &bm )) return;
+                if (!GetObjectW( bmp, sizeof(bm), &bm )) return;
                 /* only use right half of the bitmap */
                 bmp_xoffset = bm.bmWidth / 2;
                 bm.bmWidth -= bmp_xoffset;
@@ -824,7 +823,7 @@ static void MENU_DrawBitmapItem( HDC hdc
         return;
     }
 
-    if (!bmp || !GetObjectA( bmp, sizeof(bm), &bm )) return;
+    if (!bmp || !GetObjectW( bmp, sizeof(bm), &bm )) return;
 
  got_bitmap:
     hdcMem = CreateCompatibleDC( hdc );
@@ -880,7 +879,7 @@ static void MENU_CalcItemSize( HDC hdc, 
         mis.itemData   = (DWORD)lpitem->dwItemData;
         mis.itemHeight = 0;
         mis.itemWidth  = 0;
-        SendMessageA( hwndOwner, WM_MEASUREITEM, 0, (LPARAM)&mis );
+        SendMessageW( hwndOwner, WM_MEASUREITEM, 0, (LPARAM)&mis );
         lpitem->rect.right  += mis.itemWidth;
 
  	if (menuBar)
@@ -1176,7 +1175,7 @@ static void MENU_DrawMenuItem( HWND hwnd
 	      dis.itemID, dis.itemState, dis.itemAction, dis.hwndItem,
 	      dis.hDC, dis.rcItem.left, dis.rcItem.top, dis.rcItem.right,
 	      dis.rcItem.bottom);
-        SendMessageA( hwndOwner, WM_DRAWITEM, 0, (LPARAM)&dis );
+        SendMessageW( hwndOwner, WM_DRAWITEM, 0, (LPARAM)&dis );
         /* Fall through to draw popup-menu arrow */
     }
 
@@ -1601,9 +1600,9 @@ static BOOL MENU_ShowPopup( HWND hwndOwn
     }
 
     /* NOTE: In Windows, top menu popup is not owned. */
-    menu->hWnd = CreateWindowA( POPUPMENU_CLASS_ATOM, NULL,
+    menu->hWnd = CreateWindowExW( 0, POPUPMENU_CLASS_ATOMW, NULL,
                                 WS_POPUP, x, y, width, height,
-                                hwndOwner, 0, (HINSTANCE)GetWindowLongA(hwndOwner,GWL_HINSTANCE),
+                                hwndOwner, 0, (HINSTANCE)GetWindowLongW(hwndOwner, GWL_HINSTANCE),
                                 (LPVOID)hmenu );
     if( !menu->hWnd ) return FALSE;
     if (!top_popup) top_popup = menu->hWnd;
@@ -1660,7 +1659,7 @@ static void MENU_SelectItem( HWND hwndOw
         if (sendMenuSelect)
         {
             MENUITEM *ip = &lppop->items[lppop->FocusedItem];
-	    SendMessageA( hwndOwner, WM_MENUSELECT,
+	    SendMessageW( hwndOwner, WM_MENUSELECT,
                      MAKELONG(ip->fType & MF_POPUP ? wIndex: ip->wID,
                      ip->fType | ip->fState | MF_MOUSESELECT |
                      (lppop->wFlags & MF_SYSMENU)), (LPARAM)hmenu);
@@ -1672,7 +1671,7 @@ static void MENU_SelectItem( HWND hwndOw
             if((pos=MENU_FindSubMenu(&topmenu, hmenu))!=NO_SELECTED_ITEM){
                 POPUPMENU *ptm = MENU_GetMenu( topmenu );
                 MENUITEM *ip = &ptm->items[pos];
-                SendMessageA( hwndOwner, WM_MENUSELECT, MAKELONG(pos,
+                SendMessageW( hwndOwner, WM_MENUSELECT, MAKELONG(pos,
                          ip->fType | ip->fState | MF_MOUSESELECT |
                          (ptm->wFlags & MF_SYSMENU)), (LPARAM)topmenu);
             }
@@ -2043,7 +2042,7 @@ static HMENU MENU_ShowSubPopup( HWND hwn
 
     /* Send WM_INITMENUPOPUP message only if TPM_NONOTIFY flag is not specified */
     if (!(wFlags & TPM_NONOTIFY))
-       SendMessageA( hwndOwner, WM_INITMENUPOPUP, (WPARAM)item->hSubMenu,
+       SendMessageW( hwndOwner, WM_INITMENUPOPUP, (WPARAM)item->hSubMenu,
                      MAKELONG( menu->FocusedItem, IS_SYSTEM_MENU(menu) ));
 
     item = &menu->items[menu->FocusedItem];
@@ -2069,8 +2068,8 @@ static HMENU MENU_ShowSubPopup( HWND hwn
     if (IS_SYSTEM_MENU(menu))
     {
 	MENU_InitSysMenuPopup(item->hSubMenu,
-                              GetWindowLongA( menu->hWnd, GWL_STYLE ),
-                              GetClassLongA( menu->hWnd, GCL_STYLE));
+                              GetWindowLongW( menu->hWnd, GWL_STYLE ),
+                              GetClassLongW( menu->hWnd, GCL_STYLE));
 
 	NC_GetSysPopupPos( menu->hWnd, &rect );
 	rect.top = rect.bottom;
@@ -2178,10 +2177,10 @@ static INT MENU_ExecFocusedItem( MTRACKE
 	    if(!(wFlags & TPM_RETURNCMD))
 	    {
 		if( menu->wFlags & MF_SYSMENU )
-		    PostMessageA( pmt->hOwnerWnd, WM_SYSCOMMAND, item->wID,
+		    PostMessageW( pmt->hOwnerWnd, WM_SYSCOMMAND, item->wID,
 				  MAKELPARAM((INT16)pmt->pt.x, (INT16)pmt->pt.y) );
 		else
-		    PostMessageA( pmt->hOwnerWnd, WM_COMMAND, item->wID, 0 );
+		    PostMessageW( pmt->hOwnerWnd, WM_COMMAND, item->wID, 0 );
 	    }
 	    return item->wID;
 	}
@@ -2384,7 +2383,7 @@ static LRESULT MENU_DoNextMenu( MTRACKER
 
 	if (!next_menu.hmenuNext || !next_menu.hwndNext)
 	{
-            DWORD style = GetWindowLongA( pmt->hOwnerWnd, GWL_STYLE );
+            DWORD style = GetWindowLongW( pmt->hOwnerWnd, GWL_STYLE );
 	    hNewWnd = pmt->hOwnerWnd;
 	    if( IS_SYSTEM_MENU(menu) )
 	    {
@@ -2412,7 +2411,7 @@ static LRESULT MENU_DoNextMenu( MTRACKER
 
 	    if( IsMenu(hNewMenu) && IsWindow(hNewWnd) )
 	    {
-                DWORD style = GetWindowLongA( hNewWnd, GWL_STYLE );
+                DWORD style = GetWindowLongW( hNewWnd, GWL_STYLE );
 
 		if (style & WS_SYSMENU &&
 		    GetSubMenu(get_win_sys_menu(hNewWnd), 0) == hNewMenu )
@@ -2466,17 +2465,17 @@ static BOOL MENU_SuspendPopup( MTRACKER*
 
     msg.hwnd = pmt->hOwnerWnd;
 
-    PeekMessageA( &msg, 0, 0, 0, PM_NOYIELD | PM_REMOVE);
+    PeekMessageW( &msg, 0, 0, 0, PM_NOYIELD | PM_REMOVE);
     pmt->trackFlags |= TF_SKIPREMOVE;
 
     switch( uMsg )
     {
 	case WM_KEYDOWN:
-	     PeekMessageA( &msg, 0, 0, 0, PM_NOYIELD | PM_NOREMOVE);
+	     PeekMessageW( &msg, 0, 0, 0, PM_NOYIELD | PM_NOREMOVE);
 	     if( msg.message == WM_KEYUP || msg.message == WM_PAINT )
 	     {
-		 PeekMessageA( &msg, 0, 0, 0, PM_NOYIELD | PM_REMOVE);
-	         PeekMessageA( &msg, 0, 0, 0, PM_NOYIELD | PM_NOREMOVE);
+		 PeekMessageW( &msg, 0, 0, 0, PM_NOYIELD | PM_REMOVE);
+	         PeekMessageW( &msg, 0, 0, 0, PM_NOYIELD | PM_NOREMOVE);
 	         if( msg.message == WM_KEYDOWN &&
 		    (msg.wParam == VK_LEFT || msg.wParam == VK_RIGHT))
 	         {
@@ -2684,11 +2683,11 @@ static INT MENU_TrackMenu( HMENU hmenu, 
 
         for (;;)
         {
-            if (PeekMessageA( &msg, 0, 0, 0, PM_NOREMOVE ))
+            if (PeekMessageW( &msg, 0, 0, 0, PM_NOREMOVE ))
             {
-                if (!CallMsgFilterA( &msg, MSGF_MENU )) break;
+                if (!CallMsgFilterW( &msg, MSGF_MENU )) break;
                 /* remove the message from the queue */
-                PeekMessageA( &msg, 0, msg.message, msg.message, PM_REMOVE );
+                PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
             }
             else
             {
@@ -2709,7 +2708,7 @@ static INT MENU_TrackMenu( HMENU hmenu, 
     	    fEndMenu = TRUE;
 
 	    /* remove the message from the queue */
-	    PeekMessageA( &msg, 0, msg.message, msg.message, PM_REMOVE );
+	    PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
 
 	    /* break out of internal loop, ala ESCAPE */
 	    break;
@@ -2835,7 +2834,7 @@ static INT MENU_TrackMenu( HMENU hmenu, 
 			hi.hItemHandle = hmenu;
 			hi.dwContextId = menu->dwContextHelpID;
 			hi.MousePos = msg.pt;
-			SendMessageA(hwnd, WM_HELP, 0, (LPARAM)&hi);
+			SendMessageW(hwnd, WM_HELP, 0, (LPARAM)&hi);
 			break;
 		    }
 
@@ -2868,7 +2867,7 @@ static INT MENU_TrackMenu( HMENU hmenu, 
 
 		      /* Hack to avoid control chars. */
 		      /* We will find a better way real soon... */
-		    if ((msg.wParam <= 32) || (msg.wParam >= 127)) break;
+		    if (msg.wParam < 32) break;
 
 		    pos = MENU_FindItemByKey( mt.hOwnerWnd, mt.hCurrentMenu,
                                               LOWORD(msg.wParam), FALSE );
@@ -2887,7 +2886,7 @@ static INT MENU_TrackMenu( HMENU hmenu, 
 	}
 	else
 	{
-	    DispatchMessageA( &msg );
+	    DispatchMessageW( &msg );
 	}
 
 	if (!fEndMenu) fRemove = TRUE;
@@ -2895,7 +2894,7 @@ static INT MENU_TrackMenu( HMENU hmenu, 
 	/* finally remove message from the queue */
 
         if (fRemove && !(mt.trackFlags & TF_SKIPREMOVE) )
-	    PeekMessageA( &msg, 0, msg.message, msg.message, PM_REMOVE );
+	    PeekMessageW( &msg, 0, msg.message, msg.message, PM_REMOVE );
 	else mt.trackFlags &= ~TF_SKIPREMOVE;
     }
 
@@ -2919,7 +2918,7 @@ static INT MENU_TrackMenu( HMENU hmenu, 
                 menu->hWnd = 0;
 	    }
 	    MENU_SelectItem( mt.hOwnerWnd, mt.hTopMenu, NO_SELECTED_ITEM, FALSE, 0 );
-	    SendMessageA( mt.hOwnerWnd, WM_MENUSELECT, MAKELONG(0,0xffff), 0 );
+	    SendMessageW( mt.hOwnerWnd, WM_MENUSELECT, MAKELONG(0,0xffff), 0 );
         }
 
         /* Reset the variable for hiding menu */
@@ -2941,14 +2940,14 @@ static BOOL MENU_InitTracking(HWND hWnd,
 
     /* Send WM_ENTERMENULOOP and WM_INITMENU message only if TPM_NONOTIFY flag is not specified */
     if (!(wFlags & TPM_NONOTIFY))
-       SendMessageA( hWnd, WM_ENTERMENULOOP, bPopup, 0 );
+       SendMessageW( hWnd, WM_ENTERMENULOOP, bPopup, 0 );
 
-    SendMessageA( hWnd, WM_SETCURSOR, (WPARAM)hWnd, HTCAPTION );
+    SendMessageW( hWnd, WM_SETCURSOR, (WPARAM)hWnd, HTCAPTION );
 
     if (!(wFlags & TPM_NONOTIFY))
     {
        POPUPMENU *menu;
-       SendMessageA( hWnd, WM_INITMENU, (WPARAM)hMenu, 0 );
+       SendMessageW( hWnd, WM_INITMENU, (WPARAM)hMenu, 0 );
        if ((menu = MENU_GetMenu( hMenu )) && (!menu->Height))
        { /* app changed/recreated menu bar entries in WM_INITMENU
             Recalculate menu sizes else clicks will not work */
@@ -2966,7 +2965,7 @@ static BOOL MENU_ExitTracking(HWND hWnd)
 {
     TRACE("hwnd=%p\n", hWnd);
 
-    SendMessageA( hWnd, WM_EXITMENULOOP, 0, 0 );
+    SendMessageW( hWnd, WM_EXITMENULOOP, 0, 0 );
     ShowCaret(0);
     return TRUE;
 }
@@ -3009,7 +3008,7 @@ void MENU_TrackKbdMenuBar( HWND hwnd, UI
 
     /* find window that has a menu */
 
-    while (GetWindowLongA( hwnd, GWL_STYLE ) & WS_CHILD)
+    while (GetWindowLongW( hwnd, GWL_STYLE ) & WS_CHILD)
         if (!(hwnd = GetParent( hwnd ))) return;
 
     /* check if we have to track a system menu */
@@ -3017,8 +3016,8 @@ void MENU_TrackKbdMenuBar( HWND hwnd, UI
     hTrackMenu = GetMenu( hwnd );
     if (!hTrackMenu || IsIconic(hwnd) || vkey == VK_SPACE )
     {
-        if (!(GetWindowLongA( hwnd, GWL_STYLE ) & WS_SYSMENU)) return;
-        if (GetWindowLongA( hwnd, GWL_EXSTYLE ) & WS_EX_MANAGED) return;
+        if (!(GetWindowLongW( hwnd, GWL_STYLE ) & WS_SYSMENU)) return;
+        if (GetWindowLongW( hwnd, GWL_EXSTYLE ) & WS_EX_MANAGED) return;
         hTrackMenu = get_win_sys_menu( hwnd );
         uItem = 0;
         wParam |= HTSYSMENU; /* prevent item lookup */
@@ -3045,7 +3044,7 @@ void MENU_TrackKbdMenuBar( HWND hwnd, UI
         if( uItem == NO_SELECTED_ITEM )
             MENU_MoveSelection( hwnd, hTrackMenu, ITEM_NEXT );
         else if( vkey )
-            PostMessageA( hwnd, WM_KEYDOWN, VK_DOWN, 0L );
+            PostMessageW( hwnd, WM_KEYDOWN, VK_DOWN, 0L );
 
         MENU_TrackMenu( hTrackMenu, wFlags, 0, 0, hwnd, NULL );
     }
@@ -3069,7 +3068,7 @@ BOOL WINAPI TrackPopupMenu( HMENU hMenu,
 
     /* Send WM_INITMENUPOPUP message only if TPM_NONOTIFY flag is not specified */
     if (!(wFlags & TPM_NONOTIFY))
-        SendMessageA( hWnd, WM_INITMENUPOPUP, (WPARAM)hMenu, 0);
+        SendMessageW( hWnd, WM_INITMENUPOPUP, (WPARAM)hMenu, 0);
 
     if (MENU_ShowPopup( hWnd, hMenu, 0, x, y, 0, 0 ))
 	ret = MENU_TrackMenu( hMenu, wFlags | TPM_POPUPMENU, 0, 0, hWnd, lpRect );
@@ -3118,7 +3117,7 @@ static LRESULT WINAPI PopupMenuWndProc( 
 	    PAINTSTRUCT ps;
 	    BeginPaint( hwnd, &ps );
 	    MENU_DrawPopupMenu( hwnd, ps.hdc,
-                                (HMENU)GetWindowLongA( hwnd, 0 ) );
+                                (HMENU)GetWindowLongW( hwnd, 0 ) );
 	    EndPaint( hwnd, &ps );
             return 0;
 	}
@@ -3748,7 +3747,7 @@ BOOL WINAPI SetSystemMenu( HWND hwnd, HM
  */
 HMENU WINAPI GetMenu( HWND hWnd )
 {
-    HMENU retvalue = (HMENU)GetWindowLongA( hWnd, GWL_ID );
+    HMENU retvalue = (HMENU)GetWindowLongW( hWnd, GWL_ID );
     TRACE("for %p returning %p\n", hWnd, retvalue);
     return retvalue;
 }
@@ -3766,7 +3765,7 @@ BOOL WINAPI SetMenu( HWND hWnd, HMENU hM
         WARN("hMenu %p is not a menu handle\n", hMenu);
         return FALSE;
     }
-    if (GetWindowLongA( hWnd, GWL_STYLE ) & WS_CHILD) return FALSE;
+    if (GetWindowLongW( hWnd, GWL_STYLE ) & WS_CHILD) return FALSE;
 
     hWnd = WIN_GetFullHandle( hWnd );
     if (GetCapture() == hWnd) MENU_SetCapture(0);  /* release the capture */
@@ -3780,7 +3779,7 @@ BOOL WINAPI SetMenu( HWND hWnd, HMENU hM
         lpmenu->hWnd = hWnd;
         lpmenu->Height = 0;  /* Make sure we recalculate the size */
     }
-    SetWindowLongA( hWnd, GWL_ID, (LONG_PTR)hMenu );
+    SetWindowLongW( hWnd, GWL_ID, (LONG_PTR)hMenu );
 
     if (IsWindowVisible(hWnd))
         SetWindowPos( hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE |
@@ -3811,7 +3810,7 @@ BOOL WINAPI DrawMenuBar( HWND hWnd )
     LPPOPUPMENU lppop;
     HMENU hMenu = GetMenu(hWnd);
 
-    if (GetWindowLongA( hWnd, GWL_STYLE ) & WS_CHILD) return FALSE;
+    if (GetWindowLongW( hWnd, GWL_STYLE ) & WS_CHILD) return FALSE;
     if (!hMenu || !(lppop = MENU_GetMenu( hMenu ))) return FALSE;
 
     lppop->Height = 0; /* Make sure we call MENU_MenuBarCalcSize */
@@ -3907,7 +3906,7 @@ void WINAPI EndMenu(void)
 	/* which will now terminate the menu, in the event that */
 	/* the main window was minimized, or lost focus, so we */
 	/* don't end up with an orphaned menu */
-        PostMessageA( top_popup, WM_CANCELMODE, 0, 0);
+        PostMessageW( top_popup, WM_CANCELMODE, 0, 0);
     }
 }
 
@@ -4661,7 +4660,7 @@ static BOOL translate_accelerator( HWND 
         HMENU hMenu, hSubMenu, hSysMenu;
         UINT uSysStat = (UINT)-1, uStat = (UINT)-1, nPos;
 
-        hMenu = (GetWindowLongA( hWnd, GWL_STYLE ) & WS_CHILD) ? 0 : GetMenu(hWnd);
+        hMenu = (GetWindowLongW( hWnd, GWL_STYLE ) & WS_CHILD) ? 0 : GetMenu(hWnd);
         hSysMenu = get_win_sys_menu( hWnd );
 
         /* find menu item and ask application to initialize it */
@@ -4670,12 +4669,12 @@ static BOOL translate_accelerator( HWND 
         nPos = cmd;
         if(MENU_FindItem(&hSubMenu, &nPos, MF_BYCOMMAND))
         {
-            SendMessageA(hWnd, WM_INITMENU, (WPARAM)hSysMenu, 0L);
+            SendMessageW(hWnd, WM_INITMENU, (WPARAM)hSysMenu, 0L);
             if(hSubMenu != hSysMenu)
             {
                 nPos = MENU_FindSubMenu(&hSysMenu, hSubMenu);
                 TRACE_(accel)("hSysMenu = %p, hSubMenu = %p, nPos = %d\n", hSysMenu, hSubMenu, nPos);
-                SendMessageA(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, TRUE));
+                SendMessageW(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, TRUE));
             }
             uSysStat = GetMenuState(GetSubMenu(hSysMenu, 0), cmd, MF_BYCOMMAND);
         }
@@ -4685,12 +4684,12 @@ static BOOL translate_accelerator( HWND 
             nPos = cmd;
             if(MENU_FindItem(&hSubMenu, &nPos, MF_BYCOMMAND))
             {
-                SendMessageA(hWnd, WM_INITMENU, (WPARAM)hMenu, 0L);
+                SendMessageW(hWnd, WM_INITMENU, (WPARAM)hMenu, 0L);
                 if(hSubMenu != hMenu)
                 {
                     nPos = MENU_FindSubMenu(&hMenu, hSubMenu);
                     TRACE_(accel)("hMenu = %p, hSubMenu = %p, nPos = %d\n", hMenu, hSubMenu, nPos);
-                    SendMessageA(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, FALSE));
+                    SendMessageW(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, FALSE));
                 }
                 uStat = GetMenuState(hMenu, cmd, MF_BYCOMMAND);
             }
@@ -4725,12 +4724,12 @@ static BOOL translate_accelerator( HWND 
     if( mesg==WM_COMMAND )
     {
         TRACE_(accel)(", sending WM_COMMAND, wParam=%0x\n", 0x10000 | cmd);
-        SendMessageA(hWnd, mesg, 0x10000 | cmd, 0L);
+        SendMessageW(hWnd, mesg, 0x10000 | cmd, 0L);
     }
     else if( mesg==WM_SYSCOMMAND )
     {
         TRACE_(accel)(", sending WM_SYSCOMMAND, wParam=%0x\n", cmd);
-        SendMessageA(hWnd, mesg, cmd, 0x00010000L);
+        SendMessageW(hWnd, mesg, cmd, 0x00010000L);
     }
     else
     {
diff -u cvs/hq/wine/dlls/user/controls.h wine/dlls/user/controls.h
--- cvs/hq/wine/dlls/user/controls.h	Fri Sep 12 12:52:34 2003
+++ wine/dlls/user/controls.h	Tue Nov 18 20:32:44 2003
@@ -25,7 +25,8 @@
 #include "winproc.h"
 
 /* Built-in class names (see _Undocumented_Windows_ p.418) */
-#define POPUPMENU_CLASS_ATOM MAKEINTATOMA(32768)  /* PopupMenu */
+#define POPUPMENU_CLASS_ATOMA MAKEINTATOMA(32768)  /* PopupMenu */
+#define POPUPMENU_CLASS_ATOMW MAKEINTATOMW(32768)  /* PopupMenu */
 #define DESKTOP_CLASS_ATOM   MAKEINTATOMA(32769)  /* Desktop */
 #define DIALOG_CLASS_ATOMA   MAKEINTATOMA(32770)  /* Dialog */
 #define DIALOG_CLASS_ATOMW   MAKEINTATOMW(32770)  /* Dialog */






More information about the wine-patches mailing list