1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 08:44:58 +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/Window.h>
#include <LibMain/Main.h>
#include <time.h>
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(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"));

View file

@ -21,6 +21,7 @@
#include <LibGUI/Icon.h>
#include <LibGUI/TabWidget.h>
#include <LibMain/Main.h>
#include <time.h>
#include <unistd.h>
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(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");

View file

@ -19,6 +19,7 @@
#include <LibGUI/Toolbar.h>
#include <LibGUI/Window.h>
#include <LibMain/Main.h>
#include <time.h>
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(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");

View file

@ -16,6 +16,7 @@
#include <RequestServer/HttpProtocol.h>
#include <RequestServer/HttpsProtocol.h>
#include <signal.h>
#include <time.h>
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(nullptr, nullptr));
tzset();
[[maybe_unused]] auto gemini = make<RequestServer::GeminiProtocol>();
[[maybe_unused]] auto http = make<RequestServer::HttpProtocol>();
[[maybe_unused]] auto https = make<RequestServer::HttpsProtocol>();

View file

@ -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();

View file

@ -10,6 +10,7 @@
#include <LibIPC/SingleServer.h>
#include <LibMain/Main.h>
#include <WebContent/ClientConnection.h>
#include <time.h>
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(nullptr, nullptr));
tzset();
auto client = TRY(IPC::take_over_accepted_client_from_system_server<WebContent::ClientConnection>());
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.parse(arguments);
tzset();
if (set_date != nullptr) {
auto number = String(set_date).to_uint();

View file

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

View file

@ -17,6 +17,7 @@
#include <LibMain/Main.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
class Quote {
@ -87,6 +88,8 @@ ErrorOr<int> 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()) {

View file

@ -68,6 +68,7 @@
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
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.parse(arguments);
tzset();
bool syntax_highlight = !disable_syntax_highlight;
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(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()) {