diff --git a/include/config/rcxml.h b/include/config/rcxml.h index a0250711..e326ad35 100644 --- a/include/config/rcxml.h +++ b/include/config/rcxml.h @@ -100,6 +100,8 @@ struct rcxml { struct wl_list mousebinds; /* struct mousebind.link */ double scroll_factor; + bool menu_client_menu_at_pointer; + /* touch tablet */ struct wl_list touch_configs; diff --git a/src/action.c b/src/action.c index 6c026733..57863b64 100644 --- a/src/action.c +++ b/src/action.c @@ -594,6 +594,8 @@ show_menu(struct server *server, struct view *view, const char *menu_name) force_menu_top_left = true; } else if (ssd_part_contains(LAB_SSD_PART_TITLEBAR, type)) { force_menu_top_left = false; + } else if (rc.menu_client_menu_at_pointer) { + force_menu_top_left = false; } else { force_menu_top_left = true; } diff --git a/src/config/rcxml.c b/src/config/rcxml.c index 1b2265d2..b0424086 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -887,6 +887,11 @@ entry(xmlNode *node, char *nodename, char *content) wlr_log(WLR_ERROR, "ignoring invalid value for notifyClient"); } + } else if (!strcasecmp(nodename, "menu_clientMenuAtPointer")) { + if (parse_bool(content, -1) == true) { + rc.menu_client_menu_at_pointer = true; + }; + /* */ } else if (!strcasecmp(nodename, "show.windowSwitcher")) { set_bool(content, &rc.window_switcher.show); @@ -1157,6 +1162,8 @@ rcxml_init(void) | LAB_VIEW_CRITERIA_ROOT_TOPLEVEL | LAB_VIEW_CRITERIA_NO_SKIP_WINDOW_SWITCHER; + rc.menu_client_menu_at_pointer = false; + rc.resize_indicator = LAB_RESIZE_INDICATOR_NEVER; rc.workspace_config.popuptime = INT_MIN;