Merge pull request #3506 from soreau/taskbar-minimize-hints
taskbar: Send minimize geometry hints
This commit is contained in:
@ -387,6 +387,11 @@ void Task::handle_title(const char *title) {
|
||||
hide_if_ignored();
|
||||
}
|
||||
|
||||
void Task::set_minimize_hint() {
|
||||
zwlr_foreign_toplevel_handle_v1_set_rectangle(handle_, bar_.surface, minimize_hint.x,
|
||||
minimize_hint.y, minimize_hint.w, minimize_hint.h);
|
||||
}
|
||||
|
||||
void Task::hide_if_ignored() {
|
||||
if (tbar_->ignore_list().count(app_id_) || tbar_->ignore_list().count(title_)) {
|
||||
ignored_ = true;
|
||||
@ -447,6 +452,13 @@ void Task::handle_app_id(const char *app_id) {
|
||||
spdlog::debug("Couldn't find icon for {}", app_id_);
|
||||
}
|
||||
|
||||
void Task::on_button_size_allocated(Gtk::Allocation &alloc) {
|
||||
gtk_widget_translate_coordinates(GTK_WIDGET(button.gobj()), GTK_WIDGET(bar_.window.gobj()), 0, 0,
|
||||
&minimize_hint.x, &minimize_hint.y);
|
||||
minimize_hint.w = button.get_width();
|
||||
minimize_hint.h = button.get_height();
|
||||
}
|
||||
|
||||
void Task::handle_output_enter(struct wl_output *output) {
|
||||
if (ignored_) {
|
||||
spdlog::debug("{} is ignored", repr());
|
||||
@ -457,6 +469,8 @@ void Task::handle_output_enter(struct wl_output *output) {
|
||||
|
||||
if (!button_visible_ && (tbar_->all_outputs() || tbar_->show_output(output))) {
|
||||
/* The task entered the output of the current bar make the button visible */
|
||||
button.signal_size_allocate().connect_notify(
|
||||
sigc::mem_fun(this, &Task::on_button_size_allocated));
|
||||
tbar_->add_button(button);
|
||||
button.show();
|
||||
button_visible_ = true;
|
||||
@ -553,9 +567,11 @@ bool Task::handle_clicked(GdkEventButton *bt) {
|
||||
return true;
|
||||
else if (action == "activate")
|
||||
activate();
|
||||
else if (action == "minimize")
|
||||
else if (action == "minimize") {
|
||||
set_minimize_hint();
|
||||
minimize(!minimized());
|
||||
else if (action == "minimize-raise") {
|
||||
} else if (action == "minimize-raise") {
|
||||
set_minimize_hint();
|
||||
if (minimized())
|
||||
minimize(false);
|
||||
else if (active())
|
||||
|
Reference in New Issue
Block a user