summaryrefslogtreecommitdiffstats
path: root/win
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2016-09-27 10:08:02 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2016-09-27 10:08:02 (GMT)
commit94ca8fddecf8a8e3b0e446e9d71eaf77bda8f1e6 (patch)
tree0d9541fd8369d4716b0cc2beb3deefdf7a0f24b0 /win
parent1119e63470fa87743572b452320e7d583e5faf19 (diff)
parent8480a73fc23b0812d1681db23c634c3555e8d263 (diff)
downloadtk-94ca8fddecf8a8e3b0e446e9d71eaf77bda8f1e6.zip
tk-94ca8fddecf8a8e3b0e446e9d71eaf77bda8f1e6.tar.gz
tk-94ca8fddecf8a8e3b0e446e9d71eaf77bda8f1e6.tar.bz2
Fix [720879afe9] - WM_CHAR message handling. Patch from Christian Werner backported from http://www.androwish.org/index.html/info/a0da5845594cec28
Diffstat (limited to 'win')
-rw-r--r--win/tkWinX.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/win/tkWinX.c b/win/tkWinX.c
index 6be54e2..cbb84cf 100644
--- a/win/tkWinX.c
+++ b/win/tkWinX.c
@@ -92,7 +92,7 @@ static Tcl_ThreadDataKey dataKey;
static void GenerateXEvent(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam);
static unsigned int GetState(UINT message, WPARAM wParam, LPARAM lParam);
-static void GetTranslatedKey(XKeyEvent *xkey);
+static void GetTranslatedKey(XKeyEvent *xkey, UINT type);
static void UpdateInputLanguage(int charset);
static int HandleIMEComposition(HWND hwnd, LPARAM lParam);
@@ -1157,7 +1157,8 @@ GenerateXEvent(
event.type = KeyPress;
event.xany.send_event = -1;
event.xkey.keycode = wParam;
- GetTranslatedKey(&event.xkey);
+ GetTranslatedKey(&event.xkey, (message == WM_KEYDOWN) ? WM_CHAR :
+ WM_SYSCHAR);
break;
case WM_SYSKEYUP:
@@ -1229,9 +1230,10 @@ GenerateXEvent(
if (IsDBCSLeadByte((BYTE) wParam)) {
MSG msg;
- if ((PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) != 0)
+ if ((PeekMessage(&msg, NULL, WM_CHAR, WM_CHAR,
+ PM_NOREMOVE) != 0)
&& (msg.message == WM_CHAR)) {
- GetMessage(&msg, NULL, 0, 0);
+ GetMessage(&msg, NULL, WM_CHAR, WM_CHAR);
event.xkey.nbytes = 2;
event.xkey.trans_chars[1] = (char) msg.wParam;
}
@@ -1370,19 +1372,20 @@ GetState(
static void
GetTranslatedKey(
- XKeyEvent *xkey)
+ XKeyEvent *xkey,
+ UINT type)
{
MSG msg;
xkey->nbytes = 0;
while ((xkey->nbytes < XMaxTransChars)
- && PeekMessageA(&msg, NULL, 0, 0, PM_NOREMOVE)) {
- if ((msg.message != WM_CHAR) && (msg.message != WM_SYSCHAR)) {
+ && (PeekMessageA(&msg, NULL, type, type, PM_NOREMOVE) != 0)) {
+ if (msg.message != type) {
break;
}
- GetMessageA(&msg, NULL, 0, 0);
+ GetMessageA(&msg, NULL, type, type);
/*
* If this is a normal character message, we may need to strip off the