diff --git a/Userland/Libraries/LibGUI/Menubar.cpp b/Userland/Libraries/LibGUI/Menubar.cpp index c347bdf81b..857f7acd25 100644 --- a/Userland/Libraries/LibGUI/Menubar.cpp +++ b/Userland/Libraries/LibGUI/Menubar.cpp @@ -5,6 +5,7 @@ */ #include +#include #include #include #include @@ -12,6 +13,8 @@ namespace GUI { +static IDAllocator s_menubar_id_allocator; + Menubar::Menubar() { } @@ -30,7 +33,9 @@ Menu& Menubar::add_menu(String name) int Menubar::realize_menubar() { - return WindowServerConnection::the().create_menubar(); + auto menubar_id = s_menubar_id_allocator.allocate(); + WindowServerConnection::the().async_create_menubar(menubar_id); + return menubar_id; } void Menubar::unrealize_menubar() diff --git a/Userland/Services/WindowServer/ClientConnection.cpp b/Userland/Services/WindowServer/ClientConnection.cpp index c98a2d1b0e..923e5f4834 100644 --- a/Userland/Services/WindowServer/ClientConnection.cpp +++ b/Userland/Services/WindowServer/ClientConnection.cpp @@ -81,12 +81,10 @@ void ClientConnection::notify_about_new_screen_rect(Gfx::IntRect const& rect) async_screen_rect_changed(rect); } -Messages::WindowServer::CreateMenubarResponse ClientConnection::create_menubar() +void ClientConnection::create_menubar(i32 menubar_id) { - int menubar_id = m_next_menubar_id++; auto menubar = Menubar::create(*this, menubar_id); m_menubars.set(menubar_id, move(menubar)); - return menubar_id; } void ClientConnection::destroy_menubar(i32 menubar_id) diff --git a/Userland/Services/WindowServer/ClientConnection.h b/Userland/Services/WindowServer/ClientConnection.h index 594ce56c16..9b2c75ec17 100644 --- a/Userland/Services/WindowServer/ClientConnection.h +++ b/Userland/Services/WindowServer/ClientConnection.h @@ -89,7 +89,7 @@ private: void destroy_window(Window&, Vector& destroyed_window_ids); virtual Messages::WindowServer::GreetResponse greet() override; - virtual Messages::WindowServer::CreateMenubarResponse create_menubar() override; + virtual void create_menubar(i32) override; virtual void destroy_menubar(i32) override; virtual void create_menu(i32, String const&) override; virtual void destroy_menu(i32) override; @@ -160,7 +160,6 @@ private: RefPtr m_ping_timer; - int m_next_menubar_id { 10000 }; int m_next_window_id { 1982 }; bool m_has_display_link { false }; diff --git a/Userland/Services/WindowServer/WindowServer.ipc b/Userland/Services/WindowServer/WindowServer.ipc index c2d2b1c78a..704c3338b0 100644 --- a/Userland/Services/WindowServer/WindowServer.ipc +++ b/Userland/Services/WindowServer/WindowServer.ipc @@ -2,7 +2,7 @@ endpoint WindowServer { greet() => (Gfx::IntRect screen_rect, Core::AnonymousBuffer theme_buffer) - create_menubar() => (i32 menubar_id) + create_menubar(i32 menubar_id) =| destroy_menubar(i32 menubar_id) =| create_menu(i32 menu_id, [UTF8] String menu_title) =|