From 695dfabc2ec2648931dba5c4d1c457aea728c43d Mon Sep 17 00:00:00 2001 From: networkException Date: Thu, 16 Jun 2022 16:41:43 +0200 Subject: [PATCH] Taskbar: Update checked state of theme menu on global theme change Previously we would assume that the theme would only change through the taskbar menu. As the theme can also be changed in DisplaySettings, the selected theme in the taskbar menu would get out of sync. With this patch the menu will get updated every time the theme changes and the menu is not shown. --- Userland/Services/Taskbar/main.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Userland/Services/Taskbar/main.cpp b/Userland/Services/Taskbar/main.cpp index 19720fde75..2fcc93ade0 100644 --- a/Userland/Services/Taskbar/main.cpp +++ b/Userland/Services/Taskbar/main.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2018-2021, Andreas Kling + * Copyright (c) 2022, Jakob-Niklas See * * SPDX-License-Identifier: BSD-2-Clause */ @@ -20,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -241,6 +243,16 @@ ErrorOr> build_system_menu(WindowRefence& window_ref) } } + GUI::Application::the()->on_theme_change = [&]() { + if (g_themes_menu->is_visible()) + return; + auto current_theme_name = GUI::ConnectionToWindowServer::the().get_system_theme(); + for (size_t index = 0; index < g_themes.size(); ++index) { + auto* action = g_themes_menu->action_at(index); + action->set_checked(action->text() == current_theme_name); + } + }; + system_menu->add_action(GUI::Action::create("&Settings", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-settings.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) { GUI::Process::spawn_or_show_error(window_ref.get(), "/bin/Settings"sv); }));