diff -cdx 'config.*' ~/src/emacs-23.1/src/w32.c /tmp/emacs-23.1/src/w32.c *** ~/src/emacs-23.1/src/w32.c Sat Aug 8 20:07:48 2009 --- /tmp/emacs-23.1/src/w32.c Sat Aug 15 03:34:21 2009 *************** *** 217,223 **** GetProcessTimes_Proc get_process_times_fn = NULL; ! #ifdef _UNICODE const char * const LookupAccountSid_Name = "LookupAccountSidW"; const char * const GetFileSecurity_Name = "GetFileSecurityW"; #else --- 217,223 ---- GetProcessTimes_Proc get_process_times_fn = NULL; ! #ifdef UNICODE const char * const LookupAccountSid_Name = "LookupAccountSidW"; const char * const GetFileSecurity_Name = "GetFileSecurityW"; #else diff -cdx 'config.*' ~/src/emacs-23.1/src/w32fns.c /tmp/emacs-23.1/src/w32fns.c *** ~/src/emacs-23.1/src/w32fns.c Sat Aug 8 20:07:48 2009 --- /tmp/emacs-23.1/src/w32fns.c Tue Aug 18 01:55:52 2009 *************** *** 3164,3169 **** --- 3164,3186 ---- TranslateMessage (&windows_msg); goto dflt; } + else + { + extern int w32_get_ime_status (HWND); + MSG ime_undo_test_msg; + + if (wParam == VK_BACK + && ctrl_modifier == w32_get_key_modifiers (wParam, lParam) + && w32_get_ime_status (hwnd) != 0 + && PeekMessage (&ime_undo_test_msg, hwnd, WM_KEYDOWN, WM_KEYDOWN, PM_NOYIELD | PM_NOREMOVE) != 0 + && ime_undo_test_msg.wParam == VK_BACK + && ime_undo_test_msg.lParam == 0x40000001 + ) + { + post_character_message (hwnd, msg, wParam, lParam, 0); + break; + } + } /* Fall through */ *************** *** 4018,4050 **** LOGFONT lf; struct frame *f; HFONT ime_font, old_font; ! f = x_window_to_frame (dpyinfo, hwnd); hdc = GetDC (hwnd); ime_font = GetCurrentObject (hdc, OBJ_FONT); GetObject (ime_font, sizeof (lf), &lf); ime_font = CreateFontIndirect (&lf); lf.lfHeight = FRAME_FONT (f)->pixel_size; lf.lfWidth = 0; lf.lfCharSet = GetTextCharset (hdc); if (FRAME_FONT (f)->props[FONT_SPACING_INDEX] == FONT_SPACING_PROPORTIONAL) lf.lfPitchAndFamily = VARIABLE_PITCH | FF_DONTCARE; else lf.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE; ! w32_set_ime_font (hwnd, &lf); w32_set_ime_conv_window (hwnd, f); ! ignore_ime_char = 1; old_font = SelectObject (hdc, ime_font); SelectObject (hdc, old_font); DeleteObject (ime_font); ReleaseDC (FRAME_W32_WINDOW (f), hdc); } goto dflt; case WM_IME_COMPOSITION: { if (lParam & GCS_RESULTSTR) --- 4035,4105 ---- LOGFONT lf; struct frame *f; HFONT ime_font, old_font; ! Lisp_Object tmp; ! int dpi; ! f = x_window_to_frame (dpyinfo, hwnd); hdc = GetDC (hwnd); ime_font = GetCurrentObject (hdc, OBJ_FONT); GetObject (ime_font, sizeof (lf), &lf); + /* ime_font = CreateFontIndirect (&lf); + */ + dpi = FRAME_W32_DISPLAY_INFO (f)->resy; + tmp = FRAME_FONT (f)->props[FONT_DPI_INDEX]; + if (INTEGERP (tmp)) + { + dpi = XINT (tmp); + } + else if (FLOATP (tmp)) + { + dpi = (int) (XFLOAT_DATA (tmp) + 0.5); + } + + /* lf.lfHeight = FRAME_FONT (f)->pixel_size; + */ + tmp = FRAME_FONT (f)->props[FONT_SIZE_INDEX]; + if (INTEGERP (tmp)) + lf.lfHeight = -1 * XINT (tmp); + else if (FLOATP (tmp)) + lf.lfHeight = (int) (-1.0 * dpi * XFLOAT_DATA (tmp) / 72.27 + 0.5); + lf.lfWidth = 0; lf.lfCharSet = GetTextCharset (hdc); + + tmp = FRAME_FONT (f)->props[FONT_FAMILY_INDEX]; + if (! NILP (tmp)) + { + lf.lfPitchAndFamily = w32_generic_family (tmp) | DEFAULT_PITCH; + if ((lf.lfPitchAndFamily & 0xF0) != FF_DONTCARE) + ; + else if (SYMBOLP (tmp)) + strncpy (lf.lfFaceName, + SDATA (ENCODE_SYSTEM (SYMBOL_NAME (tmp))), LF_FACESIZE); + } + if (FRAME_FONT (f)->props[FONT_SPACING_INDEX] == FONT_SPACING_PROPORTIONAL) lf.lfPitchAndFamily = VARIABLE_PITCH | FF_DONTCARE; else lf.lfPitchAndFamily = FIXED_PITCH | FF_DONTCARE; ! w32_set_ime_font (hwnd, &lf); w32_set_ime_conv_window (hwnd, f); ! ignore_ime_char = 1; + /* old_font = SelectObject (hdc, ime_font); SelectObject (hdc, old_font); DeleteObject (ime_font); + */ ReleaseDC (FRAME_W32_WINDOW (f), hdc); } goto dflt; + #if 0 case WM_IME_COMPOSITION: { if (lParam & GCS_RESULTSTR) *************** *** 4056,4061 **** --- 4111,4117 ---- } goto dflt; } + #endif case WM_MULE_IMM_SET_CONVERSION_WINDOW: w32_set_ime_conv_window (hwnd, (struct frame *) wParam); *************** *** 6520,6525 **** --- 6576,6582 ---- return 1; } + #if 0 static BOOL w32_get_ime_composition_string (hwnd) HWND hwnd; *************** *** 6559,6564 **** --- 6616,6622 ---- } return TRUE; } + #endif #ifdef RECONVERSION LRESULT *************** *** 6624,6630 **** *s = (WCHAR) '\0'; len = (lstrlenW (uc_code) + 1) * sizeof (WCHAR); #else ! str = Fdecode_coding_region (start, end, Vlocale_coding_system, Qt); setup_coding_system (Fcheck_coding_system (Vlocale_coding_system), &coding); coding.mode |= (CODING_MODE_SAFE_ENCODING | CODING_MODE_LAST_BLOCK); --- 6682,6688 ---- *s = (WCHAR) '\0'; len = (lstrlenW (uc_code) + 1) * sizeof (WCHAR); #else ! str = Fdecode_coding_region (make_number (start), make_number (end), Vlocale_coding_system, Qt); setup_coding_system (Fcheck_coding_system (Vlocale_coding_system), &coding); coding.mode |= (CODING_MODE_SAFE_ENCODING | CODING_MODE_LAST_BLOCK); *************** *** 6708,6714 **** memcpy ((LPSTR) reconv + sizeof (RECONVERTSTRING), uc_code, len * sizeof (WCHAR)); #else ! str = Fdecode_coding_region (start, end, Vlocale_coding_system, Qt); setup_coding_system (Fcheck_coding_system (Vlocale_coding_system), &coding); coding.mode |= (CODING_MODE_SAFE_ENCODING | CODING_MODE_LAST_BLOCK); --- 6766,6772 ---- memcpy ((LPSTR) reconv + sizeof (RECONVERTSTRING), uc_code, len * sizeof (WCHAR)); #else ! str = Fdecode_coding_region (make_number (start), make_number (end), Vlocale_coding_system, Qt); setup_coding_system (Fcheck_coding_system (Vlocale_coding_system), &coding); coding.mode |= (CODING_MODE_SAFE_ENCODING | CODING_MODE_LAST_BLOCK); *************** *** 6948,6955 **** --- 7006,7015 ---- case WM_MULE_IMM_SET_MODE: return w32_set_ime_mode (hwnd, (int) wparam, (int) lparam); + #if 0 case WM_MULE_IMM_GET_COMPOSITION_STRING: return w32_get_ime_composition_string (hwnd); + #endif default: return DefWindowProc (hwnd, message, wparam, lparam); diff -cdx 'config.*' ~/src/emacs-23.1/src/w32term.c /tmp/emacs-23.1/src/w32term.c *** ~/src/emacs-23.1/src/w32term.c Sat Aug 8 20:07:48 2009 --- /tmp/emacs-23.1/src/w32term.c Sat Aug 15 04:44:41 2009 *************** *** 4778,4783 **** --- 4778,4784 ---- } break; + #if 0 case WM_MULE_IME_REPORT: { #ifdef _UNICODE *************** *** 4824,4829 **** --- 4825,4831 ---- } } break; + #endif #endif /* USE_W32_IME */ diff -cdx 'config.*' ~/src/emacs-23.1/src/w32term.h /tmp/emacs-23.1/src/w32term.h *** ~/src/emacs-23.1/src/w32term.h Sat Aug 8 20:07:48 2009 --- /tmp/emacs-23.1/src/w32term.h Sat Aug 15 04:40:26 2009 *************** *** 646,652 **** --- 646,654 ---- /* For internal communications from window procedure to event loop. */ + #if 0 #define WM_MULE_IME_REPORT (WM_USER+2200) + #endif #define WM_MULE_IME_STATUS (WM_USER+2201) /* For internal communications *************** *** 657,664 **** #if 0 #define WM_MULE_IMM_DEAL_WITH_CONTEXT (WM_USER+2302) #define WM_MULE_IMM_SET_COMPOSITION_STRING (WM_USER+2303) - #endif #define WM_MULE_IMM_GET_COMPOSITION_STRING (WM_USER+2304) #define WM_MULE_IMM_SET_MODE (WM_USER+2305) #if 0 #define WM_MULE_IMM_NOTIFY (WM_USER+2310) --- 659,666 ---- #if 0 #define WM_MULE_IMM_DEAL_WITH_CONTEXT (WM_USER+2302) #define WM_MULE_IMM_SET_COMPOSITION_STRING (WM_USER+2303) #define WM_MULE_IMM_GET_COMPOSITION_STRING (WM_USER+2304) + #endif #define WM_MULE_IMM_SET_MODE (WM_USER+2305) #if 0 #define WM_MULE_IMM_NOTIFY (WM_USER+2310)