changeset 30711:1b27b74c2510

Include keyboard.h. (XMenuActivate): Empty no_event events from the event buffer. If no events are left after that, call clear_input_pending. (mouse_clear_clicks): New function, code moved from mouse_init. (mouse_init, XMenuActivate): Call mouse_clear_clicks to force the mouse driver to ``forget'' any past clicks.
author Eli Zaretskii <eliz@gnu.org>
date Wed, 09 Aug 2000 12:26:13 +0000
parents 17973241c0d2
children face4156ed29
files src/msdos.c
diffstat 1 files changed, 21 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/msdos.c	Wed Aug 09 12:24:57 2000 +0000
+++ b/src/msdos.c	Wed Aug 09 12:26:13 2000 +0000
@@ -61,6 +61,7 @@
 #include "buffer.h"
 #include "commands.h"
 #include "blockinput.h"
+#include "keyboard.h"
 #include <go32.h>
 #include <pc.h>
 #include <ctype.h>
@@ -309,11 +310,26 @@
   mouse_last_y = y;
 }
 
+/* Force the mouse driver to ``forget'' about any button clicks until
+   now.  */
+static void
+mouse_clear_clicks (void)
+{
+  int b;
+
+  for (b = 0; b < mouse_button_count; b++)
+    {
+      int dummy_x, dummy_y;
+
+      (void) mouse_pressed (b, &dummy_x, &dummy_y);
+      (void) mouse_released (b, &dummy_x, &dummy_y);
+    }
+}
+
 void
 mouse_init ()
 {
   union REGS regs;
-  int b;
 
   if (termscript)
     fprintf (termscript, "<M_INIT>");
@@ -325,13 +341,7 @@
      doesn't do that automatically when function 21h is called, which
      causes Emacs to ``remember'' the click that switched focus to the
      window just before Emacs was started from that window.  */
-  for (b = 0; b < mouse_button_count; b++)
-    {
-      int dummy_x, dummy_y;
-
-      (void) mouse_pressed (b, &dummy_x, &dummy_y);
-      (void) mouse_released (b, &dummy_x, &dummy_y);
-    }
+  mouse_clear_clicks ();
 
   regs.x.ax = 0x0007;
   regs.x.cx = 0;
@@ -3916,6 +3926,9 @@
      (which invoked the menu) too quickly.  If we don't remove these events,
      Emacs will process them after we return and surprise the user.  */
   discard_mouse_events ();
+  mouse_clear_clicks ();
+  if (!kbd_buffer_events_waiting (1))
+    clear_input_pending ();
   /* Allow mouse events generation by dos_rawgetc.  */
   mouse_preempted--;
   return result;