WindowServer, LibGUI: RefreshSystemTheme implementation

Adds a mechanism through which windowing clients can re-request an
UpdateSystemTheme message. This is currently used in SystemMenu's
ShutdownDialog to refresh it's theme when the dialog is instantiated.
This commit is contained in:
Nick Vella 2021-01-16 15:56:41 +11:00 committed by Andreas Kling
parent fdc9b3c5a0
commit fcf50af53d
Notes: sideshowbarker 2024-07-18 23:36:33 +09:00
5 changed files with 15 additions and 0 deletions

View file

@ -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) {

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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) => ()