mirror of https://github.com/OpenTTD/OpenTTD
(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.
parent
b02623901a
commit
75ba8f4489
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue