mirror of
https://github.com/SerenityOS/serenity
synced 2024-09-06 17:06:31 +00:00
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:
parent
535e1c9152
commit
695dfabc2e
|
@ -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);
|
||||
}));
|
||||
|
|
Loading…
Reference in a new issue