Selaa lähdekoodia

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.
Olivier De Cannière 2 vuotta sitten
vanhempi
commit
6f69f4bb5e

+ 1 - 0
Userland/Applications/Calendar/main.cpp

@@ -27,6 +27,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
     auto app = TRY(GUI::Application::try_create(arguments));
     auto app = TRY(GUI::Application::try_create(arguments));
 
 
     Config::pledge_domain("Calendar");
     Config::pledge_domain("Calendar");
+    Config::monitor_domain("Calendar");
 
 
     TRY(Core::System::pledge("stdio recvfd sendfd rpath"));
     TRY(Core::System::pledge("stdio recvfd sendfd rpath"));
     TRY(Core::System::unveil("/etc/timezone", "r"));
     TRY(Core::System::unveil("/etc/timezone", "r"));

+ 9 - 0
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;
     auto const& day_names = AK::long_day_names;
     return AK::find_index(day_names.begin(), day_names.end(), day_name);
     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<DayOfWeek>(day_of_week_index(value));
+        update_tiles(m_view_year, m_view_month);
+    }
+}
 }
 }

+ 6 - 1
Userland/Libraries/LibGUI/Calendar.h

@@ -8,13 +8,16 @@
 #pragma once
 #pragma once
 
 
 #include <AK/String.h>
 #include <AK/String.h>
+#include <LibConfig/Listener.h>
 #include <LibCore/DateTime.h>
 #include <LibCore/DateTime.h>
 #include <LibGUI/Frame.h>
 #include <LibGUI/Frame.h>
 #include <LibGUI/Widget.h>
 #include <LibGUI/Widget.h>
 
 
 namespace GUI {
 namespace GUI {
 
 
-class Calendar final : public GUI::Frame {
+class Calendar final
+    : public GUI::Frame
+    , public Config::Listener {
     C_OBJECT(Calendar)
     C_OBJECT(Calendar)
 
 
 public:
 public:
@@ -67,6 +70,8 @@ public:
         m_unadjusted_tile_size.set_height(height);
         m_unadjusted_tile_size.set_height(height);
     }
     }
 
 
+    virtual void config_string_did_change(String const&, String const&, String const&, String const&) override;
+
     Function<void()> on_tile_click;
     Function<void()> on_tile_click;
     Function<void()> on_tile_doubleclick;
     Function<void()> on_tile_doubleclick;
     Function<void()> on_month_click;
     Function<void()> on_month_click;

+ 1 - 0
Userland/Services/Taskbar/main.cpp

@@ -50,6 +50,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
     auto app = TRY(GUI::Application::try_create(arguments));
     auto app = TRY(GUI::Application::try_create(arguments));
     Config::pledge_domains({ "Taskbar", "Calendar" });
     Config::pledge_domains({ "Taskbar", "Calendar" });
     Config::monitor_domain("Taskbar");
     Config::monitor_domain("Taskbar");
+    Config::monitor_domain("Calendar");
     app->event_loop().register_signal(SIGCHLD, [](int) {
     app->event_loop().register_signal(SIGCHLD, [](int) {
         // Wait all available children
         // Wait all available children
         while (waitpid(-1, nullptr, WNOHANG) > 0)
         while (waitpid(-1, nullptr, WNOHANG) > 0)