diff --git a/controls/edit.c b/controls/edit.c index 621c70471fa..7ce698b24ec 100644 --- a/controls/edit.c +++ b/controls/edit.c @@ -744,10 +744,20 @@ static LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, */ case WM_GETDLGCODE: - result = DLGC_HASSETSEL | DLGC_WANTCHARS | DLGC_WANTARROWS - | DLGC_WANTMESSAGE; - /* Windows BUG! Windows always returns DLGC_WANTMESSAGE flag without additional checks. */ - break; + result = DLGC_HASSETSEL | DLGC_WANTCHARS | DLGC_WANTARROWS; + if( es->hwndListBox ) + { + if (lParam && (((LPMSG)lParam)->message == WM_KEYDOWN)) + { + int vk = (int)((LPMSG)lParam)->wParam; + if( vk == VK_RETURN || vk == VK_ESCAPE) + if( SendMessageW(GetParent(hwnd), CB_GETDROPPEDSTATE, 0, 0)) + result |= DLGC_WANTMESSAGE; + } + } else + /* It seems in all other cases Windows has this set: */ + result |= DLGC_WANTMESSAGE; + break; case WM_IME_CHAR: if (!unicode)