diff --git a/metadata/panel.xml b/metadata/panel.xml index 6508a9db..c9a49e3d 100644 --- a/metadata/panel.xml +++ b/metadata/panel.xml @@ -189,6 +189,11 @@ 42 0 + + <_short>Force showing the menu popup + <_long>Show the menu popup over other windows, even if it and the panel would be hidden otherwise. + true + <_short>Menu Minimum Category Width 200 diff --git a/src/panel/widgets/menu.cpp b/src/panel/widgets/menu.cpp index e2295eda..ac0a3eb4 100644 --- a/src/panel/widgets/menu.cpp +++ b/src/panel/widgets/menu.cpp @@ -518,9 +518,11 @@ void WayfireMenu::on_popover_shown() set_category("All"); flowbox.unselect_all(); - Gtk::Window *window = dynamic_cast(button->get_root()); - - gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_OVERLAY); + if (force_show_popup.value()) + { + Gtk::Window *window = dynamic_cast(button->get_root()); + gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_OVERLAY); + } } bool WayfireMenu::update_icon() @@ -615,8 +617,14 @@ void WayfireMenu::setup_popover_layout() return false; }, false)); button->get_popover()->add_controller(typing_gesture); + signals.push_back(button->get_popover()->signal_closed().connect([=] () { + if (!force_show_popup.value()) + { + return; + } + Gtk::Window *window = dynamic_cast(button->get_root()); WfOption panel_layer{"panel/layer"}; diff --git a/src/panel/widgets/menu.hpp b/src/panel/widgets/menu.hpp index 9f7f403f..51888d99 100644 --- a/src/panel/widgets/menu.hpp +++ b/src/panel/widgets/menu.hpp @@ -176,6 +176,7 @@ class WayfireMenu : public WayfireWidget WfOption fuzzy_search_enabled{"panel/menu_fuzzy_search"}; WfOption panel_position{"panel/position"}; WfOption menu_icon{"panel/menu_icon"}; + WfOption force_show_popup{"panel/menu_force_show_popup"}; WfOption menu_min_category_width{"panel/menu_min_category_width"}; WfOption menu_min_content_height{"panel/menu_min_content_height"}; WfOption menu_show_categories{"panel/menu_show_categories"};