[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 409f0430b6: Fix click position to menu bar entry with no-toolkit
From: |
Po Lu |
Subject: |
master 409f0430b6: Fix click position to menu bar entry with no-toolkit |
Date: |
Fri, 18 Nov 2022 19:24:46 -0500 (EST) |
branch: master
commit 409f0430b6a0c138836e5067141bf6b2a7beb6b3
Author: Manuel Giraud <manuel@ledu-giraud.fr>
Commit: Po Lu <luangruo@yahoo.com>
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.
---
src/dispextern.h | 3 ++-
src/keyboard.c | 18 ++++++++++++++++--
src/xdisp.c | 2 +-
3 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/src/dispextern.h b/src/dispextern.h
index 2f5f4335fe..2afbdeabaa 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 069cf0627b..6ce6ce17f2 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 f8fc0f5787..b5f013ea6a 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)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 409f0430b6: Fix click position to menu bar entry with no-toolkit,
Po Lu <=