Mercurial > emacs
changeset 10677:f614ba745b6a
(internal_last_event_frame, Vlast_event_frame): Deleted; now part of
perdisplay. All uses changed.
(MOUSE_ACTIVITY_AVAILABLE) Deleted.
(find_active_event_queue): New arg check_mouse. All callers changed.
(Vlast_event_frame): Change from DEFVAR_LISP to DEFVAR_DISPLAY.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Tue, 07 Feb 1995 02:07:03 +0000 |
parents | 12ce96dd2afb |
children | ec2e8c77551c |
files | src/keyboard.c |
diffstat | 1 files changed, 49 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/src/keyboard.c Tue Feb 07 01:06:49 1995 +0000 +++ b/src/keyboard.c Tue Feb 07 02:07:03 1995 +0000 @@ -259,20 +259,6 @@ /* The buffer that was current when the last command was started. */ Lisp_Object last_point_position_buffer; -#ifdef MULTI_FRAME -/* The frame in which the last input event occurred, or Qmacro if the - last event came from a macro. We use this to determine when to - generate switch-frame events. This may be cleared by functions - like Fselect_frame, to make sure that a switch-frame event is - generated by the next character. */ -Lisp_Object internal_last_event_frame; -#endif - -/* A user-visible version of the above, intended to allow users to - figure out where the last event came from, if the event doesn't - carry that information itself (i.e. if it was a character). */ -Lisp_Object Vlast_event_frame; - /* The timestamp of the last input event we received from the X server. X Windows wants this for selection ownership. */ unsigned long last_event_timestamp; @@ -344,10 +330,6 @@ 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; - -#define MOUSE_ACTIVITY_AVAILABLE (FRAMEP (do_mouse_tracking) && mouse_moved) -#else /* Not HAVE_MOUSE. */ -#define MOUSE_ACTIVITY_AVAILABLE 0 #endif /* HAVE_MOUSE. */ /* Symbols to head events. */ @@ -1489,7 +1471,10 @@ internal_last_event_frame after each command is read, but events read from a macro should never cause a new frame to be selected. */ - Vlast_event_frame = internal_last_event_frame = Qmacro; + if (!current_perdisplay) + abort (); + current_perdisplay->internal_last_event_frame = Qmacro; + current_perdisplay->Vlast_event_frame = Qmacro; #endif /* Exit the macro if we are at the end. @@ -1540,8 +1525,10 @@ { XSETINT (c, quit_char); #ifdef MULTI_FRAME - XSETFRAME (internal_last_event_frame, selected_frame); - Vlast_event_frame = internal_last_event_frame; + XSETFRAME (current_perdisplay->internal_last_event_frame, + selected_frame); + current_perdisplay->Vlast_event_frame + = current_perdisplay->internal_last_event_frame; #endif /* If we report the quit char as an event, don't do so more than once. */ @@ -1953,7 +1940,8 @@ *mouse_position_hook provides the mouse position. */ static PERDISPLAY * -find_active_event_queue () +find_active_event_queue (check_mouse) + int check_mouse; { PERDISPLAY *perd; @@ -1961,6 +1949,10 @@ { if (perd->kbd_fetch_ptr != perd->kbd_store_ptr) return perd; +#ifdef HAVE_MOUSE + if (check_mouse && FRAMEP (do_mouse_tracking) && mouse_moved) + return perd; +#endif } return 0; } @@ -1970,7 +1962,7 @@ static int readable_events () { - return find_active_event_queue () != NULL || MOUSE_ACTIVITY_AVAILABLE; + return find_active_event_queue (1) != NULL; } /* Set this for debugging, to have a way to get out */ @@ -2012,10 +2004,10 @@ focus = FRAME_FOCUS_FRAME (XFRAME (event->frame_or_window)); if (NILP (focus)) - internal_last_event_frame = event->frame_or_window; + perd->internal_last_event_frame = event->frame_or_window; else - internal_last_event_frame = focus; - Vlast_event_frame = internal_last_event_frame; + perd->internal_last_event_frame = focus; + perd->Vlast_event_frame = perd->internal_last_event_frame; } #endif @@ -2090,8 +2082,8 @@ /* Wait until there is input available. */ for (;;) { - perd = find_active_event_queue (); - if (perd || MOUSE_ACTIVITY_AVAILABLE) + perd = find_active_event_queue (1); + if (perd) break; /* If the quit flag is set, then read_char will return @@ -2109,15 +2101,15 @@ #ifdef SIGIO gobble_input (0); #endif /* SIGIO */ - perd = find_active_event_queue (); - if (!(perd || MOUSE_ACTIVITY_AVAILABLE)) + perd = find_active_event_queue (1); + if (!perd) { Lisp_Object minus_one; XSETINT (minus_one, -1); wait_reading_process_input (0, 0, minus_one, 1); - if (!interrupt_input && find_active_event_queue () == NULL) + if (!interrupt_input && find_active_event_queue (0) == NULL) /* Pass 1 for EXPECT since we just waited to have input. */ read_avail_input (1); } @@ -2127,7 +2119,7 @@ /* At this point, we know that there is a readable event available somewhere. If the event queue is empty, then there must be a mouse movement enabled and available. */ - if (perd) + if (perd->kbd_fetch_ptr != perd->kbd_store_ptr) { struct input_event *event; @@ -2226,10 +2218,10 @@ if (! NILP (focus)) frame = focus; - if (! EQ (frame, internal_last_event_frame) + if (! EQ (frame, perd->internal_last_event_frame) && XFRAME (frame) != selected_frame) obj = make_lispy_switch_frame (frame); - internal_last_event_frame = frame; + perd->internal_last_event_frame = frame; #endif /* MULTI_FRAME */ /* If we didn't decide to make a switch-frame event, go ahead @@ -2277,10 +2269,10 @@ if (NILP (frame)) XSETFRAME (frame, f); - if (! EQ (frame, internal_last_event_frame) + if (! EQ (frame, perd->internal_last_event_frame) && XFRAME (frame) != selected_frame) obj = make_lispy_switch_frame (frame); - internal_last_event_frame = frame; + perd->internal_last_event_frame = frame; } #endif @@ -2298,7 +2290,7 @@ input_pending = readable_events (); #ifdef MULTI_FRAME - Vlast_event_frame = internal_last_event_frame; + perd->Vlast_event_frame = perd->internal_last_event_frame; #endif return (obj); @@ -2311,7 +2303,7 @@ swallow_events () { PERDISPLAY *perd; - while ((perd = find_active_event_queue ()) != NULL) + while ((perd = find_active_event_queue (0)) != NULL) { struct input_event *event; @@ -5938,9 +5930,15 @@ abort (); #endif #ifdef MULTI_FRAME - if (FRAMEP (internal_last_event_frame) - && XFRAME (internal_last_event_frame) != selected_frame) - Fhandle_switch_frame (make_lispy_switch_frame (internal_last_event_frame)); + { + Lisp_Object frame; + + if (!current_perdisplay) + abort (); + frame = current_perdisplay->internal_last_event_frame; + if (FRAMEP (frame) && XFRAME (frame) != selected_frame) + Fhandle_switch_frame (make_lispy_switch_frame (frame)); + } #endif _longjmp (getcjmp, 1); @@ -6047,6 +6045,12 @@ perd->kbd_store_ptr = perd->kbd_buffer; perd->kbd_buffer_frame_or_window = Fmake_vector (make_number (KBD_BUFFER_SIZE), Qnil); +#ifdef MULTI_FRAME + /* This means that command_loop_1 won't try to select anything the first + time through. */ + perd->internal_last_event_frame = Qnil; +#endif + perd->Vlast_event_frame = Qnil; } /* @@ -6076,13 +6080,6 @@ #endif input_pending = 0; -#ifdef MULTI_FRAME - /* This means that command_loop_1 won't try to select anything the first - time through. */ - internal_last_event_frame = Qnil; - Vlast_event_frame = internal_last_event_frame; -#endif - #ifndef MULTI_PERDISPLAY if (initialized) wipe_perdisplay (&the_only_perdisplay); @@ -6380,11 +6377,6 @@ "Number of complete keys read from the keyboard so far."); num_input_keys = 0; - DEFVAR_LISP ("last-event-frame", &Vlast_event_frame, - "The frame in which the most recently read event occurred.\n\ -If the last event came from a keyboard macro, this is set to `macro'."); - Vlast_event_frame = Qnil; - DEFVAR_LISP ("help-char", &Vhelp_char, "Character to recognize as meaning Help.\n\ When it is read, do `(eval help-form)', and display result if it's a string.\n\ @@ -6543,6 +6535,10 @@ or a list whose car is a number for just one or more C-U's\n\ or nil if no argument has been specified.\n\ This is what `(interactive \"P\")' returns."); + + DEFVAR_DISPLAY ("last-event-frame", Vlast_event_frame, + "The frame in which the most recently read event occurred.\n\ +If the last event came from a keyboard macro, this is set to `macro'."); } keys_of_keyboard ()