mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 14:28:12 +00:00

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.
56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibCore/DateTime.h>
|
|
#include <LibCore/Timer.h>
|
|
#include <LibGUI/Application.h>
|
|
#include <LibGUI/BoxLayout.h>
|
|
#include <LibGUI/Button.h>
|
|
#include <LibGUI/Calendar.h>
|
|
#include <LibGUI/Frame.h>
|
|
#include <LibGUI/Label.h>
|
|
#include <time.h>
|
|
|
|
namespace Taskbar {
|
|
|
|
class ClockWidget final : public GUI::Frame {
|
|
C_OBJECT(ClockWidget);
|
|
|
|
public:
|
|
virtual ~ClockWidget() override;
|
|
|
|
private:
|
|
ClockWidget();
|
|
|
|
virtual void paint_event(GUI::PaintEvent&) override;
|
|
virtual void mousedown_event(GUI::MouseEvent&) override;
|
|
|
|
void tick_clock()
|
|
{
|
|
tzset();
|
|
update();
|
|
}
|
|
|
|
void open();
|
|
void close();
|
|
|
|
void position_calendar_window();
|
|
void jump_to_current_date();
|
|
|
|
RefPtr<GUI::Window> m_calendar_window;
|
|
RefPtr<GUI::Calendar> m_calendar;
|
|
RefPtr<GUI::Button> m_next_date;
|
|
RefPtr<GUI::Button> m_prev_date;
|
|
RefPtr<GUI::Button> m_selected_calendar_button;
|
|
RefPtr<GUI::Button> m_jump_to_button;
|
|
RefPtr<GUI::Button> m_calendar_launcher;
|
|
RefPtr<Core::Timer> m_timer;
|
|
int m_time_width { 0 };
|
|
};
|
|
|
|
}
|