From ede5c9548e55d8216dba21ed431b9e53d085a248 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 24 Jan 2022 16:12:19 -0500 Subject: [PATCH] Userland: Invoke tzset in applications that care about time zones In most applications, we invoke tzset once at startup for now. Most of these are short lived and don't need to know about time zone changes. The exception is the ClockWidget in the taskbar. Here, we invoke tzset each time we update the system time. This way, any time zone changes can take effect immediately. --- Userland/Applications/AnalogClock/main.cpp | 3 +++ Userland/Applications/Browser/main.cpp | 3 +++ Userland/Applications/Calendar/main.cpp | 3 +++ Userland/Services/RequestServer/main.cpp | 3 +++ Userland/Services/Taskbar/ClockWidget.h | 6 +++++- Userland/Services/WebContent/main.cpp | 3 +++ Userland/Utilities/date.cpp | 2 ++ Userland/Utilities/ddate.cpp | 3 +++ Userland/Utilities/fortune.cpp | 3 +++ Userland/Utilities/js.cpp | 3 +++ Userland/Utilities/w.cpp | 2 ++ 11 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Userland/Applications/AnalogClock/main.cpp b/Userland/Applications/AnalogClock/main.cpp index 719103410e8..426d84a5f6e 100644 --- a/Userland/Applications/AnalogClock/main.cpp +++ b/Userland/Applications/AnalogClock/main.cpp @@ -14,6 +14,7 @@ #include #include #include +#include ErrorOr serenity_main(Main::Arguments arguments) { @@ -24,6 +25,8 @@ ErrorOr serenity_main(Main::Arguments arguments) TRY(Core::System::unveil("/res", "r")); TRY(Core::System::unveil(nullptr, nullptr)); + tzset(); + auto app_icon = TRY(GUI::Icon::try_create_default_icon("app-analog-clock")); auto window = TRY(GUI::Window::try_create()); window->set_title(Core::DateTime::now().to_string("%Y-%m-%d")); diff --git a/Userland/Applications/Browser/main.cpp b/Userland/Applications/Browser/main.cpp index 413bb68059f..cbba6d7552f 100644 --- a/Userland/Applications/Browser/main.cpp +++ b/Userland/Applications/Browser/main.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include namespace Browser { @@ -82,6 +83,8 @@ ErrorOr serenity_main(Main::Arguments arguments) TRY(Core::System::unveil("/tmp/portal/request", "rw")); TRY(Core::System::unveil(nullptr, nullptr)); + tzset(); + auto app_icon = GUI::Icon::default_icon("app-browser"); Browser::g_home_url = Config::read_string("Browser", "Preferences", "Home", "file:///res/html/misc/welcome.html"); diff --git a/Userland/Applications/Calendar/main.cpp b/Userland/Applications/Calendar/main.cpp index 57aceb613e6..3270a8ac4f9 100644 --- a/Userland/Applications/Calendar/main.cpp +++ b/Userland/Applications/Calendar/main.cpp @@ -19,6 +19,7 @@ #include #include #include +#include ErrorOr serenity_main(Main::Arguments arguments) { @@ -31,6 +32,8 @@ ErrorOr serenity_main(Main::Arguments arguments) TRY(Core::System::unveil("/res", "r")); TRY(Core::System::unveil(nullptr, nullptr)); + tzset(); + auto app_icon = TRY(GUI::Icon::try_create_default_icon("app-calendar")); auto window = TRY(GUI::Window::try_create()); window->set_title("Calendar"); diff --git a/Userland/Services/RequestServer/main.cpp b/Userland/Services/RequestServer/main.cpp index c9b1884b635..9972401f5ff 100644 --- a/Userland/Services/RequestServer/main.cpp +++ b/Userland/Services/RequestServer/main.cpp @@ -16,6 +16,7 @@ #include #include #include +#include ErrorOr serenity_main(Main::Arguments) { @@ -32,6 +33,8 @@ ErrorOr serenity_main(Main::Arguments) TRY(Core::System::unveil("/etc/timezone", "r")); TRY(Core::System::unveil(nullptr, nullptr)); + tzset(); + [[maybe_unused]] auto gemini = make(); [[maybe_unused]] auto http = make(); [[maybe_unused]] auto https = make(); diff --git a/Userland/Services/Taskbar/ClockWidget.h b/Userland/Services/Taskbar/ClockWidget.h index da9962486b6..0e8eafae543 100644 --- a/Userland/Services/Taskbar/ClockWidget.h +++ b/Userland/Services/Taskbar/ClockWidget.h @@ -30,7 +30,11 @@ private: virtual void paint_event(GUI::PaintEvent&) override; virtual void mousedown_event(GUI::MouseEvent&) override; - void tick_clock() { update(); } + void tick_clock() + { + tzset(); + update(); + } void open(); void close(); diff --git a/Userland/Services/WebContent/main.cpp b/Userland/Services/WebContent/main.cpp index 2c51f2f761a..02d04d47867 100644 --- a/Userland/Services/WebContent/main.cpp +++ b/Userland/Services/WebContent/main.cpp @@ -10,6 +10,7 @@ #include #include #include +#include ErrorOr serenity_main(Main::Arguments) { @@ -22,6 +23,8 @@ ErrorOr serenity_main(Main::Arguments) TRY(Core::System::unveil("/tmp/portal/websocket", "rw")); TRY(Core::System::unveil(nullptr, nullptr)); + tzset(); + auto client = TRY(IPC::take_over_accepted_client_from_system_server()); return event_loop.exec(); } diff --git a/Userland/Utilities/date.cpp b/Userland/Utilities/date.cpp index 12d6bae4208..28ae833449c 100644 --- a/Userland/Utilities/date.cpp +++ b/Userland/Utilities/date.cpp @@ -29,6 +29,8 @@ ErrorOr serenity_main(Main::Arguments arguments) args_parser.add_option(print_rfc_5322, "Print date in RFC 5322 format", "rfc-5322", 'R'); args_parser.parse(arguments); + tzset(); + if (set_date != nullptr) { auto number = String(set_date).to_uint(); diff --git a/Userland/Utilities/ddate.cpp b/Userland/Utilities/ddate.cpp index 9e7d8ce66be..e6f5c3c63aa 100644 --- a/Userland/Utilities/ddate.cpp +++ b/Userland/Utilities/ddate.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include class DiscordianDate { @@ -104,6 +105,8 @@ ErrorOr serenity_main(Main::Arguments) { TRY(Core::System::pledge("stdio rpath")); + tzset(); + auto date = Core::DateTime::now(); outln("Today is {}", DiscordianDate(date).to_string()); diff --git a/Userland/Utilities/fortune.cpp b/Userland/Utilities/fortune.cpp index 324ec17874b..5d5aac36412 100644 --- a/Userland/Utilities/fortune.cpp +++ b/Userland/Utilities/fortune.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include class Quote { @@ -87,6 +88,8 @@ ErrorOr serenity_main(Main::Arguments arguments) TRY(Core::System::unveil("/etc/timezone", "r")); TRY(Core::System::unveil(nullptr, nullptr)); + tzset(); + auto file_contents = file->read_all(); auto json = TRY(JsonValue::from_string(file_contents)); if (!json.is_array()) { diff --git a/Userland/Utilities/js.cpp b/Userland/Utilities/js.cpp index c77c563f802..66bec4ccb7b 100644 --- a/Userland/Utilities/js.cpp +++ b/Userland/Utilities/js.cpp @@ -68,6 +68,7 @@ #include #include #include +#include #include RefPtr vm; @@ -1287,6 +1288,8 @@ ErrorOr serenity_main(Main::Arguments arguments) args_parser.add_positional_argument(script_paths, "Path to script files", "scripts", Core::ArgsParser::Required::No); args_parser.parse(arguments); + tzset(); + bool syntax_highlight = !disable_syntax_highlight; vm = JS::VM::create(); diff --git a/Userland/Utilities/w.cpp b/Userland/Utilities/w.cpp index 2d4ed240f1f..f59d7fc888b 100644 --- a/Userland/Utilities/w.cpp +++ b/Userland/Utilities/w.cpp @@ -25,6 +25,8 @@ ErrorOr serenity_main(Main::Arguments) TRY(Core::System::unveil("/proc", "r")); TRY(Core::System::unveil(nullptr, nullptr)); + tzset(); + auto file = TRY(Core::File::open("/var/run/utmp", Core::OpenMode::ReadOnly)); auto json = TRY(JsonValue::from_string(file->read_all())); if (!json.is_object()) {