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.
This commit is contained in:
networkException 2022-06-16 16:41:43 +02:00 committed by Linus Groh
parent 535e1c9152
commit 695dfabc2e

View file

@ -1,5 +1,6 @@
/*
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2022, Jakob-Niklas See <git@nwex.de>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@ -20,6 +21,7 @@
#include <LibGUI/ConnectionToWindowManagerServer.h>
#include <LibGUI/ConnectionToWindowServer.h>
#include <LibGUI/Menu.h>
#include <LibGUI/MenuItem.h>
#include <LibGUI/Process.h>
#include <LibGfx/SystemTheme.h>
#include <LibMain/Main.h>
@ -241,6 +243,16 @@ ErrorOr<NonnullRefPtr<GUI::Menu>> 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);
}));