[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:6542] IME Window 領域の指定
- X-ml-count: 6542
- Subject: [MD:6542] IME Window 領域の指定
- From: KOBAYASHI Yasuhiro <kobayays@xxxxxxxxxxxxxx>
- Date: Thu, 12 May 2005 09:14:18 +0900
- User-agent: Gnus/5.110004 (No Gnus v0.4) Emacs/22.0.50 (windows-nt)
こばやしです.
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>