diff --git a/Userland/Services/WindowServer/AppletManager.cpp b/Userland/Services/WindowServer/AppletManager.cpp index 7a5993b71d..6fef36963e 100644 --- a/Userland/Services/WindowServer/AppletManager.cpp +++ b/Userland/Services/WindowServer/AppletManager.cpp @@ -152,11 +152,29 @@ void AppletManager::relayout() if (m_window->rect() == rect) return; m_window->set_rect(rect); + + repaint(); + + WindowManager::the().tell_wm_listeners_applet_area_size_changed(rect.size()); +} + +void AppletManager::repaint() +{ + if (!m_window) { + return; + } + + auto rect = Gfx::IntRect { { 0, 0 }, m_window->size() }; + if (!rect.is_empty()) { Gfx::Painter painter(*m_window->backing_store()); - painter.fill_rect({ { 0, 0 }, rect.size() }, WindowManager::the().palette().window()); + painter.fill_rect(rect, WindowManager::the().palette().window()); } - WindowManager::the().tell_wm_listeners_applet_area_size_changed(rect.size()); +} + +void AppletManager::did_change_theme() +{ + repaint(); } void AppletManager::remove_applet(Window& applet) diff --git a/Userland/Services/WindowServer/AppletManager.h b/Userland/Services/WindowServer/AppletManager.h index 2b3cdd2757..0821b5e655 100644 --- a/Userland/Services/WindowServer/AppletManager.h +++ b/Userland/Services/WindowServer/AppletManager.h @@ -52,7 +52,10 @@ public: Window* window() { return m_window; } const Window* window() const { return m_window; } + void did_change_theme(); + private: + void repaint(); void draw_applet(const Window& applet); void set_hovered_applet(Window*); diff --git a/Userland/Services/WindowServer/WindowManager.cpp b/Userland/Services/WindowServer/WindowManager.cpp index bdc4a1478d..504111eb5c 100644 --- a/Userland/Services/WindowServer/WindowManager.cpp +++ b/Userland/Services/WindowServer/WindowManager.cpp @@ -1525,6 +1525,7 @@ bool WindowManager::update_theme(String theme_path, String theme_name) return IterationDecision::Continue; }); MenuManager::the().did_change_theme(); + AppletManager::the().did_change_theme(); auto wm_config = Core::ConfigFile::open("/etc/WindowServer/WindowServer.ini"); wm_config->write_entry("Theme", "Name", theme_name); wm_config->sync();