Reverse part of RDB's pedantic patch from rev 1.129 [r1105]: app
[sgt/putty] / window.c
index 52af23e..1b61b6c 100644 (file)
--- a/window.c
+++ b/window.c
@@ -633,15 +633,15 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
     set_input_locale(GetKeyboardLayout(0));
 
     /*
-     * Finally show the window!
+     * Open the initial log file if there is one.
      */
-    ShowWindow(hwnd, show);
-    SetForegroundWindow(hwnd);
+    logfopen();
 
     /*
-     * Open the initial log file if there is one.
+     * Finally show the window!
      */
-    logfopen();
+    ShowWindow(hwnd, show);
+    SetForegroundWindow(hwnd);
 
     /*
      * Set the palette up.
@@ -2384,7 +2384,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            HIMC hIMC;
            int n;
            char *buff;
-   
+
            if(osVersion.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS || 
                osVersion.dwPlatformId == VER_PLATFORM_WIN32s) break; /* no Unicode */
 
@@ -2395,9 +2395,17 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            n = ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, NULL, 0);
 
            if (n > 0) {
+               int i;
                buff = (char*) smalloc(n);
                ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, buff, n);
-               luni_send((unsigned short *)buff, n / 2, 1);
+               /*
+                * Jaeyoun Chung reports that Korean character
+                * input doesn't work correctly if we do a single
+                * luni_send() covering the whole of buff. So
+                * instead we luni_send the characters one by one.
+                */
+               for (i = 0; i < n; i += 2)
+                   luni_send((unsigned short *)(buff+i), 1, 1);
                free(buff);
            }
            ImmReleaseContext(hwnd, hIMC);
@@ -3496,11 +3504,24 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam,
                    p += sprintf((char *) p, "\x1B%c", xkey);
                else {
                    int app_flg = (app_cursor_keys && !cfg.no_applic_c);
-                   /* VT100 & VT102 manuals both state the app cursor keys
-                    * only work if the app keypad is on.
+#if 0
+                   /*
+                    * RDB: VT100 & VT102 manuals both state the
+                    * app cursor keys only work if the app keypad
+                    * is on.
+                    * 
+                    * SGT: That may well be true, but xterm
+                    * disagrees and so does at least one
+                    * application, so I've #if'ed this out and the
+                    * behaviour is back to PuTTY's original: app
+                    * cursor and app keypad are independently
+                    * switchable modes. If anyone complains about
+                    * _this_ I'll have to put in a configurable
+                    * option.
                     */
                    if (!app_keypad_keys)
                        app_flg = 0;
+#endif
                    /* Useful mapping of Ctrl-arrows */
                    if (shift_state == 2)
                        app_flg = !app_flg;