summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Giraud <manuel@ledu-giraud.fr>2022-11-18 09:24:55 +0100
committerPo Lu <luangruo@yahoo.com>2022-11-19 08:22:45 +0800
commit409f0430b6a0c138836e5067141bf6b2a7beb6b3 (patch)
tree82d640332b147300ba19be2565ba4296113d1917
parent87fce324c6bd135532958b1ad1496a3da67b7936 (diff)
downloademacs-409f0430b6a0c138836e5067141bf6b2a7beb6b3.tar.gz
Fix click position to menu bar entry with no-toolkit
* src/keyboard.c (make_lispy_event): Use x_y_to_hpos_vpos to compute correct menu bar position should the menu face change. * src/xdisp.c (x_y_to_hpos_vpos): Not static anymore. * src/dispextern.h: Export x_y_to_hpos_vpos.
-rw-r--r--src/dispextern.h3
-rw-r--r--src/keyboard.c18
-rw-r--r--src/xdisp.c2
3 files changed, 19 insertions, 4 deletions
diff --git a/src/dispextern.h b/src/dispextern.h
index 2f5f4335fe5..2afbdeabaab 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3495,7 +3495,8 @@ extern bool cursor_in_mouse_face_p (struct window *w);
extern void tty_draw_row_with_mouse_face (struct window *, struct glyph_row *,
int, int, enum draw_glyphs_face);
extern void display_tty_menu_item (const char *, int, int, int, int, bool);
-
+extern struct glyph *x_y_to_hpos_vpos (struct window *, int, int, int *, int *,
+ int *, int *, int *);
/* Flags passed to try_window. */
#define TRY_WINDOW_CHECK_MARGINS (1 << 0)
#define TRY_WINDOW_IGNORE_FONTS_CHANGE (1 << 1)
diff --git a/src/keyboard.c b/src/keyboard.c
index 069cf0627b2..6ce6ce17f27 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -5974,8 +5974,22 @@ make_lispy_event (struct input_event *event)
in a menu (non-toolkit version). */
if (!toolkit_menubar_in_use (f))
{
- pixel_to_glyph_coords (f, XFIXNUM (event->x), XFIXNUM (event->y),
- &column, &row, NULL, 1);
+#if defined HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
+ {
+ struct window *menu_w = XWINDOW (f->menu_bar_window);
+ int x, y, dummy;
+
+ x = FRAME_TO_WINDOW_PIXEL_X (menu_w, XFIXNUM (event->x));
+ y = FRAME_TO_WINDOW_PIXEL_Y (menu_w, XFIXNUM (event->y));
+
+ x_y_to_hpos_vpos (XWINDOW (f->menu_bar_window), x, y, &column, &row,
+ NULL, NULL, &dummy);
+ }
+ else
+#endif
+ pixel_to_glyph_coords (f, XFIXNUM (event->x), XFIXNUM (event->y),
+ &column, &row, NULL, 1);
/* In the non-toolkit version, clicks on the menu bar
are ordinary button events in the event buffer.
diff --git a/src/xdisp.c b/src/xdisp.c
index f8fc0f57873..b5f013ea6a1 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -2330,7 +2330,7 @@ pixel_to_glyph_coords (struct frame *f, int pix_x, int pix_y, int *x, int *y,
text, or we can't tell because W's current matrix is not up to
date. */
-static struct glyph *
+struct glyph *
x_y_to_hpos_vpos (struct window *w, int x, int y, int *hpos, int *vpos,
int *dx, int *dy, int *area)
{