[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:6542] IME Window 領域の指定



こばやしです.

NTEmacs-IME PatchでIME入力ウィンドウが,Fringeやスクロールバー
に重なったり,FRAME分割している時に他のWINDOWに重なったりして
いたのを,入力中のWINDOW領域内に収まるように変更しましたので,
Meadowにも適用してみました.

http://homepage3.nifty.com/y3tk/images/ime_window1.png
のような状態であったのを
http://homepage3.nifty.com/y3tk/images/ime_window2.png
のようにしました.

2005-05-12  KOBAYASHI Yasuhiro  <kobayays@xxxxxxxxxxxxxx>

	* mw32term.h (mw32_set_ime_conv_window): Change prototype.

	* mw32term.c (mw32_draw_window_cursor): Change arguments of
	function PostMessage().

	* mw32fns.c (mw32_WndProc) [WM_IME_STARTCOMPOSITION,
	WM_MULE_IMM_SET_CONVERSION_WINDOW]: Change arguments of function
	mw32_set_ime_conv_window().

	* mw32ime.c (mw32_set_ime_conv_window): Change arguments. Set the
	IME window rectangle area.

#ちょっとmixiに興味があるので,誰か招待してくれませんでしょうか?


--- mw32ime.c.orig	2005-05-11 23:11:48.000000000 +0900
+++ mw32ime.c	2005-05-12 08:42:10.000000000 +0900
@@ -153,7 +153,7 @@
 int IME_event_off_count;
 
 void
-mw32_set_ime_conv_window (HWND hwnd, int x, int y)
+mw32_set_ime_conv_window (HWND hwnd, struct window *w)
 {
   if (fIME && !NILP (Vime_control))
     {
@@ -161,9 +161,15 @@
       COMPOSITIONFORM compform;
 
       IMEhwnd = (ImmGetDefaultIMEWndProc) (hwnd);
-      compform.dwStyle = CFS_FORCE_POSITION; /* CFS_POINT; */
-      compform.ptCurrentPos.x = x;
-      compform.ptCurrentPos.y = y;
+      compform.dwStyle = CFS_RECT;
+      compform.ptCurrentPos.x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x);
+      compform.ptCurrentPos.y = WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y);
+      compform.rcArea.left = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, 0);
+      compform.rcArea.top = WINDOW_TO_FRAME_PIXEL_Y (w, WINDOW_TOP_EDGE_Y (w));
+      compform.rcArea.right = (WINDOW_BOX_RIGHT_EDGE_X (w)
+			       - WINDOW_RIGHT_FRINGE_WIDTH (w)
+			       - WINDOW_RIGHT_MARGIN_WIDTH (w));
+      compform.rcArea.bottom = WINDOW_TO_FRAME_PIXEL_Y (w, WINDOW_BOTTOM_EDGE_Y (w));
 
       SendMessage (IMEhwnd, WM_IME_CONTROL, (WPARAM) IMC_SETCOMPOSITIONWINDOW,
 		   (LPARAM) (&compform));
@@ -365,9 +371,7 @@
       {
 	/* Set the position of candidate list dialog. */
 	struct window *w = XWINDOW (f->selected_window);
-	mw32_set_ime_conv_window (hwnd,
-				  WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x),
-				  WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y));
+	mw32_set_ime_conv_window (hwnd, w);
       }
       /* Delete the selected area. */
       Fdelete_region (start, end);
--- mw32term.c.orig	2005-05-11 23:11:48.000000000 +0900
+++ mw32term.c	2005-05-12 08:40:08.000000000 +0900
@@ -5016,8 +5016,7 @@
       /* Maybe, we're in critsec, so use POST_INFORM_MESSAGE.  */
       PostMessage (FRAME_MW32_WINDOW (f),
 		   WM_MULE_IMM_SET_CONVERSION_WINDOW,
-		   (WPARAM) WINDOW_TEXT_TO_FRAME_PIXEL_X (w, x),
-		   (LPARAM) WINDOW_TO_FRAME_PIXEL_Y (w, y));
+		   (WPARAM) w, 0);
     }
 #endif
 }
--- mw32term.h.orig	2005-05-11 23:11:48.000000000 +0900
+++ mw32term.h	2005-05-12 08:40:12.000000000 +0900
@@ -1110,7 +1110,7 @@
   Defined in mw32ime.c
 ***********************/
 extern void mw32_ime_control_init P_ ((void));
-extern void mw32_set_ime_conv_window P_ ((HWND hwnd, int x, int y));
+extern void mw32_set_ime_conv_window P_ ((HWND, struct window *));
 
 /***********************************
   TODO!!!
--- mw32fns.c.orig	2005-05-11 23:11:54.000000000 +0900
+++ mw32fns.c	2005-05-12 08:40:06.000000000 +0900
@@ -2531,9 +2531,7 @@
   case WM_IME_STARTCOMPOSITION:
     {
       struct window *w = XWINDOW (f->selected_window);
-      mw32_set_ime_conv_window (hwnd,
-				WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x),
-				WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y));
+      mw32_set_ime_conv_window (hwnd, w);
       f->output_data.mw32->ime_composition_state = 1;
       POST_THREAD_INFORM_MESSAGE (main_thread_id, WM_EMACS_GET_IME_FONT_PROP,
       				  (WPARAM) f, (LPARAM) 0);
@@ -2613,7 +2611,7 @@
 				(WPARAM) 0, (LPARAM) 0);
     break;
   case WM_MULE_IMM_SET_CONVERSION_WINDOW:
-    mw32_set_ime_conv_window (hwnd, (int) wParam, (int) lParam);
+    mw32_set_ime_conv_window (hwnd, (struct window *) wParam);
     break;
 #endif /* not MEADOW and IME_CONTROL */

-- 
KOBAYASHI Yasuhiro <kobayays@xxxxxxxxxxxxxx>