diff options
Diffstat (limited to 'Userland')
-rw-r--r-- | Userland/Libraries/LibGUI/Window.cpp | 5 | ||||
-rw-r--r-- | Userland/Libraries/LibGUI/Window.h | 2 | ||||
-rw-r--r-- | Userland/Services/WindowServer/ClientConnection.cpp | 6 | ||||
-rw-r--r-- | Userland/Services/WindowServer/ClientConnection.h | 1 | ||||
-rw-r--r-- | Userland/Services/WindowServer/WindowServer.ipc | 1 |
5 files changed, 15 insertions, 0 deletions
diff --git a/Userland/Libraries/LibGUI/Window.cpp b/Userland/Libraries/LibGUI/Window.cpp index 175bf1da7c..1c124f7dc5 100644 --- a/Userland/Libraries/LibGUI/Window.cpp +++ b/Userland/Libraries/LibGUI/Window.cpp @@ -845,6 +845,11 @@ void Window::schedule_relayout() }); } +void Window::refresh_system_theme() +{ + WindowServerConnection::the().post_message(Messages::WindowServer::RefreshSystemTheme()); +} + void Window::for_each_window(Badge<WindowServerConnection>, Function<void(Window&)> callback) { for (auto& e : *reified_windows) { diff --git a/Userland/Libraries/LibGUI/Window.h b/Userland/Libraries/LibGUI/Window.h index 3b0ba8e2e8..32f16c7ffe 100644 --- a/Userland/Libraries/LibGUI/Window.h +++ b/Userland/Libraries/LibGUI/Window.h @@ -181,6 +181,8 @@ public: void schedule_relayout(); + void refresh_system_theme(); + static void for_each_window(Badge<WindowServerConnection>, Function<void(Window&)>); static void update_all_windows(Badge<WindowServerConnection>); void notify_state_changed(Badge<WindowServerConnection>, bool minimized, bool occluded); diff --git a/Userland/Services/WindowServer/ClientConnection.cpp b/Userland/Services/WindowServer/ClientConnection.cpp index a561a1290c..18fd74c8b3 100644 --- a/Userland/Services/WindowServer/ClientConnection.cpp +++ b/Userland/Services/WindowServer/ClientConnection.cpp @@ -869,6 +869,12 @@ void ClientConnection::handle(const Messages::WindowServer::SetWindowProgress& m it->value->set_progress(message.progress()); } +void ClientConnection::handle(const Messages::WindowServer::RefreshSystemTheme&) +{ + // Post the client an UpdateSystemTheme message to refresh its theme. + post_message(Messages::WindowClient::UpdateSystemTheme(Gfx::current_system_theme_buffer_id())); +} + void ClientConnection::handle(const Messages::WindowServer::Pong&) { m_ping_timer = nullptr; diff --git a/Userland/Services/WindowServer/ClientConnection.h b/Userland/Services/WindowServer/ClientConnection.h index 12174e9189..40aa3839a4 100644 --- a/Userland/Services/WindowServer/ClientConnection.h +++ b/Userland/Services/WindowServer/ClientConnection.h @@ -143,6 +143,7 @@ private: virtual void handle(const Messages::WindowServer::EnableDisplayLink&) override; virtual void handle(const Messages::WindowServer::DisableDisplayLink&) override; virtual void handle(const Messages::WindowServer::SetWindowProgress&) override; + virtual void handle(const Messages::WindowServer::RefreshSystemTheme&) override; virtual void handle(const Messages::WindowServer::Pong&) override; virtual OwnPtr<Messages::WindowServer::GetGlobalCursorPositionResponse> handle(const Messages::WindowServer::GetGlobalCursorPosition&) override; virtual OwnPtr<Messages::WindowServer::SetMouseAccelerationResponse> handle(const Messages::WindowServer::SetMouseAcceleration&) override; diff --git a/Userland/Services/WindowServer/WindowServer.ipc b/Userland/Services/WindowServer/WindowServer.ipc index efda3e41b1..3ab9feed6c 100644 --- a/Userland/Services/WindowServer/WindowServer.ipc +++ b/Userland/Services/WindowServer/WindowServer.ipc @@ -98,6 +98,7 @@ endpoint WindowServer = 2 SetSystemTheme(String theme_path, [UTF8] String theme_name) => (bool success) GetSystemTheme() => ([UTF8] String theme_name) + RefreshSystemTheme() =| SetWindowBaseSizeAndSizeIncrement(i32 window_id, Gfx::IntSize base_size, Gfx::IntSize size_increment) => () SetWindowResizeAspectRatio(i32 window_id, Optional<Gfx::IntSize> resize_aspect_ratio) => () |