diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c index 7c58992..87075e7 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c @@ -1189,7 +1189,7 @@ void test_ToUnicode() state[VK_LCONTROL] |= 0x80; ret = ToUnicode(VK_TAB, 0x0f, state, wStr, 2, 0); - todo_wine ok(ret == 0, "ToUnicode for CTRL + Tab didn't return 0 (was %i)\n", ret); + ok(ret == 0, "ToUnicode for CTRL + Tab didn't return 0 (was %i)\n", ret); ret = ToUnicode(VK_RETURN, 0x1c, state, wStr, 2, 0); ok(ret == 1, "ToUnicode for CTRL + Return didn't return 1 (was %i)", ret); @@ -1199,7 +1199,7 @@ void test_ToUnicode() state[VK_SHIFT] |= 0x80; state[VK_LSHIFT] |= 0x80; ret = ToUnicode(VK_RETURN, 0x1c, state, wStr, 2, 0); - todo_wine ok(ret == 0, "ToUnicode for CTRL + SHIFT + Return didn't return 0 (was %i)\n", ret); + ok(ret == 0, "ToUnicode for CTRL + SHIFT + Return didn't return 0 (was %i)\n", ret); } START_TEST(input) diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c index bf399c9..738de57 100644 --- a/dlls/winex11.drv/keyboard.c +++ b/dlls/winex11.drv/keyboard.c @@ -2614,11 +2614,12 @@ INT X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, LPBYTE lpKeyState, } /* more areas where X returns characters but Windows does not - CTRL + number or CTRL + symbol */ + CTRL + number, CTRL + symbol and CTRL + tab */ if (e.state & ControlMask) { if (((keysym>=33) && (keysym < 'A')) || - ((keysym > 'Z') && (keysym < 'a'))) + ((keysym > 'Z') && (keysym < 'a')) || + (keysym == XK_Tab)) { lpChar[0] = 0; ret = 0; @@ -2641,8 +2642,16 @@ INT X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, LPBYTE lpKeyState, else if((lpKeyState[VK_CONTROL] & 0x80) /* Control is pressed */ && (keysym == XK_Return || keysym == XK_KP_Enter)) { - lpChar[0] = '\n'; - ret = 1; + if(lpKeyState[VK_SHIFT] & 0x80) /* Shift is pressed */ + { + lpChar[0] = 0; + ret = 0; + } + else + { + lpChar[0] = '\n'; + ret = 1; + } } /* Hack to detect an XLookupString hard-coded to Latin1 */ -- 1.5.6.4