]> git.eshelyaron.com Git - emacs.git/commitdiff
Simplify absolute (x, y) computation on ttys
authorGerd Möllmann <gerd@gnu.org>
Sat, 25 Jan 2025 04:33:13 +0000 (05:33 +0100)
committerEshel Yaron <me@eshelyaron.com>
Sat, 25 Jan 2025 17:46:20 +0000 (18:46 +0100)
* src/dispnew.c (root_xy): New function.
(frame_pos_abs): Removed.
(frame_rect_abs, abs_cursor_pos): Use root_xy.
* src/dispextern.h: Declare root_xy.
* src/term.c (mouse_get_xy): Use it.

(cherry picked from commit 5e132835ad320be1d5c45ffbf83d67d16fc7bf96)

src/dispextern.h
src/dispnew.c
src/term.c

index 1060895d0f4ac6fdb337ea46e9b55bd16f65142f..9c193e79fd10492ec039c3d6276fd06abe14342f 100644 (file)
@@ -3958,7 +3958,7 @@ void combine_updates (Lisp_Object root_frames);
 void combine_updates_for_frame (struct frame *f, bool inhibit_id_p);
 void tty_raise_lower_frame (struct frame *f, bool raise);
 int max_child_z_order (struct frame *parent);
-void frame_pos_abs (struct frame *f, int *x, int *y);
+void root_xy (struct frame *f, int x, int y, int *rx, int *ry);
 bool is_frame_ancestor (struct frame *f1, struct frame *f2);
 
 INLINE_HEADER_END
index 39a2fd659f97565cc8cfd4a8a3a0645d389b0143..c966df2ac5819bcf0a1d0b6bef2e6cb28eaf0572 100644 (file)
@@ -3310,16 +3310,18 @@ rect_intersect (struct rect *r, struct rect r1, struct rect r2)
   return true;
 }
 
-/* Return the absolute position of frame F in *X and *Y.  */
+/* Translate (X, Y) relative to frame F to absolute coordinates
+   in (*X, *Y).  */
 
 void
-frame_pos_abs (struct frame *f, int *x, int *y)
+root_xy (struct frame *f, int x, int y, int *rx, int *ry)
 {
-  *x = *y = 0;
+  *rx = x;
+  *ry = y;
   for (; f; f = FRAME_PARENT_FRAME (f))
     {
-      *x += f->left_pos;
-      *y += f->top_pos;
+      *rx += f->left_pos;
+      *ry += f->top_pos;
     }
 }
 
@@ -3330,7 +3332,7 @@ static struct rect
 frame_rect_abs (struct frame *f)
 {
   int x, y;
-  frame_pos_abs (f, &x, &y);
+  root_xy (f, 0, 0, &x, &y);
   return (struct rect) { x, y, f->total_cols, f->total_lines };
 }
 
@@ -3872,10 +3874,7 @@ abs_cursor_pos (struct frame *f, int *x, int *y)
 
       wx += max (0, w->left_margin_cols);
 
-      int fx, fy;
-      frame_pos_abs (f, &fx, &fy);
-      *x = fx + wx;
-      *y = fy + wy;
+      root_xy (f, wx, wy, x, y);
       return true;
     }
 
index 4ae9c3738887c66fff49197b22634322ce001627..00bc94e6e31ebc73bdee0c7c8117dcc0f3e436e0 100644 (file)
@@ -2996,10 +2996,9 @@ mouse_get_xy (int *x, int *y)
   struct frame *sf = SELECTED_FRAME ();
   if (f == sf || is_frame_ancestor (sf, f))
     {
-      int fx, fy;
-      frame_pos_abs (f, &fx, &fy);
-      *x = fx + XFIXNUM (XCAR (XCDR (mouse)));
-      *y = fy + XFIXNUM (XCDR (XCDR (mouse)));
+      int mx = XFIXNUM (XCAR (XCDR (mouse)));
+      int my = XFIXNUM (XCDR (XCDR (mouse)));
+      root_xy (f, mx, my, x, y);
     }
 }