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

[MD:2988] Meadow 1.99a1 - Access violation.



とりあえず(自分がやったことに関しては)何がおきているのかはわかり
ました.

 自分に投げたメッセージ(WM_MULE_IMM...CONVERSION_WINDOW)を
mw32WndProc が拾う前に自分で拾って捨ててしまっていました;_;

 そのせいで本当に待っているメッセージがこなくて固まっていました.

# この辺りの処理ではWindowsのメッセージの仕組みを使うのをやめたほ
# うが平和じゃないでしょうか. いらないメッセージを捨てるときにま
# ずいものを捨ててる可能性も出てくるし...

>  同じ(Windowsの)ウインドウに対して多重にこのPostMessageをやると固
> まるようなんですが, どうやってそれを防ぐかは私にはもっとちゃんと

 自分自身のアクティブウィンドウにメッセージを投げそうになったとき
は直接関数を呼び出すようにしてみたらとりあえず動いています.

 今までの修正は全部破棄して, これを当ててみたらどうなるか試してみ
てもらえないでしょうか.

Index: mw32term.c
===================================================================
RCS file: /usr/local/Meadow/cvsroot/Meadow/src/mw32term.c,v
retrieving revision 1.29
diff -u -r1.29 mw32term.c
--- mw32term.c	2002/02/20 16:18:24	1.29
+++ mw32term.c	2002/02/26 06:54:38
@@ -9187,12 +9187,25 @@
       && (XWINDOW (selected_window) == w)
       && (FRAME_MW32_DISPLAY_INFO (f)->mw32_highlight_frame == f))
     {
-      /* 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));
+      if(GetActiveWindow() != FRAME_MW32_WINDOW (f))
+	{
+	  MSG msg;
+	  
+	  /* 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));
+	  WAIT_REPLY_MESSAGE (&msg, WM_MULE_IMM_SET_CONVERSION_WINDOW_REPLY);
+	}
+      else
+	{
+	  mw32_set_ime_conv_window(FRAME_MW32_WINDOW (f), 
+				   WINDOW_TEXT_TO_FRAME_PIXEL_X (w, x),
+				   WINDOW_TO_FRAME_PIXEL_Y (w, y));
+	}		       
     }
+
 #endif
 }
 
-- 
ほりぐちきょうたろう