diff --git a/include/modules/date.hpp b/include/modules/date.hpp index e13a7510..bcf0802a 100644 --- a/include/modules/date.hpp +++ b/include/modules/date.hpp @@ -37,9 +37,10 @@ namespace modules { string m_date; string m_time; - std::atomic m_toggled{false}; + // Single stringstream to be used to gather the results of std::put_time + std::stringstream datetime_stream; - void set_stream_locale(std::stringstream &stream); + std::atomic m_toggled{false}; }; } diff --git a/src/modules/date.cpp b/src/modules/date.cpp index 3c143e56..2f46cd1b 100644 --- a/src/modules/date.cpp +++ b/src/modules/date.cpp @@ -11,6 +11,7 @@ namespace modules { date_module::date_module(const bar_settings& bar, string name_) : timer_module(bar, move(name_)) { if (!m_bar.locale.empty()) { setlocale(LC_TIME, m_bar.locale.c_str()); + datetime_stream.imbue(std::locale(m_bar.locale.c_str())); } m_dateformat = string_util::trim(m_conf.get(name(), "date", ""s), '"'); @@ -38,26 +39,20 @@ namespace modules { } } - void date_module::set_stream_locale(std::stringstream &stream) { - if(!m_bar.locale.empty()) { - stream.imbue(std::locale(m_bar.locale.c_str())); - } - } - bool date_module::update() { auto time = std::time(nullptr); auto date_format = m_toggled ? m_dateformat_alt : m_dateformat; - std::stringstream date_stream; - set_stream_locale(date_stream); - date_stream << std::put_time(localtime(&time), date_format.c_str()); - auto date_string = date_stream.str(); + // Clear stream contents + datetime_stream.str(""); + datetime_stream << std::put_time(localtime(&time), date_format.c_str()); + auto date_string = datetime_stream.str(); auto time_format = m_toggled ? m_timeformat_alt : m_timeformat; - std::stringstream time_stream; - set_stream_locale(time_stream); - time_stream << std::put_time(localtime(&time), time_format.c_str()); - auto time_string = time_stream.str(); + // Clear stream contents + datetime_stream.str(""); + datetime_stream << std::put_time(localtime(&time), time_format.c_str()); + auto time_string = datetime_stream.str(); bool date_changed{strncmp(date_string.c_str(), m_date.c_str(), sizeof(date_string)) != 0}; bool time_changed{strncmp(time_string.c_str(), m_time.c_str(), sizeof(time_string)) != 0};