summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKarl Heuer <kwzh@gnu.org>1995-07-17 23:42:42 +0000
committerKarl Heuer <kwzh@gnu.org>1995-07-17 23:42:42 +0000
commitf32538544fea18f0afbc192487b39f4c40df08c7 (patch)
tree4aca53890c756ec83fab7f0324e75af4a9a2ecb4 /src
parent33487cc80b0d0280c5dcffec27d897f370cc037f (diff)
downloademacs-f32538544fea18f0afbc192487b39f4c40df08c7.tar.gz
(mouse_moved): Variable deleted.
(kbd_buffer_get_event, readable_events): Check mouse_moved in all frames. Check do_mouse_tracking for non-nil ness. (Ftrack_mouse): Set do_mouse_tracking to t. (kbd_buffer_get_event): Discard a selection_clear_event before processing it.
Diffstat (limited to 'src')
-rw-r--r--src/keyboard.c42
1 files changed, 25 insertions, 17 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index 9a6b7cf667d..dd9840bc1a9 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -398,20 +398,11 @@ static volatile struct input_event *kbd_store_ptr;
dequeuing functions? Such a flag could be screwed up by interrupts
at inopportune times. */
-/* If this flag is a frame, we check mouse_moved to see when the
+/* If this flag is non-nil, we check mouse_moved to see when the
mouse moves, and motion events will appear in the input stream.
Otherwise, mouse motion is ignored. */
static Lisp_Object do_mouse_tracking;
-#ifdef HAVE_MOUSE
-/* The window system handling code should set this if the mouse has
- moved since the last call to the mouse_position_hook. Calling that
- hook should clear this. Code assumes that if this is set, it can
- call mouse_position_hook to get the promised position, so don't set
- it unless you're prepared to substantiate the claim! */
-int mouse_moved;
-#endif /* HAVE_MOUSE */
-
/* Symbols to head events. */
Lisp_Object Qmouse_movement;
Lisp_Object Qscroll_bar_movement;
@@ -2273,12 +2264,29 @@ Normally, mouse motion is ignored.")
record_unwind_protect (tracking_off, do_mouse_tracking);
- XSETFRAME (do_mouse_tracking, selected_frame);
+ do_mouse_tracking = Qt;
val = Fprogn (args);
return unbind_to (count, val);
}
+/* If mouse has moved on some frame, return one of those frames.
+ Return 0 otherwise. */
+
+static FRAME_PTR
+some_mouse_moved ()
+{
+ Lisp_Object tail, frame;
+
+ FOR_EACH_FRAME (tail, frame)
+ {
+ if (XFRAME (frame)->mouse_moved)
+ return XFRAME (frame);
+ }
+
+ return 0;
+}
+
#endif /* HAVE_MOUSE */
/* Low level keyboard/mouse input.
@@ -2295,7 +2303,7 @@ readable_events ()
if (kbd_fetch_ptr != kbd_store_ptr)
return 1;
#ifdef HAVE_MOUSE
- if (FRAMEP (do_mouse_tracking) && mouse_moved)
+ if (!NILP (do_mouse_tracking) && some_mouse_moved ())
return 1;
#endif
if (single_kboard)
@@ -2480,7 +2488,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu)
if (kbd_fetch_ptr != kbd_store_ptr)
break;
#ifdef HAVE_MOUSE
- if (FRAMEP (do_mouse_tracking) && mouse_moved)
+ if (!NILP (do_mouse_tracking) && some_mouse_moved ())
break;
#endif
@@ -2502,7 +2510,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu)
if (kbd_fetch_ptr != kbd_store_ptr)
break;
#ifdef HAVE_MOUSE
- if (FRAMEP (do_mouse_tracking) && mouse_moved)
+ if (!NILP (do_mouse_tracking) && some_mouse_moved ())
break;
#endif
{
@@ -2565,8 +2573,8 @@ kbd_buffer_get_event (kbp, used_mouse_menu)
else if (event->kind == selection_clear_event)
{
#ifdef HAVE_X11
- x_handle_selection_clear (event);
kbd_fetch_ptr = event + 1;
+ x_handle_selection_clear (event);
#else
/* We're getting selection request events, but we don't have
a window system. */
@@ -2663,9 +2671,9 @@ kbd_buffer_get_event (kbp, used_mouse_menu)
}
#ifdef HAVE_MOUSE
/* Try generating a mouse motion event. */
- else if (FRAMEP (do_mouse_tracking) && mouse_moved)
+ else if (!NILP (do_mouse_tracking) && some_mouse_moved ())
{
- FRAME_PTR f = XFRAME (do_mouse_tracking);
+ FRAME_PTR f = some_mouse_moved ();
Lisp_Object bar_window;
enum scroll_bar_part part;
Lisp_Object x, y;