From: Manuel Giraud Date: Fri, 18 Nov 2022 08:24:55 +0000 (+0100) Subject: Fix click position to menu bar entry with no-toolkit X-Git-Tag: emacs-29.0.90~1616^2~41 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=409f0430b6a0c138836e5067141bf6b2a7beb6b3;p=emacs.git 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. --- 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) {