(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.
This commit is contained in:
parent
4299da2a85
commit
40f239ee68
1 changed files with 49 additions and 53 deletions
102
src/keyboard.c
102
src/keyboard.c
|
@ -259,20 +259,6 @@ int last_point_position;
|
||||||
/* The buffer that was current when the last command was started. */
|
/* The buffer that was current when the last command was started. */
|
||||||
Lisp_Object last_point_position_buffer;
|
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.
|
/* The timestamp of the last input event we received from the X server.
|
||||||
X Windows wants this for selection ownership. */
|
X Windows wants this for selection ownership. */
|
||||||
unsigned long last_event_timestamp;
|
unsigned long last_event_timestamp;
|
||||||
|
@ -344,10 +330,6 @@ static Lisp_Object do_mouse_tracking;
|
||||||
call mouse_position_hook to get the promised position, so don't set
|
call mouse_position_hook to get the promised position, so don't set
|
||||||
it unless you're prepared to substantiate the claim! */
|
it unless you're prepared to substantiate the claim! */
|
||||||
int mouse_moved;
|
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. */
|
#endif /* HAVE_MOUSE. */
|
||||||
|
|
||||||
/* Symbols to head events. */
|
/* Symbols to head events. */
|
||||||
|
@ -1489,7 +1471,10 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu)
|
||||||
internal_last_event_frame after each command is read, but
|
internal_last_event_frame after each command is read, but
|
||||||
events read from a macro should never cause a new frame to be
|
events read from a macro should never cause a new frame to be
|
||||||
selected. */
|
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
|
#endif
|
||||||
|
|
||||||
/* Exit the macro if we are at the end.
|
/* Exit the macro if we are at the end.
|
||||||
|
@ -1540,8 +1525,10 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu)
|
||||||
{
|
{
|
||||||
XSETINT (c, quit_char);
|
XSETINT (c, quit_char);
|
||||||
#ifdef MULTI_FRAME
|
#ifdef MULTI_FRAME
|
||||||
XSETFRAME (internal_last_event_frame, selected_frame);
|
XSETFRAME (current_perdisplay->internal_last_event_frame,
|
||||||
Vlast_event_frame = internal_last_event_frame;
|
selected_frame);
|
||||||
|
current_perdisplay->Vlast_event_frame
|
||||||
|
= current_perdisplay->internal_last_event_frame;
|
||||||
#endif
|
#endif
|
||||||
/* If we report the quit char as an event,
|
/* If we report the quit char as an event,
|
||||||
don't do so more than once. */
|
don't do so more than once. */
|
||||||
|
@ -1953,7 +1940,8 @@ Normally, mouse motion is ignored.")
|
||||||
*mouse_position_hook provides the mouse position. */
|
*mouse_position_hook provides the mouse position. */
|
||||||
|
|
||||||
static PERDISPLAY *
|
static PERDISPLAY *
|
||||||
find_active_event_queue ()
|
find_active_event_queue (check_mouse)
|
||||||
|
int check_mouse;
|
||||||
{
|
{
|
||||||
PERDISPLAY *perd;
|
PERDISPLAY *perd;
|
||||||
|
|
||||||
|
@ -1961,6 +1949,10 @@ find_active_event_queue ()
|
||||||
{
|
{
|
||||||
if (perd->kbd_fetch_ptr != perd->kbd_store_ptr)
|
if (perd->kbd_fetch_ptr != perd->kbd_store_ptr)
|
||||||
return perd;
|
return perd;
|
||||||
|
#ifdef HAVE_MOUSE
|
||||||
|
if (check_mouse && FRAMEP (do_mouse_tracking) && mouse_moved)
|
||||||
|
return perd;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1970,7 +1962,7 @@ find_active_event_queue ()
|
||||||
static int
|
static int
|
||||||
readable_events ()
|
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 */
|
/* Set this for debugging, to have a way to get out */
|
||||||
|
@ -2012,10 +2004,10 @@ kbd_buffer_store_event (event)
|
||||||
|
|
||||||
focus = FRAME_FOCUS_FRAME (XFRAME (event->frame_or_window));
|
focus = FRAME_FOCUS_FRAME (XFRAME (event->frame_or_window));
|
||||||
if (NILP (focus))
|
if (NILP (focus))
|
||||||
internal_last_event_frame = event->frame_or_window;
|
perd->internal_last_event_frame = event->frame_or_window;
|
||||||
else
|
else
|
||||||
internal_last_event_frame = focus;
|
perd->internal_last_event_frame = focus;
|
||||||
Vlast_event_frame = internal_last_event_frame;
|
perd->Vlast_event_frame = perd->internal_last_event_frame;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2090,8 +2082,8 @@ kbd_buffer_get_event ()
|
||||||
/* Wait until there is input available. */
|
/* Wait until there is input available. */
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
perd = find_active_event_queue ();
|
perd = find_active_event_queue (1);
|
||||||
if (perd || MOUSE_ACTIVITY_AVAILABLE)
|
if (perd)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* If the quit flag is set, then read_char will return
|
/* If the quit flag is set, then read_char will return
|
||||||
|
@ -2109,15 +2101,15 @@ kbd_buffer_get_event ()
|
||||||
#ifdef SIGIO
|
#ifdef SIGIO
|
||||||
gobble_input (0);
|
gobble_input (0);
|
||||||
#endif /* SIGIO */
|
#endif /* SIGIO */
|
||||||
perd = find_active_event_queue ();
|
perd = find_active_event_queue (1);
|
||||||
if (!(perd || MOUSE_ACTIVITY_AVAILABLE))
|
if (!perd)
|
||||||
{
|
{
|
||||||
Lisp_Object minus_one;
|
Lisp_Object minus_one;
|
||||||
|
|
||||||
XSETINT (minus_one, -1);
|
XSETINT (minus_one, -1);
|
||||||
wait_reading_process_input (0, 0, 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. */
|
/* Pass 1 for EXPECT since we just waited to have input. */
|
||||||
read_avail_input (1);
|
read_avail_input (1);
|
||||||
}
|
}
|
||||||
|
@ -2127,7 +2119,7 @@ kbd_buffer_get_event ()
|
||||||
/* At this point, we know that there is a readable event available
|
/* At this point, we know that there is a readable event available
|
||||||
somewhere. If the event queue is empty, then there must be a
|
somewhere. If the event queue is empty, then there must be a
|
||||||
mouse movement enabled and available. */
|
mouse movement enabled and available. */
|
||||||
if (perd)
|
if (perd->kbd_fetch_ptr != perd->kbd_store_ptr)
|
||||||
{
|
{
|
||||||
struct input_event *event;
|
struct input_event *event;
|
||||||
|
|
||||||
|
@ -2226,10 +2218,10 @@ kbd_buffer_get_event ()
|
||||||
if (! NILP (focus))
|
if (! NILP (focus))
|
||||||
frame = focus;
|
frame = focus;
|
||||||
|
|
||||||
if (! EQ (frame, internal_last_event_frame)
|
if (! EQ (frame, perd->internal_last_event_frame)
|
||||||
&& XFRAME (frame) != selected_frame)
|
&& XFRAME (frame) != selected_frame)
|
||||||
obj = make_lispy_switch_frame (frame);
|
obj = make_lispy_switch_frame (frame);
|
||||||
internal_last_event_frame = frame;
|
perd->internal_last_event_frame = frame;
|
||||||
#endif /* MULTI_FRAME */
|
#endif /* MULTI_FRAME */
|
||||||
|
|
||||||
/* If we didn't decide to make a switch-frame event, go ahead
|
/* If we didn't decide to make a switch-frame event, go ahead
|
||||||
|
@ -2277,10 +2269,10 @@ kbd_buffer_get_event ()
|
||||||
if (NILP (frame))
|
if (NILP (frame))
|
||||||
XSETFRAME (frame, f);
|
XSETFRAME (frame, f);
|
||||||
|
|
||||||
if (! EQ (frame, internal_last_event_frame)
|
if (! EQ (frame, perd->internal_last_event_frame)
|
||||||
&& XFRAME (frame) != selected_frame)
|
&& XFRAME (frame) != selected_frame)
|
||||||
obj = make_lispy_switch_frame (frame);
|
obj = make_lispy_switch_frame (frame);
|
||||||
internal_last_event_frame = frame;
|
perd->internal_last_event_frame = frame;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2298,7 +2290,7 @@ kbd_buffer_get_event ()
|
||||||
input_pending = readable_events ();
|
input_pending = readable_events ();
|
||||||
|
|
||||||
#ifdef MULTI_FRAME
|
#ifdef MULTI_FRAME
|
||||||
Vlast_event_frame = internal_last_event_frame;
|
perd->Vlast_event_frame = perd->internal_last_event_frame;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return (obj);
|
return (obj);
|
||||||
|
@ -2311,7 +2303,7 @@ void
|
||||||
swallow_events ()
|
swallow_events ()
|
||||||
{
|
{
|
||||||
PERDISPLAY *perd;
|
PERDISPLAY *perd;
|
||||||
while ((perd = find_active_event_queue ()) != NULL)
|
while ((perd = find_active_event_queue (0)) != NULL)
|
||||||
{
|
{
|
||||||
struct input_event *event;
|
struct input_event *event;
|
||||||
|
|
||||||
|
@ -5938,9 +5930,15 @@ quit_throw_to_read_char ()
|
||||||
abort ();
|
abort ();
|
||||||
#endif
|
#endif
|
||||||
#ifdef MULTI_FRAME
|
#ifdef MULTI_FRAME
|
||||||
if (FRAMEP (internal_last_event_frame)
|
{
|
||||||
&& XFRAME (internal_last_event_frame) != selected_frame)
|
Lisp_Object frame;
|
||||||
Fhandle_switch_frame (make_lispy_switch_frame (internal_last_event_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
|
#endif
|
||||||
|
|
||||||
_longjmp (getcjmp, 1);
|
_longjmp (getcjmp, 1);
|
||||||
|
@ -6047,6 +6045,12 @@ init_perdisplay (perd)
|
||||||
perd->kbd_store_ptr = perd->kbd_buffer;
|
perd->kbd_store_ptr = perd->kbd_buffer;
|
||||||
perd->kbd_buffer_frame_or_window
|
perd->kbd_buffer_frame_or_window
|
||||||
= Fmake_vector (make_number (KBD_BUFFER_SIZE), Qnil);
|
= 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 @@ init_keyboard ()
|
||||||
#endif
|
#endif
|
||||||
input_pending = 0;
|
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
|
#ifndef MULTI_PERDISPLAY
|
||||||
if (initialized)
|
if (initialized)
|
||||||
wipe_perdisplay (&the_only_perdisplay);
|
wipe_perdisplay (&the_only_perdisplay);
|
||||||
|
@ -6380,11 +6377,6 @@ by position only.");
|
||||||
"Number of complete keys read from the keyboard so far.");
|
"Number of complete keys read from the keyboard so far.");
|
||||||
num_input_keys = 0;
|
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,
|
DEFVAR_LISP ("help-char", &Vhelp_char,
|
||||||
"Character to recognize as meaning Help.\n\
|
"Character to recognize as meaning Help.\n\
|
||||||
When it is read, do `(eval help-form)', and display result if it's a string.\n\
|
When it is read, do `(eval help-form)', and display result if it's a string.\n\
|
||||||
|
@ -6543,6 +6535,10 @@ It may be a number, or the symbol `-' for just a minus sign as arg,\n\
|
||||||
or a list whose car is a number for just one or more C-U's\n\
|
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\
|
or nil if no argument has been specified.\n\
|
||||||
This is what `(interactive \"P\")' returns.");
|
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 ()
|
keys_of_keyboard ()
|
||||||
|
|
Loading…
Add table
Reference in a new issue