1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 20:17:44 +00:00

WindowServer+LibGUI: Make menu allocation asynchronous

This was only synchronous since WindowServer managed the ID allocation.
Doing this on the client side instead allows us to make create_menu()
an asynchronous IPC call, removing a bunch of IPC stalls during
application startup.
This commit is contained in:
Andreas Kling 2021-05-17 13:26:40 +02:00
parent 52054eb922
commit baab0a5bef
4 changed files with 9 additions and 7 deletions

View file

@ -99,12 +99,10 @@ void ClientConnection::destroy_menubar(i32 menubar_id)
m_menubars.remove(it);
}
Messages::WindowServer::CreateMenuResponse ClientConnection::create_menu(String const& menu_title)
void ClientConnection::create_menu(i32 menu_id, String const& menu_title)
{
int menu_id = m_next_menu_id++;
auto menu = Menu::construct(this, menu_id, menu_title);
m_menus.set(menu_id, move(menu));
return menu_id;
}
void ClientConnection::destroy_menu(i32 menu_id)

View file

@ -91,7 +91,7 @@ private:
virtual Messages::WindowServer::GreetResponse greet() override;
virtual Messages::WindowServer::CreateMenubarResponse create_menubar() override;
virtual void destroy_menubar(i32) override;
virtual Messages::WindowServer::CreateMenuResponse create_menu(String const&) override;
virtual void create_menu(i32, String const&) override;
virtual void destroy_menu(i32) override;
virtual void add_menu_to_menubar(i32, i32) override;
virtual void set_window_menubar(i32, i32) override;
@ -161,7 +161,6 @@ private:
RefPtr<Core::Timer> m_ping_timer;
int m_next_menubar_id { 10000 };
int m_next_menu_id { 20000 };
int m_next_window_id { 1982 };
bool m_has_display_link { false };

View file

@ -5,7 +5,7 @@ endpoint WindowServer
create_menubar() => (i32 menubar_id)
destroy_menubar(i32 menubar_id) =|
create_menu([UTF8] String menu_title) => (i32 menu_id)
create_menu(i32 menu_id, [UTF8] String menu_title) =|
destroy_menu(i32 menu_id) =|
add_menu_to_menubar(i32 menubar_id, i32 menu_id) =|