Mercurial > emacs
changeset 16917:5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
can be entered.
(custom-face-attributes): Don't use top-line'.
(mode-line-format): Replace (:eval mode-line-mode-name)'.
(mode-line-mode-name): New.
(make-mode-line-mouse-sensitive): Don't change default value
of x' are found before files starting with down_p'.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 22 Jan 1997 02:04:17 +0000 |
parents | 49435b5ecb29 |
children | ab49512bcdff |
files | lwlib/xlwmenu.c |
diffstat | 1 files changed, 30 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/lwlib/xlwmenu.c Tue Jan 21 23:17:12 1997 +0000 +++ b/lwlib/xlwmenu.c Wed Jan 22 02:04:17 1997 +0000 @@ -781,6 +781,9 @@ { unsigned int screen_width = WidthOfScreen (XtScreen (mw)); unsigned int screen_height = HeightOfScreen (XtScreen (mw)); + /* 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 < 0) ws->x = 0; @@ -791,8 +794,24 @@ else ws->x = screen_width - ws->width; if (ws->x < 0) - ws->x = 0; + { + ws->x = 0; + horizontal_overlap = 1; + } } + /* If we overlap in X, try to avoid overlap in Y. */ + if (horizontal_overlap + && ws->y < previous_ws->y + previous_ws->height + && previous_ws->y < ws->y + ws->height) + { + /* Put this menu right below or right above PREVIOUS_WS + if there's room. */ + if (previous_ws->y + previous_ws->height + ws->height < screen_height) + ws->y = previous_ws->y + previous_ws->height; + else if (previous_ws->y - ws->height > 0) + ws->y = previous_ws->y - ws->height; + } + if (ws->y < 0) ws->y = 0; else if (ws->y + ws->height > screen_height) @@ -855,18 +874,18 @@ display_menu (mw, last_same, new_selection == old_selection, &selection_position, NULL, NULL, old_selection, new_selection); - /* Now popup the new menus */ - for (i = last_same + 1; i < new_depth && new_stack [i]->contents; i++) + /* Now place the new menus. */ + for (i = last_same + 1; i < new_depth && new_stack[i]->contents; i++) { - window_state* previous_ws = &windows [i - 1]; - window_state* ws = &windows [i]; + window_state *previous_ws = &windows[i - 1]; + window_state *ws = &windows[i]; - ws->x = - previous_ws->x + selection_position.x + mw->menu.shadow_thickness; + ws->x + = previous_ws->x + selection_position.x + mw->menu.shadow_thickness; if (!mw->menu.horizontal || i > 1) ws->x += mw->menu.shadow_thickness; - ws->y = - previous_ws->y + selection_position.y + mw->menu.shadow_thickness; + ws->y + = previous_ws->y + selection_position.y + mw->menu.shadow_thickness; size_menu (mw, i); @@ -881,8 +900,8 @@ /* unmap the menus that popped down */ for (i = new_depth - 1; i < old_depth; i++) - if (i >= new_depth || !new_stack [i]->contents) - XUnmapWindow (XtDisplay (mw), windows [i].window); + if (i >= new_depth || !new_stack[i]->contents) + XUnmapWindow (XtDisplay (mw), windows[i].window); } static Boolean