From e76771bfad3afbe3c32b8aff12304fa6f45a3452 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 25 Mar 2021 21:01:19 +0100 Subject: WindowServer+LibGfx: Show menus in windows! :^) This patch begins the transition away from the global menu towards per-window menus instead. The global menu looks neat, but has always felt clunky, and there are a number of usability problems with it, especially in programs with multiple windows. You can now call GUI::Window::set_menubar() to add a menubar to your window. It will be specific to that one window only. --- Userland/Libraries/LibGUI/Window.cpp | 10 ++++++++++ Userland/Libraries/LibGUI/Window.h | 4 ++++ 2 files changed, 14 insertions(+) (limited to 'Userland/Libraries/LibGUI') diff --git a/Userland/Libraries/LibGUI/Window.cpp b/Userland/Libraries/LibGUI/Window.cpp index b375ac5d80..a7f3c79911 100644 --- a/Userland/Libraries/LibGUI/Window.cpp +++ b/Userland/Libraries/LibGUI/Window.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -1052,4 +1053,13 @@ Gfx::Bitmap* Window::back_bitmap() return m_back_store ? &m_back_store->bitmap() : nullptr; } +void Window::set_menubar(RefPtr menubar) +{ + if (m_menubar == menubar) + return; + m_menubar = move(menubar); + if (m_window_id && m_menubar) + WindowServerConnection::the().send_sync(m_window_id, m_menubar->menubar_id()); +} + } diff --git a/Userland/Libraries/LibGUI/Window.h b/Userland/Libraries/LibGUI/Window.h index 516a07b100..306788d8e7 100644 --- a/Userland/Libraries/LibGUI/Window.h +++ b/Userland/Libraries/LibGUI/Window.h @@ -211,6 +211,8 @@ public: void did_disable_focused_widget(Badge); + void set_menubar(RefPtr); + protected: Window(Core::Object* parent = nullptr); virtual void wm_event(WMEvent&); @@ -241,6 +243,8 @@ private: OwnPtr m_front_store; OwnPtr m_back_store; + RefPtr m_menubar; + RefPtr m_icon; RefPtr m_custom_cursor; int m_window_id { 0 }; -- cgit v1.2.3