diff options
author | Po Lu <luangruo@yahoo.com> | 2021-12-28 17:53:20 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2021-12-28 17:53:20 +0800 |
commit | d257d92d17c5bfe5317973c5fadd8b5295174a1b (patch) | |
tree | 359212f18a5981804dc283372369afd15ebe5b70 /lwlib/xlwmenu.c | |
parent | a17a11df04fcc5e48330e92d6f33f0a40655e5af (diff) | |
download | emacs-d257d92d17c5bfe5317973c5fadd8b5295174a1b.tar.gz emacs-d257d92d17c5bfe5317973c5fadd8b5295174a1b.tar.bz2 emacs-d257d92d17c5bfe5317973c5fadd8b5295174a1b.zip |
* lwlib/xlwmenu.c (fit_to_screen): Adjust correctly for child menus.
Diffstat (limited to 'lwlib/xlwmenu.c')
-rw-r--r-- | lwlib/xlwmenu.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c index a065c53310d..68b0a2f5fe4 100644 --- a/lwlib/xlwmenu.c +++ b/lwlib/xlwmenu.c @@ -1392,23 +1392,28 @@ fit_to_screen (XlwMenuWidget mw, { int screen_width, screen_height; int screen_x, screen_y; + int prev_screen_x, prev_screen_y; #ifdef emacs xlw_monitor_dimensions_at_pos (XtDisplay (mw), XtScreen (mw), + previous_ws->x, previous_ws->y, + &prev_screen_x, &prev_screen_y, + &screen_width, &screen_height); + xlw_monitor_dimensions_at_pos (XtDisplay (mw), XtScreen (mw), ws->x, ws->y, &screen_x, &screen_y, &screen_width, &screen_height); #else screen_width = WidthOfScreen (XtScreen (mw)); screen_height = HeightOfScreen (XtScreen (mw)); - screen_x = 0; - screen_y = 0; + prev_screen_x = screen_x = 0; + prev_screen_y = screen_y = 0; #endif /* 1 if we are unable to avoid an overlap between this menu and the parent menu in the X dimension. */ int horizontal_overlap = 0; if (ws->x < screen_x) - ws->x = 0; + ws->x = screen_x; else if (ws->x + ws->width > screen_x + screen_width) { if (!horizontal_p) @@ -1417,6 +1422,7 @@ fit_to_screen (XlwMenuWidget mw, the right of the invoking menu-item; it makes the sub-menu look more `attached' to the menu-item. */ ws->x = screen_x + (previous_ws->x + - prev_screen_x - ws->width + mw->menu.shadow_thickness); else @@ -1445,7 +1451,9 @@ fit_to_screen (XlwMenuWidget mw, else if (ws->y + ws->height > screen_y + screen_height) { if (horizontal_p) - ws->y = screen_y + (previous_ws->y - ws->height); + ws->y = screen_y + (previous_ws->y + - prev_screen_y + - ws->height); else ws->y = screen_y + (screen_height - ws->height); if (ws->y < screen_y) |