From d70040c7501a5814e1f2f04cedfd386c38b5a6b2 Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Sun, 24 Nov 2024 14:40:52 +0900 Subject: [PATCH] menu: overlap submenus by menu.border.width This follows Openbox's behavior that aligns the first item of a submenu with its parent item --- src/menu/menu.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/menu/menu.c b/src/menu/menu.c index d8a99787..13fef1e2 100644 --- a/src/menu/menu.c +++ b/src/menu/menu.c @@ -819,7 +819,9 @@ parse_xml(const char *filename, struct server *server) static int menu_get_full_width(struct menu *menu) { - int width = menu->size.width - menu->server->theme->menu_overlap_x; + struct theme *theme = menu->server->theme; + int width = menu->size.width - theme->menu_overlap_x + - theme->menu_border_width; int child_width; int max_child_width = 0; struct menuitem *item; @@ -849,9 +851,11 @@ get_submenu_position(struct menuitem *item, enum menu_align align) pos.y = menu->scene_tree->node.y; if (align & LAB_MENU_OPEN_RIGHT) { - pos.x += menu->size.width - theme->menu_overlap_x; + pos.x += menu->size.width - theme->menu_overlap_x + - theme->menu_border_width; } - pos.y += item->tree->node.y - theme->menu_overlap_y; + pos.y += item->tree->node.y - theme->menu_overlap_y + - theme->menu_border_width; return pos; } @@ -894,7 +898,7 @@ menu_configure(struct menu *menu, int lx, int ly, enum menu_align align) } if (align & LAB_MENU_OPEN_LEFT) { - lx -= menu->size.width - theme->menu_overlap_x; + lx -= menu->size.width - theme->menu_overlap_x - theme->menu_border_width; } if (align & LAB_MENU_OPEN_TOP) { ly -= menu->size.height; -- 2.52.0