1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-30 17:28:10 +00:00

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.
This commit is contained in:
Timothy Flynn 2022-01-24 16:12:19 -05:00 committed by Linus Groh
parent 010ec36d20
commit ede5c9548e
11 changed files with 33 additions and 1 deletions

View file

@ -14,6 +14,7 @@
#include <LibGUI/Menubar.h> #include <LibGUI/Menubar.h>
#include <LibGUI/Window.h> #include <LibGUI/Window.h>
#include <LibMain/Main.h> #include <LibMain/Main.h>
#include <time.h>
ErrorOr<int> serenity_main(Main::Arguments arguments) ErrorOr<int> serenity_main(Main::Arguments arguments)
{ {
@ -24,6 +25,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
TRY(Core::System::unveil("/res", "r")); TRY(Core::System::unveil("/res", "r"));
TRY(Core::System::unveil(nullptr, nullptr)); TRY(Core::System::unveil(nullptr, nullptr));
tzset();
auto app_icon = TRY(GUI::Icon::try_create_default_icon("app-analog-clock")); auto app_icon = TRY(GUI::Icon::try_create_default_icon("app-analog-clock"));
auto window = TRY(GUI::Window::try_create()); auto window = TRY(GUI::Window::try_create());
window->set_title(Core::DateTime::now().to_string("%Y-%m-%d")); window->set_title(Core::DateTime::now().to_string("%Y-%m-%d"));

View file

@ -21,6 +21,7 @@
#include <LibGUI/Icon.h> #include <LibGUI/Icon.h>
#include <LibGUI/TabWidget.h> #include <LibGUI/TabWidget.h>
#include <LibMain/Main.h> #include <LibMain/Main.h>
#include <time.h>
#include <unistd.h> #include <unistd.h>
namespace Browser { namespace Browser {
@ -82,6 +83,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
TRY(Core::System::unveil("/tmp/portal/request", "rw")); TRY(Core::System::unveil("/tmp/portal/request", "rw"));
TRY(Core::System::unveil(nullptr, nullptr)); TRY(Core::System::unveil(nullptr, nullptr));
tzset();
auto app_icon = GUI::Icon::default_icon("app-browser"); 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"); Browser::g_home_url = Config::read_string("Browser", "Preferences", "Home", "file:///res/html/misc/welcome.html");

View file

@ -19,6 +19,7 @@
#include <LibGUI/Toolbar.h> #include <LibGUI/Toolbar.h>
#include <LibGUI/Window.h> #include <LibGUI/Window.h>
#include <LibMain/Main.h> #include <LibMain/Main.h>
#include <time.h>
ErrorOr<int> serenity_main(Main::Arguments arguments) ErrorOr<int> serenity_main(Main::Arguments arguments)
{ {
@ -31,6 +32,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
TRY(Core::System::unveil("/res", "r")); TRY(Core::System::unveil("/res", "r"));
TRY(Core::System::unveil(nullptr, nullptr)); TRY(Core::System::unveil(nullptr, nullptr));
tzset();
auto app_icon = TRY(GUI::Icon::try_create_default_icon("app-calendar")); auto app_icon = TRY(GUI::Icon::try_create_default_icon("app-calendar"));
auto window = TRY(GUI::Window::try_create()); auto window = TRY(GUI::Window::try_create());
window->set_title("Calendar"); window->set_title("Calendar");

View file

@ -16,6 +16,7 @@
#include <RequestServer/HttpProtocol.h> #include <RequestServer/HttpProtocol.h>
#include <RequestServer/HttpsProtocol.h> #include <RequestServer/HttpsProtocol.h>
#include <signal.h> #include <signal.h>
#include <time.h>
ErrorOr<int> serenity_main(Main::Arguments) ErrorOr<int> serenity_main(Main::Arguments)
{ {
@ -32,6 +33,8 @@ ErrorOr<int> serenity_main(Main::Arguments)
TRY(Core::System::unveil("/etc/timezone", "r")); TRY(Core::System::unveil("/etc/timezone", "r"));
TRY(Core::System::unveil(nullptr, nullptr)); TRY(Core::System::unveil(nullptr, nullptr));
tzset();
[[maybe_unused]] auto gemini = make<RequestServer::GeminiProtocol>(); [[maybe_unused]] auto gemini = make<RequestServer::GeminiProtocol>();
[[maybe_unused]] auto http = make<RequestServer::HttpProtocol>(); [[maybe_unused]] auto http = make<RequestServer::HttpProtocol>();
[[maybe_unused]] auto https = make<RequestServer::HttpsProtocol>(); [[maybe_unused]] auto https = make<RequestServer::HttpsProtocol>();

View file

@ -30,7 +30,11 @@ private:
virtual void paint_event(GUI::PaintEvent&) override; virtual void paint_event(GUI::PaintEvent&) override;
virtual void mousedown_event(GUI::MouseEvent&) override; virtual void mousedown_event(GUI::MouseEvent&) override;
void tick_clock() { update(); } void tick_clock()
{
tzset();
update();
}
void open(); void open();
void close(); void close();

View file

@ -10,6 +10,7 @@
#include <LibIPC/SingleServer.h> #include <LibIPC/SingleServer.h>
#include <LibMain/Main.h> #include <LibMain/Main.h>
#include <WebContent/ClientConnection.h> #include <WebContent/ClientConnection.h>
#include <time.h>
ErrorOr<int> serenity_main(Main::Arguments) ErrorOr<int> serenity_main(Main::Arguments)
{ {
@ -22,6 +23,8 @@ ErrorOr<int> serenity_main(Main::Arguments)
TRY(Core::System::unveil("/tmp/portal/websocket", "rw")); TRY(Core::System::unveil("/tmp/portal/websocket", "rw"));
TRY(Core::System::unveil(nullptr, nullptr)); TRY(Core::System::unveil(nullptr, nullptr));
tzset();
auto client = TRY(IPC::take_over_accepted_client_from_system_server<WebContent::ClientConnection>()); auto client = TRY(IPC::take_over_accepted_client_from_system_server<WebContent::ClientConnection>());
return event_loop.exec(); return event_loop.exec();
} }

View file

@ -29,6 +29,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
args_parser.add_option(print_rfc_5322, "Print date in RFC 5322 format", "rfc-5322", 'R'); args_parser.add_option(print_rfc_5322, "Print date in RFC 5322 format", "rfc-5322", 'R');
args_parser.parse(arguments); args_parser.parse(arguments);
tzset();
if (set_date != nullptr) { if (set_date != nullptr) {
auto number = String(set_date).to_uint(); auto number = String(set_date).to_uint();

View file

@ -8,6 +8,7 @@
#include <LibCore/DateTime.h> #include <LibCore/DateTime.h>
#include <LibCore/System.h> #include <LibCore/System.h>
#include <LibMain/Main.h> #include <LibMain/Main.h>
#include <time.h>
#include <unistd.h> #include <unistd.h>
class DiscordianDate { class DiscordianDate {
@ -104,6 +105,8 @@ ErrorOr<int> serenity_main(Main::Arguments)
{ {
TRY(Core::System::pledge("stdio rpath")); TRY(Core::System::pledge("stdio rpath"));
tzset();
auto date = Core::DateTime::now(); auto date = Core::DateTime::now();
outln("Today is {}", DiscordianDate(date).to_string()); outln("Today is {}", DiscordianDate(date).to_string());

View file

@ -17,6 +17,7 @@
#include <LibMain/Main.h> #include <LibMain/Main.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h>
#include <unistd.h> #include <unistd.h>
class Quote { class Quote {
@ -87,6 +88,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
TRY(Core::System::unveil("/etc/timezone", "r")); TRY(Core::System::unveil("/etc/timezone", "r"));
TRY(Core::System::unveil(nullptr, nullptr)); TRY(Core::System::unveil(nullptr, nullptr));
tzset();
auto file_contents = file->read_all(); auto file_contents = file->read_all();
auto json = TRY(JsonValue::from_string(file_contents)); auto json = TRY(JsonValue::from_string(file_contents));
if (!json.is_array()) { if (!json.is_array()) {

View file

@ -68,6 +68,7 @@
#include <fcntl.h> #include <fcntl.h>
#include <signal.h> #include <signal.h>
#include <stdio.h> #include <stdio.h>
#include <time.h>
#include <unistd.h> #include <unistd.h>
RefPtr<JS::VM> vm; RefPtr<JS::VM> vm;
@ -1287,6 +1288,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
args_parser.add_positional_argument(script_paths, "Path to script files", "scripts", Core::ArgsParser::Required::No); args_parser.add_positional_argument(script_paths, "Path to script files", "scripts", Core::ArgsParser::Required::No);
args_parser.parse(arguments); args_parser.parse(arguments);
tzset();
bool syntax_highlight = !disable_syntax_highlight; bool syntax_highlight = !disable_syntax_highlight;
vm = JS::VM::create(); vm = JS::VM::create();

View file

@ -25,6 +25,8 @@ ErrorOr<int> serenity_main(Main::Arguments)
TRY(Core::System::unveil("/proc", "r")); TRY(Core::System::unveil("/proc", "r"));
TRY(Core::System::unveil(nullptr, nullptr)); TRY(Core::System::unveil(nullptr, nullptr));
tzset();
auto file = TRY(Core::File::open("/var/run/utmp", Core::OpenMode::ReadOnly)); auto file = TRY(Core::File::open("/var/run/utmp", Core::OpenMode::ReadOnly));
auto json = TRY(JsonValue::from_string(file->read_all())); auto json = TRY(JsonValue::from_string(file->read_all()));
if (!json.is_object()) { if (!json.is_object()) {