diff --git a/Libraries/LibGUI/Window.cpp b/Libraries/LibGUI/Window.cpp index d4a60148d0..2a8fad3568 100644 --- a/Libraries/LibGUI/Window.cpp +++ b/Libraries/LibGUI/Window.cpp @@ -670,4 +670,22 @@ Action* Window::action_for_key_event(const KeyEvent& event) return found_action; } +void Window::set_base_size(const Gfx::Size& base_size) +{ + if (m_base_size == base_size) + return; + m_base_size = base_size; + if (m_window_id) + WindowServerConnection::the().send_sync(m_window_id, m_base_size, m_size_increment); +} + +void Window::set_size_increment(const Gfx::Size& size_increment) +{ + if (m_size_increment == size_increment) + return; + m_size_increment = size_increment; + if (m_window_id) + WindowServerConnection::the().send_sync(m_window_id, m_base_size, m_size_increment); +} + } diff --git a/Libraries/LibGUI/Window.h b/Libraries/LibGUI/Window.h index 33f7e1d689..65db147a96 100644 --- a/Libraries/LibGUI/Window.h +++ b/Libraries/LibGUI/Window.h @@ -148,9 +148,9 @@ public: Gfx::Bitmap* back_bitmap() { return m_back_bitmap.ptr(); } Gfx::Size size_increment() const { return m_size_increment; } - void set_size_increment(const Gfx::Size& increment) { m_size_increment = increment; } + void set_size_increment(const Gfx::Size&); Gfx::Size base_size() const { return m_base_size; } - void set_base_size(const Gfx::Size& size) { m_base_size = size; } + void set_base_size(const Gfx::Size&); void set_override_cursor(StandardCursor); diff --git a/Servers/WindowServer/ClientConnection.cpp b/Servers/WindowServer/ClientConnection.cpp index 910e9ef919..766dbcd964 100644 --- a/Servers/WindowServer/ClientConnection.cpp +++ b/Servers/WindowServer/ClientConnection.cpp @@ -714,4 +714,19 @@ void ClientConnection::deboost() perror("deboost: set_process_boost"); } +OwnPtr ClientConnection::handle(const Messages::WindowServer::SetWindowBaseSizeAndSizeIncrement& message) +{ + auto it = m_windows.find(message.window_id()); + if (it == m_windows.end()) { + did_misbehave("SetWindowBaseSizeAndSizeIncrementResponse: Bad window ID"); + return nullptr; + } + + auto& window = *it->value; + window.set_base_size(message.base_size()); + window.set_size_increment(message.size_increment()); + + return make(); +} + } diff --git a/Servers/WindowServer/ClientConnection.h b/Servers/WindowServer/ClientConnection.h index 9c00593f29..b17c384b21 100644 --- a/Servers/WindowServer/ClientConnection.h +++ b/Servers/WindowServer/ClientConnection.h @@ -116,6 +116,7 @@ private: virtual OwnPtr handle(const Messages::WindowServer::StartDrag&) override; virtual OwnPtr handle(const Messages::WindowServer::SetSystemMenu&) override; virtual OwnPtr handle(const Messages::WindowServer::SetSystemTheme&) override; + virtual OwnPtr handle(const Messages::WindowServer::SetWindowBaseSizeAndSizeIncrement&) override; HashMap> m_windows; HashMap> m_menubars; diff --git a/Servers/WindowServer/WindowServer.ipc b/Servers/WindowServer/WindowServer.ipc index ab70c9d307..e742a16cf4 100644 --- a/Servers/WindowServer/WindowServer.ipc +++ b/Servers/WindowServer/WindowServer.ipc @@ -83,4 +83,6 @@ endpoint WindowServer = 2 StartDrag(String text, String data_type, String data, i32 bitmap_id, Gfx::Size bitmap_size) => (bool started) SetSystemTheme(String theme_path, String theme_name) => (bool success) + + SetWindowBaseSizeAndSizeIncrement(i32 window_id, Gfx::Size base_size, Gfx::Size size_increment) => () }