Skip to content

Commit

Permalink
Merge pull request #3506 from soreau/taskbar-minimize-hints
Browse files Browse the repository at this point in the history
taskbar: Send minimize geometry hints
  • Loading branch information
Alexays authored Aug 26, 2024
2 parents f665d1d + 4d89c64 commit 5d184f7
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
7 changes: 7 additions & 0 deletions include/modules/wlr/taskbar.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@

namespace waybar::modules::wlr {

struct widget_geometry {
int x, y, w, h;
};

class Taskbar;

class Task {
Expand All @@ -42,6 +46,7 @@ class Task {
};
// made public so TaskBar can reorder based on configuration.
Gtk::Button button;
struct widget_geometry minimize_hint;

private:
static uint32_t global_id;
Expand Down Expand Up @@ -82,6 +87,8 @@ class Task {
private:
std::string repr() const;
std::string state_string(bool = false) const;
void set_minimize_hint();
void on_button_size_allocated(Gtk::Allocation &alloc);
void set_app_info_from_app_id_list(const std::string &app_id_list);
bool image_load_icon(Gtk::Image &image, const Glib::RefPtr<Gtk::IconTheme> &icon_theme,
Glib::RefPtr<Gio::DesktopAppInfo> app_info, int size);
Expand Down
20 changes: 18 additions & 2 deletions src/modules/wlr/taskbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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());
Expand All @@ -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;
Expand Down Expand Up @@ -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())
Expand Down

0 comments on commit 5d184f7

Please sign in to comment.