1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-08 14:27:36 +00:00

WindowServer+LibGUI: Paint exclusive actions as radio buttons in menus

Actions that are checkable and members of a GActionGroup will now be
painted with a radio button appearance in menus.
This commit is contained in:
Andreas Kling 2020-01-08 20:44:41 +01:00
parent cc8c26c39b
commit 463ed77024
5 changed files with 34 additions and 10 deletions

View file

@ -1,5 +1,6 @@
#include <AK/HashMap.h>
#include <LibGUI/GAction.h>
#include <LibGUI/GActionGroup.h>
#include <LibGUI/GMenu.h>
#include <LibGUI/GWindowServerConnection.h>
@ -87,7 +88,7 @@ int GMenu::realize_menu()
if (item.type() == GMenuItem::Submenu) {
auto& submenu = *item.submenu();
submenu.realize_if_needed();
GWindowServerConnection::the().send_sync<WindowServer::AddMenuItem>(m_menu_id, i, submenu.menu_id(), submenu.name(), true, false, false, "", -1);
GWindowServerConnection::the().send_sync<WindowServer::AddMenuItem>(m_menu_id, i, submenu.menu_id(), submenu.name(), true, false, false, "", -1, false);
continue;
}
if (item.type() == GMenuItem::Action) {
@ -108,7 +109,8 @@ int GMenu::realize_menu()
icon_buffer_id = action.icon()->shared_buffer_id();
}
auto shortcut_text = action.shortcut().is_valid() ? action.shortcut().to_string() : String();
GWindowServerConnection::the().send_sync<WindowServer::AddMenuItem>(m_menu_id, i, -1, action.text(), action.is_enabled(), action.is_checkable(), action.is_checkable() ? action.is_checked() : false, shortcut_text, icon_buffer_id);
bool exclusive = action.group() && action.group()->is_exclusive() && action.is_checkable();
GWindowServerConnection::the().send_sync<WindowServer::AddMenuItem>(m_menu_id, i, -1, action.text(), action.is_enabled(), action.is_checkable(), action.is_checkable() ? action.is_checked() : false, shortcut_text, icon_buffer_id, exclusive);
}
}
all_menus().set(m_menu_id, this);