Allow enabing pango markup in the taskbar string
The fix for taskbar tooltips in 6a2d214b55
was incomplete: it causes the label
to contain escaped titles. Use set_markup so that GTK decodes markup again,
but only if requested by the user (disabling markup is needed if using format
strings like "{title:.15}" to avoid terminating the string in the middle of an
XML entity).
pull/814/head
parent
447fad34c7
commit
ea722615c4
|
@ -32,6 +32,11 @@ Addressed by *wlr/taskbar*
|
||||||
default: 16 ++
|
default: 16 ++
|
||||||
The size of the icon.
|
The size of the icon.
|
||||||
|
|
||||||
|
*markup*: ++
|
||||||
|
typeof: bool ++
|
||||||
|
default: false ++
|
||||||
|
If set to true, pango markup will be accepted in format and tooltip-format.
|
||||||
|
|
||||||
*tooltip*: ++
|
*tooltip*: ++
|
||||||
typeof: bool ++
|
typeof: bool ++
|
||||||
default: true ++
|
default: true ++
|
||||||
|
|
|
@ -306,7 +306,7 @@ std::string Task::state_string(bool shortened) const
|
||||||
|
|
||||||
void Task::handle_title(const char *title)
|
void Task::handle_title(const char *title)
|
||||||
{
|
{
|
||||||
title_ = Glib::Markup::escape_text(title);
|
title_ = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Task::handle_app_id(const char *app_id)
|
void Task::handle_app_id(const char *app_id)
|
||||||
|
@ -460,38 +460,51 @@ bool Task::operator!=(const Task &o) const
|
||||||
|
|
||||||
void Task::update()
|
void Task::update()
|
||||||
{
|
{
|
||||||
|
bool markup = config_["markup"].isBool() ? config_["markup"].asBool() : false;
|
||||||
|
std::string title = title_;
|
||||||
|
std::string app_id = app_id_;
|
||||||
|
if (markup) {
|
||||||
|
title = Glib::Markup::escape_text(title);
|
||||||
|
app_id = Glib::Markup::escape_text(app_id);
|
||||||
|
}
|
||||||
if (!format_before_.empty()) {
|
if (!format_before_.empty()) {
|
||||||
text_before_.set_label(
|
auto txt = fmt::format(format_before_,
|
||||||
fmt::format(format_before_,
|
fmt::arg("title", title),
|
||||||
fmt::arg("title", title_),
|
fmt::arg("app_id", app_id),
|
||||||
fmt::arg("app_id", app_id_),
|
|
||||||
fmt::arg("state", state_string()),
|
fmt::arg("state", state_string()),
|
||||||
fmt::arg("short_state", state_string(true))
|
fmt::arg("short_state", state_string(true))
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
if (markup)
|
||||||
|
text_before_.set_markup(txt);
|
||||||
|
else
|
||||||
|
text_before_.set_label(txt);
|
||||||
text_before_.show();
|
text_before_.show();
|
||||||
}
|
}
|
||||||
if (!format_after_.empty()) {
|
if (!format_after_.empty()) {
|
||||||
text_after_.set_label(
|
auto txt = fmt::format(format_after_,
|
||||||
fmt::format(format_after_,
|
fmt::arg("title", title),
|
||||||
fmt::arg("title", title_),
|
fmt::arg("app_id", app_id),
|
||||||
fmt::arg("app_id", app_id_),
|
|
||||||
fmt::arg("state", state_string()),
|
fmt::arg("state", state_string()),
|
||||||
fmt::arg("short_state", state_string(true))
|
fmt::arg("short_state", state_string(true))
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
if (markup)
|
||||||
|
text_after_.set_markup(txt);
|
||||||
|
else
|
||||||
|
text_after_.set_label(txt);
|
||||||
text_after_.show();
|
text_after_.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!format_tooltip_.empty()) {
|
if (!format_tooltip_.empty()) {
|
||||||
button_.set_tooltip_markup(
|
auto txt = fmt::format(format_tooltip_,
|
||||||
fmt::format(format_tooltip_,
|
fmt::arg("title", title),
|
||||||
fmt::arg("title", title_),
|
fmt::arg("app_id", app_id),
|
||||||
fmt::arg("app_id", app_id_),
|
|
||||||
fmt::arg("state", state_string()),
|
fmt::arg("state", state_string()),
|
||||||
fmt::arg("short_state", state_string(true))
|
fmt::arg("short_state", state_string(true))
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
if (markup)
|
||||||
|
button_.set_tooltip_markup(txt);
|
||||||
|
else
|
||||||
|
button_.set_tooltip_text(txt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue