changeset 102584:5cd33b0be96f

* w32term.h (WM_EMACS_PAINT): New message. * w32term.c (w32_read_socket): Use it instead of WM_PAINT. * w32fns.c (w32_wnd_proc): Change WM_PAINT to WM_EMACS_PAINT before passing to lisp thread. (Bug#950)
author Jason Rumney <jasonr@gnu.org>
date Sun, 15 Mar 2009 14:53:53 +0000
parents 26be3f6dad7b
children a61eb3b1d42c
files src/ChangeLog src/w32fns.c src/w32term.c src/w32term.h
diffstat 4 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sun Mar 15 14:52:19 2009 +0000
+++ b/src/ChangeLog	Sun Mar 15 14:53:53 2009 +0000
@@ -1,3 +1,10 @@
+2009-03-15  Jason Rumney  <jasonr@gnu.org>
+
+	* w32term.h (WM_EMACS_PAINT): New message.
+	* w32term.c (w32_read_socket): Use it instead of WM_PAINT.
+	* w32fns.c (w32_wnd_proc): Change WM_PAINT to WM_EMACS_PAINT
+	before passing to lisp thread.  (Bug#950)
+
 2009-03-14  David Reitter <david.reitter@gmail.com>
 
 	* nsterm.m (ns_shutdown_properly, -terminate): Remove global state
--- a/src/w32fns.c	Sun Mar 15 14:52:19 2009 +0000
+++ b/src/w32fns.c	Sun Mar 15 14:53:53 2009 +0000
@@ -2841,7 +2841,12 @@
             EndPaint (hwnd, &paintStruct);
             leave_crit ();
 
-            my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
+	    /* Change the message type to prevent Windows from
+	       combining WM_PAINT messages in the Lisp thread's queue,
+	       since Windows assumes that each message queue is
+	       dedicated to one frame and does not bother checking
+	       that hwnd matches before combining them.  */
+            my_post_msg (&wmsg, hwnd, WM_EMACS_PAINT, wParam, lParam);
 
             return 0;
           }
--- a/src/w32term.c	Sun Mar 15 14:52:19 2009 +0000
+++ b/src/w32term.c	Sun Mar 15 14:53:53 2009 +0000
@@ -4105,7 +4105,7 @@
 
       switch (msg.msg.message)
 	{
-	case WM_PAINT:
+	case WM_EMACS_PAINT:
 	  f = x_window_to_frame (dpyinfo, msg.msg.hwnd);
 
 	  if (f)
--- a/src/w32term.h	Sun Mar 15 14:52:19 2009 +0000
+++ b/src/w32term.h	Sun Mar 15 14:53:53 2009 +0000
@@ -609,7 +609,8 @@
 #define WM_EMACS_SHOW_CARET            (WM_EMACS_START + 17)
 #define WM_EMACS_HIDE_CARET            (WM_EMACS_START + 18)
 #define WM_EMACS_SETCURSOR             (WM_EMACS_START + 19)
-#define WM_EMACS_END                   (WM_EMACS_START + 20)
+#define WM_EMACS_PAINT                 (WM_EMACS_START + 20)
+#define WM_EMACS_END                   (WM_EMACS_START + 21)
 
 #define WND_FONTWIDTH_INDEX    (0)
 #define WND_LINEHEIGHT_INDEX   (4)