# HG changeset patch # User Eli Zaretskii # Date 965823973 0 # Node ID 1b27b74c25104809f6c8b64bf207a29f5d51c00d # Parent 17973241c0d24b24946cc269fdac0fe8c56e6139 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. diff -r 17973241c0d2 -r 1b27b74c2510 src/msdos.c --- 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 #include #include @@ -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, ""); @@ -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;