1
0
Fork 0

(svn r9728) -Fix r9086: [win32] For some keyboard layout the 'console' key is a dead-key. It needs to be pressed twice to have an effect but the console is then opened and closed on the 'same' keypress (2 WM_CHAR events). So skip the first WM_CHAR generated to restore the 'console' key functionality.

release/0.6
glx 2007-04-27 21:27:02 +00:00
parent b02623901a
commit 75ba8f4489
1 changed files with 12 additions and 0 deletions

View File

@ -212,6 +212,7 @@ static void CALLBACK TrackMouseTimerProc(HWND hwnd, UINT msg, UINT event, DWORD
static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
static uint32 keycode = 0; static uint32 keycode = 0;
static bool console = false;
switch (msg) { switch (msg) {
case WM_CREATE: case WM_CREATE:
@ -363,12 +364,23 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
} }
#endif /* UNICODE */ #endif /* UNICODE */
case WM_DEADCHAR:
console = GB(lParam, 16, 8) == 41;
return 0;
case WM_CHAR: { case WM_CHAR: {
/* Silently drop all non-text messages as those were handled by WM_KEYDOWN */ /* Silently drop all non-text messages as those were handled by WM_KEYDOWN */
if (wParam < VK_SPACE) return 0; if (wParam < VK_SPACE) return 0;
uint scancode = GB(lParam, 16, 8); uint scancode = GB(lParam, 16, 8);
uint charcode = wParam; uint charcode = wParam;
/* If the console key is a dead-key, we need to press it twice to get a WM_CHAR message.
* But we then get two WM_CHAR messages, so ignore the first one */
if (console && scancode == 41) {
console = false;
return 0;
}
#if !defined(UNICODE) #if !defined(UNICODE)
wchar_t w; wchar_t w;
int len = MultiByteToWideChar(_codepage, 0, (char*)&charcode, 1, &w, 1); int len = MultiByteToWideChar(_codepage, 0, (char*)&charcode, 1, &w, 1);