# HG changeset patch # User Nick Roberts # Date 1180832134 0 # Node ID d620b28641cd10be29e71f76cce5b185e48fc449 # Parent 3083b0e78cc5fb161a59a689712eca583d7537c9 (term_mouse_highlight): Remove unused variables. (Fterm_open_connection): Set gpm_zerobased to 1. (term_mouse_movement, term_mouse_click, handle_one_term_event): Use zero based co-ordinates. (handle_one_term_event): Report a drag as mouse movement too. diff -r 3083b0e78cc5 -r d620b28641cd src/term.c --- a/src/term.c Sun Jun 03 00:54:02 2007 +0000 +++ b/src/term.c Sun Jun 03 00:55:34 2007 +0000 @@ -428,11 +428,6 @@ 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 */ @@ -2387,13 +2382,13 @@ { 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 @@ -2570,10 +2565,6 @@ || !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); @@ -2815,7 +2806,7 @@ 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; @@ -2835,7 +2826,7 @@ 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, @@ -2843,8 +2834,6 @@ Lisp_Object *y, unsigned long *time) { struct timeval now; - Lisp_Object frame, window; - struct window *w; *fp = SELECTED_FRAME (); (*fp)->mouse_moved = 0; @@ -2852,13 +2841,8 @@ *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); } @@ -2905,7 +2889,7 @@ 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)) @@ -2921,8 +2905,8 @@ 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; @@ -2941,7 +2925,7 @@ 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; @@ -2952,8 +2936,8 @@ /* 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); @@ -2961,7 +2945,8 @@ 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. */ @@ -3012,6 +2997,7 @@ connection.defaultMask = ~GPM_HARD; connection.maxMod = ~0; connection.minMod = 0; + gpm_zerobased = 1; if (Gpm_Open (&connection, 0) < 0) return Qnil;