clock: make calendar padding portable across FormatStream char types
std::setfill is templated on the fill char type, which must match the
Glib::ustring FormatStream's char type. That type is wchar_t with
libstdc++/glibmm but char with libc++, so no fixed literal (' ' or L' ')
compiles everywhere. The stream's default fill is already a space, so
drop std::setfill entirely; std::setw/std::left/std::right are
char-type-agnostic and keep the exact padding behavior.
This commit is contained in:
@@ -402,8 +402,13 @@ auto waybar::modules::Clock::get_calendar(const year_month_day& today, const yea
|
||||
data = g_utf8_find_next_char(data, end);
|
||||
}
|
||||
}
|
||||
// Note: the stream's default fill character is already a space (L' ' on
|
||||
// libstdc++'s wide FormatStream, ' ' on libc++'s narrow one), so no
|
||||
// std::setfill is needed. Passing std::setfill(' ')/std::setfill(L' ')
|
||||
// here is not portable because the fill char type must match the
|
||||
// FormatStream's char type, which differs between standard libraries.
|
||||
os << Glib::ustring::format(
|
||||
(cldWPos_ != WS::LEFT || line == 0) ? std::left : std::right, std::setfill(' '),
|
||||
(cldWPos_ != WS::LEFT || line == 0) ? std::left : std::right,
|
||||
std::setw(cldMonColLen_ + ((line < 2) ? cldWnLen_ - wideCharCount : 0)),
|
||||
calendarLine);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user