1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:57:45 +00:00

LibGUI+WindowServer: Add "visible" state to GUI actions

This patch adds a visibility state to GUI::Action. All actions default
to being visible. When invisible, they do not show up in toolbars on
menus (and importantly, they don't occupy any space).

This can be used to hide/show context-sensitive actions dynamically
without rebuilding menus and toolbars.

Thanks to Tim Slater for assuming that action visibility was a thing,
which gave me a reason to implement it! :^)
This commit is contained in:
Andreas Kling 2022-12-07 21:18:02 +01:00
parent df7c0eacd4
commit 49f5767789
13 changed files with 88 additions and 14 deletions

View file

@ -127,7 +127,7 @@ void ConnectionFromClient::add_menu(i32 window_id, i32 menu_id)
}
void ConnectionFromClient::add_menu_item(i32 menu_id, i32 identifier, i32 submenu_id,
DeprecatedString const& text, bool enabled, bool checkable, bool checked, bool is_default,
DeprecatedString const& text, bool enabled, bool visible, bool checkable, bool checked, bool is_default,
DeprecatedString const& shortcut, Gfx::ShareableBitmap const& icon, bool exclusive)
{
auto it = m_menus.find(menu_id);
@ -142,6 +142,7 @@ void ConnectionFromClient::add_menu_item(i32 menu_id, i32 identifier, i32 submen
menu_item->set_icon(icon.bitmap());
menu_item->set_submenu_id(submenu_id);
menu_item->set_exclusive(exclusive);
menu_item->set_visible(visible);
menu.add_item(move(menu_item));
}
@ -172,7 +173,7 @@ void ConnectionFromClient::dismiss_menu(i32 menu_id)
}
void ConnectionFromClient::update_menu_item(i32 menu_id, i32 identifier, [[maybe_unused]] i32 submenu_id,
DeprecatedString const& text, bool enabled, bool checkable, bool checked, bool is_default,
DeprecatedString const& text, bool enabled, bool visible, bool checkable, bool checked, bool is_default,
DeprecatedString const& shortcut, Gfx::ShareableBitmap const& icon)
{
auto it = m_menus.find(menu_id);
@ -190,6 +191,7 @@ void ConnectionFromClient::update_menu_item(i32 menu_id, i32 identifier, [[maybe
menu_item->set_text(text);
menu_item->set_shortcut_text(shortcut);
menu_item->set_enabled(enabled);
menu_item->set_visible(visible);
menu_item->set_checkable(checkable);
menu_item->set_default(is_default);
if (checkable)