Make mouse-related calls be more consistent on all frame types

* src/frame.c (Fset_mouse_position, Fset_mouse_pixel_position): Call
Fselect_frame and appropriate mouse_moveto function on all non-GUI
frame types, independent of #ifdef's.
* src/term.c (init_tty): Initialize mouse_face_window for all
non-GUI frame types.
(term_mouse_moveto) [HAVE_GPM]: Make available even if
HAVE_WINDOW_SYSTEM is defined.
* src/xdisp.c (try_window_id): Call gui_clear_window_mouse_face
in all cases.
This commit is contained in:
Jared Finder 2020-12-02 00:05:59 -08:00 committed by Eli Zaretskii
parent 0732fc3193
commit ba29d13f41
4 changed files with 39 additions and 29 deletions

View file

@ -2572,23 +2572,30 @@ before calling this function on it, like this.
int yval = check_integer_range (y, INT_MIN, INT_MAX);
/* I think this should be done with a hook. */
#ifdef HAVE_WINDOW_SYSTEM
if (FRAME_WINDOW_P (XFRAME (frame)))
/* Warping the mouse will cause enternotify and focus events. */
frame_set_mouse_position (XFRAME (frame), xval, yval);
#elif defined MSDOS
if (FRAME_MSDOS_P (XFRAME (frame)))
{
#ifdef HAVE_WINDOW_SYSTEM
/* Warping the mouse will cause enternotify and focus events. */
frame_set_mouse_position (XFRAME (frame), xval, yval);
#endif /* HAVE_WINDOW_SYSTEM */
}
else if (FRAME_MSDOS_P (XFRAME (frame)))
{
Fselect_frame (frame, Qnil);
#ifdef MSDOS
mouse_moveto (xval, yval);
#endif /* MSDOS */
}
#elif defined HAVE_GPM
Fselect_frame (frame, Qnil);
term_mouse_moveto (xval, yval);
else
{
Fselect_frame (frame, Qnil);
#ifdef HAVE_GPM
term_mouse_moveto (xval, yval);
#else
(void) xval;
(void) yval;
#endif
(void) xval;
(void) yval;
#endif /* HAVE_GPM */
}
return Qnil;
}
@ -2610,23 +2617,31 @@ before calling this function on it, like this.
int yval = check_integer_range (y, INT_MIN, INT_MAX);
/* I think this should be done with a hook. */
#ifdef HAVE_WINDOW_SYSTEM
if (FRAME_WINDOW_P (XFRAME (frame)))
/* Warping the mouse will cause enternotify and focus events. */
frame_set_mouse_pixel_position (XFRAME (frame), xval, yval);
#elif defined MSDOS
if (FRAME_MSDOS_P (XFRAME (frame)))
{
/* Warping the mouse will cause enternotify and focus events. */
#ifdef HAVE_WINDOW_SYSTEM
frame_set_mouse_pixel_position (XFRAME (frame), xval, yval);
#endif /* HAVE_WINDOW_SYSTEM */
}
else if (FRAME_MSDOS_P (XFRAME (frame)))
{
Fselect_frame (frame, Qnil);
#ifdef MSDOS
mouse_moveto (xval, yval);
#endif /* MSDOS */
}
#elif defined HAVE_GPM
Fselect_frame (frame, Qnil);
term_mouse_moveto (xval, yval);
else
{
Fselect_frame (frame, Qnil);
#ifdef HAVE_GPM
term_mouse_moveto (xval, yval);
#else
(void) xval;
(void) yval;
#endif
(void) xval;
(void) yval;
#endif /* HAVE_GPM */
}
return Qnil;
}

View file

@ -2382,7 +2382,6 @@ frame's terminal). */)
#ifdef HAVE_GPM
#ifndef HAVE_WINDOW_SYSTEM
void
term_mouse_moveto (int x, int y)
{
@ -2396,7 +2395,6 @@ term_mouse_moveto (int x, int y)
last_mouse_x = x;
last_mouse_y = y; */
}
#endif /* HAVE_WINDOW_SYSTEM */
/* Implementation of draw_row_with_mouse_face for TTY/GPM. */
void
@ -4246,8 +4244,8 @@ use the Bourne shell command 'TERM=...; export TERM' (C-shell:\n\
#ifdef HAVE_GPM
terminal->mouse_position_hook = term_mouse_position;
tty->mouse_highlight.mouse_face_window = Qnil;
#endif
tty->mouse_highlight.mouse_face_window = Qnil;
terminal->kboard = allocate_kboard (Qnil);
terminal->kboard->reference_count++;

View file

@ -366,9 +366,7 @@ enum {
#ifdef HAVE_GPM
#include <gpm.h>
extern int handle_one_term_event (struct tty_display_info *, Gpm_Event *);
#ifndef HAVE_WINDOW_SYSTEM
extern void term_mouse_moveto (int, int);
#endif
/* The device for which we have enabled gpm support. */
extern struct tty_display_info *gpm_tty;

View file

@ -20822,9 +20822,8 @@ try_window_id (struct window *w)
+ window_wants_header_line (w)
+ window_internal_height (w));
#if defined (HAVE_GPM) || defined (MSDOS)
gui_clear_window_mouse_face (w);
#endif
/* Perform the operation on the screen. */
if (dvpos > 0)
{