static Lisp_Object Qmouse_face_window;
static int mouse_face_face_id;
-/* FRAME and X, Y position of mouse when last checked for
- highlighting. X and Y can be negative or out of range for the frame. */
-struct frame *mouse_face_mouse_frame;
-int mouse_face_mouse_x, mouse_face_mouse_y;
-
static int pos_x, pos_y;
static int last_mouse_x, last_mouse_y;
#endif /* HAVE_GPM */
{
const char *name;
int fd;
+ /* TODO: how to set mouse position?
name = (const char *) ttyname (0);
fd = open (name, O_WRONLY);
- /* TODO: how to set mouse position?
- SOME_FUNCTION (x, y, fd); */
+ SOME_FUNCTION (x, y, fd);
close (fd);
last_mouse_x = x;
- last_mouse_y = y;
+ last_mouse_y = y; */
}
static void
|| !f->glyphs_initialized_p)
return;
- mouse_face_mouse_x = x;
- mouse_face_mouse_y = y;
- mouse_face_mouse_frame = f;
-
/* Which window is that in? */
window = window_from_coordinates (f, x, y, &part, &x, &y, 0);
if (event->x != last_mouse_x || event->y != last_mouse_y)
{
frame->mouse_moved = 1;
- term_mouse_highlight (frame, event->x - 1, event->y - 1);
+ term_mouse_highlight (frame, event->x, event->y);
/* Remember which glyph we're now on. */
last_mouse_x = event->x;
last_mouse_y = event->y;
Set *time to the time the mouse was at the returned position.
- This should clear mouse_moved until the next motion
+ This clears mouse_moved until the next motion
event arrives. */
static void
term_mouse_position (FRAME_PTR *fp, int insist, Lisp_Object *bar_window,
Lisp_Object *y, unsigned long *time)
{
struct timeval now;
- Lisp_Object frame, window;
- struct window *w;
*fp = SELECTED_FRAME ();
(*fp)->mouse_moved = 0;
*bar_window = Qnil;
*part = 0;
- XSETINT (*x, last_mouse_x);
+ XSETINT (*x, last_mouse_x);
XSETINT (*y, last_mouse_y);
- XSETFRAME (frame, *fp);
- window = Fwindow_at (*x, *y, frame);
-
- XSETINT (*x, last_mouse_x - WINDOW_LEFT_EDGE_COL (XWINDOW (window)));
- XSETINT (*y, last_mouse_y - WINDOW_TOP_EDGE_LINE (XWINDOW (window)));
gettimeofday(&now, 0);
*time = (now.tv_sec * 1000) + (now.tv_usec / 1000);
}
if (event->type & GPM_DRAG)
result->modifiers |= drag_modifier;
- if (!(event->type & (GPM_MOVE|GPM_DRAG))) {
+ if (!(event->type & (GPM_MOVE | GPM_DRAG))) {
/* 1 << KG_SHIFT */
if (event->modifiers & (1 << 0))
result->modifiers |= meta_modifier;
}
- XSETINT (result->x, event->x - 1);
- XSETINT (result->y, event->y - 1);
+ XSETINT (result->x, event->x);
+ XSETINT (result->y, event->y);
XSETFRAME (result->frame_or_window, f);
result->arg = Qnil;
return Qnil;
ie.kind = NO_EVENT;
ie.arg = Qnil;
- if (event->type & GPM_MOVE) {
+ if (event->type & (GPM_MOVE | GPM_DRAG)) {
unsigned char buf[6 * sizeof (short)];
unsigned short *arg = (unsigned short *) buf + 1;
const char *name;
/* Display mouse pointer */
buf[sizeof(short) - 1] = 2; /* set selection */
- arg[0] = arg[2] = (unsigned short) event->x;
- arg[1] = arg[3] = (unsigned short) event->y;
+ arg[0] = arg[2] = (unsigned short) event->x + gpm_zerobased;
+ arg[1] = arg[3] = (unsigned short) event->y + gpm_zerobased;
arg[4] = (unsigned short) 3;
name = (const char *) ttyname (0);
ioctl (fd, TIOCLINUX, buf + sizeof (short) - 1);
close (fd);
- term_mouse_movement (f, event);
+ if (!term_mouse_movement (f, event))
+ help_echo_string = previous_help_echo_string;
/* If the contents of the global variable help_echo_string
has changed, generate a HELP_EVENT. */
connection.defaultMask = ~GPM_HARD;
connection.maxMod = ~0;
connection.minMod = 0;
+ gpm_zerobased = 1;
if (Gpm_Open (&connection, 0) < 0)
return Qnil;