From 2f7dc29ab7974510e5966ec7cff470ed06990253 Mon Sep 17 00:00:00 2001 From: Marcus Nilsson Date: Sun, 6 Jun 2021 21:50:06 +0200 Subject: [PATCH] LibGUI/WindowServer: Add set_maximized IPC call Add an IPC call to enable the client to manually maximize it's own window. --- Userland/Libraries/LibGUI/Window.cpp | 5 +++++ Userland/Libraries/LibGUI/Window.h | 1 + Userland/Services/WindowServer/ClientConnection.cpp | 10 ++++++++++ Userland/Services/WindowServer/ClientConnection.h | 1 + Userland/Services/WindowServer/WindowServer.ipc | 1 + 5 files changed, 18 insertions(+) diff --git a/Userland/Libraries/LibGUI/Window.cpp b/Userland/Libraries/LibGUI/Window.cpp index 66a8258e0b..02622d6c98 100644 --- a/Userland/Libraries/LibGUI/Window.cpp +++ b/Userland/Libraries/LibGUI/Window.cpp @@ -915,6 +915,11 @@ bool Window::is_maximized() const return WindowServerConnection::the().is_maximized(m_window_id); } +void Window::set_maximized(bool maximized) +{ + WindowServerConnection::the().async_set_maximized(m_window_id, maximized); +} + void Window::schedule_relayout() { if (m_layout_pending) diff --git a/Userland/Libraries/LibGUI/Window.h b/Userland/Libraries/LibGUI/Window.h index 904eec1234..987dac4e8b 100644 --- a/Userland/Libraries/LibGUI/Window.h +++ b/Userland/Libraries/LibGUI/Window.h @@ -40,6 +40,7 @@ public: void set_fullscreen(bool); bool is_maximized() const; + void set_maximized(bool); bool is_frameless() const { return m_frameless; } void set_frameless(bool); diff --git a/Userland/Services/WindowServer/ClientConnection.cpp b/Userland/Services/WindowServer/ClientConnection.cpp index 6fa36dd954..e8ffe7d9ef 100644 --- a/Userland/Services/WindowServer/ClientConnection.cpp +++ b/Userland/Services/WindowServer/ClientConnection.cpp @@ -332,6 +332,16 @@ Messages::WindowServer::IsMaximizedResponse ClientConnection::is_maximized(i32 w return it->value->is_maximized(); } +void ClientConnection::set_maximized(i32 window_id, bool maximized) +{ + auto it = m_windows.find(window_id); + if (it == m_windows.end()) { + did_misbehave("SetMaximized: Bad window ID"); + return; + } + it->value->set_maximized(maximized); +} + void ClientConnection::set_window_icon_bitmap(i32 window_id, Gfx::ShareableBitmap const& icon) { auto it = m_windows.find(window_id); diff --git a/Userland/Services/WindowServer/ClientConnection.h b/Userland/Services/WindowServer/ClientConnection.h index 4971b29359..045fc25b07 100644 --- a/Userland/Services/WindowServer/ClientConnection.h +++ b/Userland/Services/WindowServer/ClientConnection.h @@ -104,6 +104,7 @@ private: virtual void set_window_title(i32, String const&) override; virtual Messages::WindowServer::GetWindowTitleResponse get_window_title(i32) override; virtual Messages::WindowServer::IsMaximizedResponse is_maximized(i32) override; + virtual void set_maximized(i32, bool) override; virtual void start_window_resize(i32) override; virtual Messages::WindowServer::SetWindowRectResponse set_window_rect(i32, Gfx::IntRect const&) override; virtual Messages::WindowServer::GetWindowRectResponse get_window_rect(i32) override; diff --git a/Userland/Services/WindowServer/WindowServer.ipc b/Userland/Services/WindowServer/WindowServer.ipc index efddf3c2f2..908c060797 100644 --- a/Userland/Services/WindowServer/WindowServer.ipc +++ b/Userland/Services/WindowServer/WindowServer.ipc @@ -68,6 +68,7 @@ endpoint WindowServer start_window_resize(i32 window_id) =| is_maximized(i32 window_id) => (bool maximized) + set_maximized(i32 window_id, bool maximized) =| invalidate_rect(i32 window_id, Vector rects, bool ignore_occlusion) =| did_finish_painting(i32 window_id, Vector rects) =|