fix(wlr/taskbar): gate title shrink/expand behind 'expand' option

Only stretch buttons and ellipsize titles when the new boolean 'expand'
option is enabled and the bar is horizontal. Restores the previous
content-based sizing as the default and avoids truncating every title
to an ellipsis on vertical bars.
This commit is contained in:
Alex
2026-07-03 21:39:48 +02:00
parent b41e57e35a
commit 488a75fada
2 changed files with 43 additions and 14 deletions
+5
View File
@@ -57,6 +57,11 @@ Addressed by *wlr/taskbar*
default: false ++ default: false ++
If set to true, group tasks by their app_id. Cannot be used with 'active-first'. If set to true, group tasks by their app_id. Cannot be used with 'active-first'.
*expand*: ++
typeof: bool ++
default: false ++
If set to true, task buttons stretch to fill the available space in the taskbar and long titles are ellipsized to fit. Only takes effect on a horizontal bar; on a vertical bar the buttons keep their content-based size. If set to false, buttons are sized to their content.
*on-click*: ++ *on-click*: ++
typeof: string ++ typeof: string ++
The action which should be triggered when clicking on the application button with the left mouse button. The action which should be triggered when clicking on the application button with the left mouse button.
+24
View File
@@ -93,6 +93,17 @@ Task::Task(const waybar::Bar& bar, const Json::Value& config, Taskbar* tbar,
zwlr_foreign_toplevel_handle_v1_add_listener(handle_, &toplevel_handle_impl, this); zwlr_foreign_toplevel_handle_v1_add_listener(handle_, &toplevel_handle_impl, this);
button.set_relief(Gtk::RELIEF_NONE); button.set_relief(Gtk::RELIEF_NONE);
/* When "expand" is enabled the buttons stretch to fill the taskbar and the
* titles ellipsize to fit within the available space. This only makes sense
* on a horizontal bar; on a vertical bar the box grows along the vertical
* axis, so ellipsizing/forcing width_chars(1) would truncate every title to
* "…". Keep the historical behavior (buttons sized to their content) as the
* default and when the bar is vertical. */
bool expand = config_["expand"].isBool() && config_["expand"].asBool();
bool horizontal = bar.orientation == Gtk::ORIENTATION_HORIZONTAL;
if (expand && horizontal) {
button.set_hexpand(true); button.set_hexpand(true);
content_.set_hexpand(true); content_.set_hexpand(true);
text_before_.set_ellipsize(Pango::ELLIPSIZE_END); text_before_.set_ellipsize(Pango::ELLIPSIZE_END);
@@ -107,6 +118,11 @@ Task::Task(const waybar::Bar& bar, const Json::Value& config, Taskbar* tbar,
content_.pack_start(text_before_, true, true, 0); content_.pack_start(text_before_, true, true, 0);
content_.pack_start(icon_, false, false, 0); content_.pack_start(icon_, false, false, 0);
content_.pack_start(text_after_, true, true, 0); content_.pack_start(text_after_, true, true, 0);
} else {
content_.add(text_before_);
content_.add(icon_);
content_.add(text_after_);
}
content_.show(); content_.show();
button.add(content_); button.add(content_);
@@ -728,7 +744,15 @@ void Taskbar::handle_finished() {
} }
void Taskbar::add_button(Gtk::Button& bt) { void Taskbar::add_button(Gtk::Button& bt) {
/* Only let the buttons expand to fill the taskbar when "expand" is enabled
* and the bar is horizontal (see the Task constructor for details). */
bool expand = config_["expand"].isBool() && config_["expand"].asBool();
bool horizontal = bar_.orientation == Gtk::ORIENTATION_HORIZONTAL;
if (expand && horizontal) {
box_.pack_start(bt, true, true); box_.pack_start(bt, true, true);
} else {
box_.pack_start(bt, false, false);
}
box_.get_style_context()->remove_class("empty"); box_.get_style_context()->remove_class("empty");
} }