mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-10-28 06:52:29 +01:00 
			
		
		
		
	Merge branch 'master' of github.com:marcplustwo/Waybar
This commit is contained in:
		| @@ -1,8 +1,20 @@ | ||||
| #include "modules/clock.hpp" | ||||
| #include <time.h> | ||||
|  | ||||
| waybar::modules::Clock::Clock(const std::string& id, const Json::Value& config) | ||||
|     : ALabel(config, "clock", id, "{:%H:%M}", 60) { | ||||
|     : ALabel(config, "clock", id, "{:%H:%M}", 60) | ||||
|     , fixed_time_zone_(false) | ||||
| { | ||||
|   if (config_["timezone"].isString()) { | ||||
|     time_zone_ = date::locate_zone(config_["timezone"].asString()); | ||||
|     fixed_time_zone_ = true; | ||||
|   } | ||||
|  | ||||
|   if (config_["locale"].isString()) { | ||||
|     locale_ = std::locale(config_["locale"].asString()); | ||||
|   } else { | ||||
|     locale_ = std::locale(""); | ||||
|   } | ||||
|  | ||||
|   thread_ = [this] { | ||||
|     dp.emit(); | ||||
|     auto now = std::chrono::system_clock::now(); | ||||
| @@ -12,20 +24,39 @@ waybar::modules::Clock::Clock(const std::string& id, const Json::Value& config) | ||||
|   }; | ||||
| } | ||||
|  | ||||
| using zoned_time = date::zoned_time<std::chrono::system_clock::duration>; | ||||
|  | ||||
| struct waybar_time { | ||||
|   std::locale locale; | ||||
|   zoned_time ztime; | ||||
| }; | ||||
|  | ||||
| auto waybar::modules::Clock::update() -> void { | ||||
|   tzset(); // Update timezone information | ||||
|   if (!fixed_time_zone_) { | ||||
|     // Time zone can change. Be sure to pick that. | ||||
|     time_zone_ = date::current_zone(); | ||||
|   } | ||||
|   auto now = std::chrono::system_clock::now(); | ||||
|   auto localtime = fmt::localtime(std::chrono::system_clock::to_time_t(now)); | ||||
|   auto text = fmt::format(format_, localtime); | ||||
|   waybar_time wtime = {locale_, date::make_zoned(time_zone_, now)}; | ||||
|  | ||||
|   auto text = fmt::format(format_, wtime); | ||||
|   label_.set_markup(text); | ||||
|  | ||||
|   if (tooltipEnabled()) { | ||||
|     if (config_["tooltip-format"].isString()) { | ||||
|       auto tooltip_format = config_["tooltip-format"].asString(); | ||||
|       auto tooltip_text = fmt::format(tooltip_format, localtime); | ||||
|       auto tooltip_text = fmt::format(tooltip_format, wtime); | ||||
|       label_.set_tooltip_text(tooltip_text); | ||||
|     } else { | ||||
|       label_.set_tooltip_text(text); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| template <> | ||||
| struct fmt::formatter<waybar_time> : fmt::formatter<std::tm> { | ||||
|   template <typename FormatContext> | ||||
|   auto format(const waybar_time& t, FormatContext& ctx) { | ||||
|     return format_to(ctx.out(), "{}", date::format(t.locale, fmt::to_string(tm_format), t.ztime)); | ||||
|   } | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Marc
					Marc