WindowServer: Convert the remaining menu APIs into messages.

This commit is contained in:
Andreas Kling 2019-02-13 21:47:14 +01:00
parent cf432b4c3d
commit ef4e9860fd
Notes: sideshowbarker 2024-07-19 15:45:27 +09:00
11 changed files with 86 additions and 66 deletions

View file

@ -822,8 +822,6 @@ void WSWindowManager::handle_client_request(WSAPIClientRequest& request)
auto jt = m_menus.find(menu_id);
if (it == m_menubars.end() || jt == m_menus.end()) {
ASSERT_NOT_REACHED();
// FIXME: Send an error.
return;
}
auto& menubar = *(*it).value;
auto& menu = *(*jt).value;
@ -835,6 +833,37 @@ void WSWindowManager::handle_client_request(WSAPIClientRequest& request)
WSMessageLoop::the().post_message_to_client(request.client_id(), response);
break;
}
case WSMessage::APIAddMenuItemRequest: {
int menu_id = static_cast<WSAPIAddMenuItemRequest&>(request).menu_id();
unsigned identifier = static_cast<WSAPIAddMenuItemRequest&>(request).identifier();
String text = static_cast<WSAPIAddMenuItemRequest&>(request).text();
auto it = m_menus.find(menu_id);
if (it == m_menus.end()) {
ASSERT_NOT_REACHED();
}
auto& menu = *(*it).value;
menu.add_item(make<WSMenuItem>(identifier, move(text)));
GUI_ServerMessage response;
response.type = GUI_ServerMessage::Type::DidAddMenuItem;
response.menu.menu_id = menu_id;
response.menu.identifier = identifier;
WSMessageLoop::the().post_message_to_client(request.client_id(), response);
break;
}
case WSMessage::APIAddMenuSeparatorRequest: {
int menu_id = static_cast<WSAPIAddMenuSeparatorRequest&>(request).menu_id();
auto it = m_menus.find(menu_id);
if (it == m_menus.end()) {
ASSERT_NOT_REACHED();
}
auto& menu = *(*it).value;
menu.add_item(make<WSMenuItem>(WSMenuItem::Separator));
GUI_ServerMessage response;
response.type = GUI_ServerMessage::Type::DidAddMenuSeparator;
response.menu.menu_id = menu_id;
WSMessageLoop::the().post_message_to_client(request.client_id(), response);
break;
}
default:
break;
}
@ -950,28 +979,6 @@ void WSWindowManager::close_menu(WSMenu& menu)
close_current_menu();
}
int WSWindowManager::api$menu_add_separator(int menu_id)
{
LOCKER(m_lock);
auto it = m_menus.find(menu_id);
if (it == m_menus.end())
return -EBADMENU;
auto& menu = *(*it).value;
menu.add_item(make<WSMenuItem>(WSMenuItem::Separator));
return 0;
}
int WSWindowManager::api$menu_add_item(int menu_id, unsigned identifier, String&& text)
{
LOCKER(m_lock);
auto it = m_menus.find(menu_id);
if (it == m_menus.end())
return -EBADMENU;
auto& menu = *(*it).value;
menu.add_item(make<WSMenuItem>(identifier, move(text)));
return 0;
}
int WSWindowManager::active_client_id() const
{
if (m_active_window)