diff --git a/windows/dialog.c b/windows/dialog.c index 7af5da4d225..841c449fc49 100644 --- a/windows/dialog.c +++ b/windows/dialog.c @@ -22,9 +22,7 @@ #include "drive.h" #include "heap.h" #include "win.h" -#include "ldt.h" #include "user.h" -#include "winproc.h" #include "message.h" #include "queue.h" #include "debugtools.h" @@ -1267,6 +1265,9 @@ static BOOL DIALOG_IsAccelerator( HWND hwnd, HWND hwndDlg, WPARAM vKey ) { /* find the accelerator key */ LPWSTR p = wndPtr->text - 2; + char a_char = vKey; + WCHAR w_char = 0; + do { p = strchrW( p + 2, '&' ); @@ -1274,8 +1275,8 @@ static BOOL DIALOG_IsAccelerator( HWND hwnd, HWND hwndDlg, WPARAM vKey ) while (p != NULL && p[1] == '&'); /* and check if it's the one we're looking for */ - /* FIXME: convert vKey to unicode */ - if (p != NULL && toupperW( p[1] ) == (WCHAR)toupper( vKey ) ) + MultiByteToWideChar(CP_ACP, 0, &a_char, 1, &w_char, 1); + if (p != NULL && toupperW( p[1] ) == toupperW( w_char ) ) { if ((dlgCode & DLGC_STATIC) || (wndPtr->dwStyle & 0x0f) == BS_GROUPBOX ) @@ -1385,6 +1386,7 @@ static BOOL DIALOG_IsDialogMessage( HWND hwnd, HWND hwndDlg, /* Only the key messages get special processing */ if ((message != WM_KEYDOWN) && + (message != WM_SYSKEYDOWN) && (message != WM_SYSCHAR) && (message != WM_CHAR)) return FALSE; @@ -1462,6 +1464,10 @@ static BOOL DIALOG_IsDialogMessage( HWND hwnd, HWND hwndDlg, return TRUE; } break; + + case WM_SYSKEYDOWN: + *translate = TRUE; + break; } /* If we get here, the message has not been treated specially */ @@ -1484,7 +1490,6 @@ BOOL16 WINAPI WIN16_IsDialogMessage16( HWND16 hwndDlg, SEGPTR msg16 ) return FALSE; if ((msg->message == WM_KEYDOWN) || - (msg->message == WM_SYSCHAR) || (msg->message == WM_CHAR)) { dlgCode = SendMessage16( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg16); @@ -1521,7 +1526,6 @@ BOOL WINAPI IsDialogMessageA( HWND hwndDlg, LPMSG msg ) return FALSE; if ((msg->message == WM_KEYDOWN) || - (msg->message == WM_SYSCHAR) || (msg->message == WM_CHAR)) { dlgCode = SendMessageA( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg); @@ -1547,7 +1551,6 @@ BOOL WINAPI IsDialogMessageW( HWND hwndDlg, LPMSG msg ) return FALSE; if ((msg->message == WM_KEYDOWN) || - (msg->message == WM_SYSCHAR) || (msg->message == WM_CHAR)) { dlgCode = SendMessageW( msg->hwnd, WM_GETDLGCODE, 0, (LPARAM)msg); @@ -2419,6 +2422,11 @@ BOOL WINAPI DlgDirSelectComboBoxExW( HWND hwnd, LPWSTR str, INT len, INT16 WINAPI DlgDirList16( HWND16 hDlg, LPSTR spec, INT16 idLBox, INT16 idStatic, UINT16 attrib ) { + /* according to Win16 docs, DDL_DRIVES should make DDL_EXCLUSIVE + * be set automatically (this is different in Win32, and + * DIALOG_DlgDirList sends Win32 messages to the control, + * so do it here) */ + if (attrib & DDL_DRIVES) attrib |= DDL_EXCLUSIVE; return DIALOG_DlgDirList( hDlg, spec, idLBox, idStatic, attrib, FALSE ); }