mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:47:45 +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 changed files with 12 additions and 0 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue