(last_mousemove_x, last_mousemove_y): New variables.
authorJason Rumney <jasonr@gnu.org>
Thu, 12 Dec 2002 19:56:41 +0000 (19:56 +0000)
committerJason Rumney <jasonr@gnu.org>
Thu, 12 Dec 2002 19:56:41 +0000 (19:56 +0000)
(w32_read_socket) <WM_MOUSEMOVE>: Use them to detect non-movement.
Be more careful about when help_events are generated.

src/ChangeLog
src/w32term.c

index 24970fa..ba7e2b9 100644 (file)
@@ -1,3 +1,9 @@
+2002-12-12  Jason Rumney  <jasonr@gnu.org>
+
+       * w32term.c (last_mousemove_x, last_mousemove_y): New variables.
+       (w32_read_socket) <WM_MOUSEMOVE>: Use them to detect non-movement.
+       Be more careful about when help_events are generated.
+
 2002-12-12  Steven Tamm  <steventamm@mac.com>
 
        * macterm.c (mac_check_for_quit_char): Correctly set the
index 84c9a3c..73740b2 100644 (file)
@@ -161,9 +161,11 @@ static Lisp_Object help_echo_window;
 static Lisp_Object help_echo_object;
 static int help_echo_pos;
 
-/* Temporary variable for w32_read_socket.  */
+/* Temporary variables for w32_read_socket.  */
 
 static Lisp_Object previous_help_echo;
+static int last_mousemove_x = 0;
+static int last_mousemove_y = 0;
 
 /* Non-zero means that a HELP_EVENT has been generated since Emacs
    start.  */
@@ -8766,9 +8768,17 @@ w32_read_socket (sd, bufp, numchars, expected)
          break;
 
        case WM_MOUSEMOVE:
+         /* Ignore non-movement.  */
+         {
+           int x = LOWORD (msg.msg.lParam);
+           int y = HIWORD (msg.msg.lParam);
+           if (x == last_mousemove_x && y == last_mousemove_y)
+             break;
+           last_mousemove_x = x;
+           last_mousemove_y = y;
+         }
+
           previous_help_echo = help_echo;
-          help_echo_object = help_echo_window = Qnil;
-          help_echo_pos = -1;
 
          if (dpyinfo->grabbed && last_mouse_frame
              && FRAME_LIVE_P (last_mouse_frame))
@@ -8793,11 +8803,18 @@ w32_read_socket (sd, bufp, numchars, expected)
 
           /* If the contents of the global variable help_echo
              has changed, generate a HELP_EVENT.  */
-          if (help_echo != previous_help_echo)
+          if (help_echo != previous_help_echo ||
+             (!NILP (help_echo) && !STRINGP (help_echo) && f->mouse_moved))
             {
               Lisp_Object frame;
               int n;
 
+             if (help_echo == Qnil)
+               {
+                 help_echo_object = help_echo_window = Qnil;
+                 help_echo_pos = -1;
+               }
+
               if (f)
                 XSETFRAME (frame, f);
               else