Reapply "Simplify absolute (x, y) computation on ttys"

This reverts commit 13fdcd730f.
This commit is contained in:
Gerd Möllmann 2025-01-25 14:28:03 +01:00
parent d4220a17c4
commit 945ed044cd
3 changed files with 13 additions and 15 deletions

View 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

View file

@ -3313,16 +3313,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;
}
}
@ -3333,7 +3335,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 };
}
@ -3875,10 +3877,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;
}

View 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);
}
}