summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Libraries/LibGUI/Window.cpp5
-rw-r--r--Userland/Libraries/LibGUI/Window.h2
-rw-r--r--Userland/Services/WindowServer/ClientConnection.cpp6
-rw-r--r--Userland/Services/WindowServer/ClientConnection.h1
-rw-r--r--Userland/Services/WindowServer/WindowServer.ipc1
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) => ()