changeset 81127:d620b28641cd

(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.
author Nick Roberts <nickrob@snap.net.nz>
date Sun, 03 Jun 2007 00:55:34 +0000
parents 3083b0e78cc5
children e6d77a4d2ea6
files src/term.c
diffstat 1 files changed, 15 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- 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;