From 6f69f4bb5e790b80a0314a8d80bffba3351c966d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20De=20Canni=C3=A8re?= Date: Mon, 19 Sep 2022 21:23:40 +0200 Subject: [PATCH] Calendar: Update month view on first_day_of_week setting change Now when the user changes their preferred first day of the week in the Calendar Settings, the Calendar application and applet views are update accordingly without needing to restart them. --- Userland/Applications/Calendar/main.cpp | 1 + Userland/Libraries/LibGUI/Calendar.cpp | 9 +++++++++ Userland/Libraries/LibGUI/Calendar.h | 7 ++++++- Userland/Services/Taskbar/main.cpp | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Userland/Applications/Calendar/main.cpp b/Userland/Applications/Calendar/main.cpp index 54f0e56042d..a69474281c4 100644 --- a/Userland/Applications/Calendar/main.cpp +++ b/Userland/Applications/Calendar/main.cpp @@ -27,6 +27,7 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app = TRY(GUI::Application::try_create(arguments)); Config::pledge_domain("Calendar"); + Config::monitor_domain("Calendar"); TRY(Core::System::pledge("stdio recvfd sendfd rpath")); TRY(Core::System::unveil("/etc/timezone", "r")); diff --git a/Userland/Libraries/LibGUI/Calendar.cpp b/Userland/Libraries/LibGUI/Calendar.cpp index a9be42687fe..7c12e45debd 100644 --- a/Userland/Libraries/LibGUI/Calendar.cpp +++ b/Userland/Libraries/LibGUI/Calendar.cpp @@ -754,4 +754,13 @@ size_t Calendar::day_of_week_index(String const& day_name) auto const& day_names = AK::long_day_names; return AK::find_index(day_names.begin(), day_names.end(), day_name); } + +void Calendar::config_string_did_change(String const& domain, String const& group, String const& key, String const& value) +{ + VERIFY(domain == "Calendar"); + if (group == "View" && key == "FirstDayOfWeek") { + m_first_day_of_week = static_cast(day_of_week_index(value)); + update_tiles(m_view_year, m_view_month); + } +} } diff --git a/Userland/Libraries/LibGUI/Calendar.h b/Userland/Libraries/LibGUI/Calendar.h index 79c105d913b..56a2c394bf9 100644 --- a/Userland/Libraries/LibGUI/Calendar.h +++ b/Userland/Libraries/LibGUI/Calendar.h @@ -8,13 +8,16 @@ #pragma once #include +#include #include #include #include namespace GUI { -class Calendar final : public GUI::Frame { +class Calendar final + : public GUI::Frame + , public Config::Listener { C_OBJECT(Calendar) public: @@ -67,6 +70,8 @@ public: m_unadjusted_tile_size.set_height(height); } + virtual void config_string_did_change(String const&, String const&, String const&, String const&) override; + Function on_tile_click; Function on_tile_doubleclick; Function on_month_click; diff --git a/Userland/Services/Taskbar/main.cpp b/Userland/Services/Taskbar/main.cpp index 25b817ccffe..6777fda6495 100644 --- a/Userland/Services/Taskbar/main.cpp +++ b/Userland/Services/Taskbar/main.cpp @@ -50,6 +50,7 @@ ErrorOr serenity_main(Main::Arguments arguments) auto app = TRY(GUI::Application::try_create(arguments)); Config::pledge_domains({ "Taskbar", "Calendar" }); Config::monitor_domain("Taskbar"); + Config::monitor_domain("Calendar"); app->event_loop().register_signal(SIGCHLD, [](int) { // Wait all available children while (waitpid(-1, nullptr, WNOHANG) > 0)