diff options
author | thankyouverycool <66646555+thankyouverycool@users.noreply.github.com> | 2020-07-24 16:16:30 -0400 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-07-26 11:32:12 +0200 |
commit | c50f258b7a9cb56ab6de3c06c95b6d67212c9daf (patch) | |
tree | 34c9c8ab7c7c9ac8d6569c018cafdfd2dd58c3ec | |
parent | 030f4150b83e04cf84a228f6f816b9481ecabc10 (diff) | |
download | serenity-c50f258b7a9cb56ab6de3c06c95b6d67212c9daf.zip |
LibGUI+WindowServer: Allow applets to retrieve their location
MenuApplet windows can now call rect_in_menubar to return their
location in the MenuBar.
-rw-r--r-- | Libraries/LibGUI/Window.cpp | 6 | ||||
-rw-r--r-- | Libraries/LibGUI/Window.h | 1 | ||||
-rw-r--r-- | Services/WindowServer/ClientConnection.cpp | 11 | ||||
-rw-r--r-- | Services/WindowServer/ClientConnection.h | 1 | ||||
-rw-r--r-- | Services/WindowServer/WindowServer.ipc | 2 |
5 files changed, 21 insertions, 0 deletions
diff --git a/Libraries/LibGUI/Window.cpp b/Libraries/LibGUI/Window.cpp index 30d4473de6..f590184ff2 100644 --- a/Libraries/LibGUI/Window.cpp +++ b/Libraries/LibGUI/Window.cpp @@ -177,6 +177,12 @@ String Window::title() const return WindowServerConnection::the().send_sync<Messages::WindowServer::GetWindowTitle>(m_window_id)->title(); } +Gfx::IntRect Window::rect_in_menubar() const +{ + ASSERT(m_window_type == WindowType::MenuApplet); + return WindowServerConnection::the().send_sync<Messages::WindowServer::GetWindowRectInMenubar>(m_window_id)->rect(); +} + Gfx::IntRect Window::rect() const { if (!is_visible()) diff --git a/Libraries/LibGUI/Window.h b/Libraries/LibGUI/Window.h index b6e8688978..a13e51b651 100644 --- a/Libraries/LibGUI/Window.h +++ b/Libraries/LibGUI/Window.h @@ -107,6 +107,7 @@ public: int height() const { return rect().height(); } Gfx::IntRect rect() const; + Gfx::IntRect rect_in_menubar() const; Gfx::IntSize size() const { return rect().size(); } void set_rect(const Gfx::IntRect&); void set_rect(int x, int y, int width, int height) { set_rect({ x, y, width, height }); } diff --git a/Services/WindowServer/ClientConnection.cpp b/Services/WindowServer/ClientConnection.cpp index 9bbc8d6b7c..ee7ffbd76a 100644 --- a/Services/WindowServer/ClientConnection.cpp +++ b/Services/WindowServer/ClientConnection.cpp @@ -424,6 +424,17 @@ OwnPtr<Messages::WindowServer::GetWindowRectResponse> ClientConnection::handle(c return make<Messages::WindowServer::GetWindowRectResponse>(it->value->rect()); } +OwnPtr<Messages::WindowServer::GetWindowRectInMenubarResponse> ClientConnection::handle(const Messages::WindowServer::GetWindowRectInMenubar& message) +{ + int window_id = message.window_id(); + auto it = m_windows.find(window_id); + if (it == m_windows.end()) { + did_misbehave("GetWindowRectInMenubar: Bad window ID"); + return nullptr; + } + return make<Messages::WindowServer::GetWindowRectInMenubarResponse>(it->value->rect_in_menubar()); +} + Window* ClientConnection::window_from_id(i32 window_id) { auto it = m_windows.find(window_id); diff --git a/Services/WindowServer/ClientConnection.h b/Services/WindowServer/ClientConnection.h index 7c5ff5aeca..d5b261329b 100644 --- a/Services/WindowServer/ClientConnection.h +++ b/Services/WindowServer/ClientConnection.h @@ -109,6 +109,7 @@ private: virtual OwnPtr<Messages::WindowServer::IsMaximizedResponse> handle(const Messages::WindowServer::IsMaximized&) override; virtual OwnPtr<Messages::WindowServer::SetWindowRectResponse> handle(const Messages::WindowServer::SetWindowRect&) override; virtual OwnPtr<Messages::WindowServer::GetWindowRectResponse> handle(const Messages::WindowServer::GetWindowRect&) override; + virtual OwnPtr<Messages::WindowServer::GetWindowRectInMenubarResponse> handle(const Messages::WindowServer::GetWindowRectInMenubar&) override; virtual void handle(const Messages::WindowServer::InvalidateRect&) override; virtual void handle(const Messages::WindowServer::DidFinishPainting&) override; virtual OwnPtr<Messages::WindowServer::SetGlobalCursorTrackingResponse> handle(const Messages::WindowServer::SetGlobalCursorTracking&) override; diff --git a/Services/WindowServer/WindowServer.ipc b/Services/WindowServer/WindowServer.ipc index a0b34bf9ee..b06ac6de3c 100644 --- a/Services/WindowServer/WindowServer.ipc +++ b/Services/WindowServer/WindowServer.ipc @@ -56,6 +56,8 @@ endpoint WindowServer = 2 SetWindowRect(i32 window_id, Gfx::IntRect rect) => (Gfx::IntRect rect) GetWindowRect(i32 window_id) => (Gfx::IntRect rect) + GetWindowRectInMenubar(i32 window_id) => (Gfx::IntRect rect) + IsMaximized(i32 window_id) => (bool maximized) InvalidateRect(i32 window_id, Vector<Gfx::IntRect> rects, bool ignore_occlusion) =| |