Fix some bugs
Some checks failed
clang-format / lint (push) Has been cancelled
freebsd / build (push) Has been cancelled
linux / build (c++20, alpine) (push) Has been cancelled
linux / build (c++20, archlinux) (push) Has been cancelled
linux / build (c++20, debian) (push) Has been cancelled
linux / build (c++20, fedora) (push) Has been cancelled
linux / build (c++20, gentoo) (push) Has been cancelled
linux / build (c++20, opensuse) (push) Has been cancelled
Nix-Tests / nix-flake-check (push) Has been cancelled
Some checks failed
clang-format / lint (push) Has been cancelled
freebsd / build (push) Has been cancelled
linux / build (c++20, alpine) (push) Has been cancelled
linux / build (c++20, archlinux) (push) Has been cancelled
linux / build (c++20, debian) (push) Has been cancelled
linux / build (c++20, fedora) (push) Has been cancelled
linux / build (c++20, gentoo) (push) Has been cancelled
linux / build (c++20, opensuse) (push) Has been cancelled
Nix-Tests / nix-flake-check (push) Has been cancelled
This commit is contained in:
@ -30,6 +30,9 @@ class Tags : public waybar::AModule {
|
|||||||
struct zriver_control_v1 *control_;
|
struct zriver_control_v1 *control_;
|
||||||
struct zriver_seat_status_v1 *seat_status_;
|
struct zriver_seat_status_v1 *seat_status_;
|
||||||
struct wl_seat *seat_;
|
struct wl_seat *seat_;
|
||||||
|
// used to make sure the focused view tags are on the correct output
|
||||||
|
const wl_output *output_;
|
||||||
|
const wl_output *focused_output_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const waybar::Bar &bar_;
|
const waybar::Bar &bar_;
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
#include <gtkmm/button.h>
|
#include <gtkmm/button.h>
|
||||||
#include <wayland-client.h>
|
#include <wayland-client.h>
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
#include "ALabel.hpp"
|
#include "ALabel.hpp"
|
||||||
#include "bar.hpp"
|
#include "bar.hpp"
|
||||||
#include "river-status-unstable-v1-client-protocol.h"
|
#include "river-status-unstable-v1-client-protocol.h"
|
||||||
@ -25,8 +27,9 @@ class Window : public waybar::ALabel {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
const waybar::Bar &bar_;
|
const waybar::Bar &bar_;
|
||||||
struct wl_output *output_; // stores the output this module belongs to
|
std::optional<std::string> default_format_; // format when there is no window
|
||||||
struct wl_output *focused_output_; // stores the currently focused output
|
struct wl_output *output_; // stores the output this module belongs to
|
||||||
|
struct wl_output *focused_output_; // stores the currently focused output
|
||||||
struct zriver_seat_status_v1 *seat_status_;
|
struct zriver_seat_status_v1 *seat_status_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -17,6 +17,10 @@ Addressed by *river/window*
|
|||||||
default: {} ++
|
default: {} ++
|
||||||
The format, how information should be displayed. On {} data gets inserted.
|
The format, how information should be displayed. On {} data gets inserted.
|
||||||
|
|
||||||
|
*default-format*: ++
|
||||||
|
typeof: string ++
|
||||||
|
A string to be show if no window is focused. No formatting is done but markup is supported.
|
||||||
|
|
||||||
*rotate*: ++
|
*rotate*: ++
|
||||||
typeof: integer ++
|
typeof: integer ++
|
||||||
Positive value to rotate the text label (in 90 degree increments).
|
Positive value to rotate the text label (in 90 degree increments).
|
||||||
|
@ -64,22 +64,21 @@ static const zriver_command_callback_v1_listener command_callback_listener_impl{
|
|||||||
|
|
||||||
static void listen_focused_output(void *data, struct zriver_seat_status_v1 *zriver_seat_status_v1,
|
static void listen_focused_output(void *data, struct zriver_seat_status_v1 *zriver_seat_status_v1,
|
||||||
struct wl_output *output) {
|
struct wl_output *output) {
|
||||||
// Intentionally empty
|
static_cast<Tags *>(data)->focused_output_ = output;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void listen_unfocused_output(void *data, struct zriver_seat_status_v1 *zriver_seat_status_v1,
|
static void listen_unfocused_output(void *data, struct zriver_seat_status_v1 *zriver_seat_status_v1,
|
||||||
struct wl_output *output) {
|
struct wl_output *output) {}
|
||||||
// Intentionally empty
|
|
||||||
}
|
|
||||||
|
|
||||||
static void listen_focused_view(void *data, struct zriver_seat_status_v1 *zriver_seat_status_v1,
|
static void listen_focused_view(void *data, struct zriver_seat_status_v1 *zriver_seat_status_v1,
|
||||||
const char *title, uint32_t tags) {
|
const char *title, uint32_t tags) {
|
||||||
static_cast<Tags *>(data)->handle_focused_view(title, tags);
|
static_cast<Tags *>(data)->handle_focused_view(title, tags);
|
||||||
|
static_cast<Tags *>(data)->AModule::update();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void listen_mode(void *data, struct zriver_seat_status_v1 *zriver_seat_status_v1,
|
static void listen_mode(void *data, struct zriver_seat_status_v1 *zriver_seat_status_v1,
|
||||||
const char *mode) {
|
const char *mode) {
|
||||||
// Intentionally empty
|
static_cast<Tags *>(data)->AModule::update();
|
||||||
}
|
}
|
||||||
|
|
||||||
static const zriver_seat_status_v1_listener seat_status_listener_impl{
|
static const zriver_seat_status_v1_listener seat_status_listener_impl{
|
||||||
@ -125,6 +124,8 @@ Tags::Tags(const std::string &id, const waybar::Bar &bar, const Json::Value &con
|
|||||||
status_manager_{nullptr},
|
status_manager_{nullptr},
|
||||||
control_{nullptr},
|
control_{nullptr},
|
||||||
seat_{nullptr},
|
seat_{nullptr},
|
||||||
|
output_{nullptr},
|
||||||
|
focused_output_{nullptr},
|
||||||
bar_(bar),
|
bar_(bar),
|
||||||
box_{bar.orientation, 0},
|
box_{bar.orientation, 0},
|
||||||
output_status_{nullptr} {
|
output_status_{nullptr} {
|
||||||
@ -149,6 +150,8 @@ Tags::Tags(const std::string &id, const waybar::Bar &bar, const Json::Value &con
|
|||||||
seat_status_ = zriver_status_manager_v1_get_river_seat_status(status_manager_, seat_);
|
seat_status_ = zriver_status_manager_v1_get_river_seat_status(status_manager_, seat_);
|
||||||
zriver_seat_status_v1_add_listener(seat_status_, &seat_status_listener_impl, this);
|
zriver_seat_status_v1_add_listener(seat_status_, &seat_status_listener_impl, this);
|
||||||
|
|
||||||
|
output_ = gdk_wayland_monitor_get_wl_output(bar_.output->monitor->gobj());
|
||||||
|
|
||||||
box_.set_name("tags");
|
box_.set_name("tags");
|
||||||
if (!id.empty()) {
|
if (!id.empty()) {
|
||||||
box_.get_style_context()->add_class(id);
|
box_.get_style_context()->add_class(id);
|
||||||
@ -317,20 +320,10 @@ void Tags::handle_urgent_tags(uint32_t tags) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Tags::handle_focused_view(const char *title, uint32_t tags) {
|
void Tags::handle_focused_view(const char *title, uint32_t tags) {
|
||||||
auto hide_vacant = config_["hide-vacant"].asBool();
|
|
||||||
for (size_t i = 0; i < buttons_.size(); ++i) {
|
for (size_t i = 0; i < buttons_.size(); ++i) {
|
||||||
bool visible = buttons_[i].is_visible();
|
if ((1 << i) & tags && output_ == focused_output_) {
|
||||||
bool occupied = buttons_[i].get_style_context()->has_class("occupied");
|
|
||||||
bool focused = buttons_[i].get_style_context()->has_class("focused");
|
|
||||||
if ((1 << i) & tags) {
|
|
||||||
if (hide_vacant && !visible) {
|
|
||||||
buttons_[i].set_visible(true);
|
|
||||||
}
|
|
||||||
buttons_[i].get_style_context()->add_class("current-view");
|
buttons_[i].get_style_context()->add_class("current-view");
|
||||||
} else {
|
} else {
|
||||||
if (hide_vacant && !(occupied || focused)) {
|
|
||||||
buttons_[i].set_visible(false);
|
|
||||||
}
|
|
||||||
buttons_[i].get_style_context()->remove_class("current-view");
|
buttons_[i].get_style_context()->remove_class("current-view");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,6 +65,10 @@ Window::Window(const std::string &id, const waybar::Bar &bar, const Json::Value
|
|||||||
seat_{nullptr},
|
seat_{nullptr},
|
||||||
bar_(bar),
|
bar_(bar),
|
||||||
seat_status_{nullptr} {
|
seat_status_{nullptr} {
|
||||||
|
if (config_["default-format"].isString()) {
|
||||||
|
default_format_ = config_["default-format"].asString();
|
||||||
|
}
|
||||||
|
|
||||||
struct wl_display *display = Client::inst()->wl_display;
|
struct wl_display *display = Client::inst()->wl_display;
|
||||||
struct wl_registry *registry = wl_display_get_registry(display);
|
struct wl_registry *registry = wl_display_get_registry(display);
|
||||||
wl_registry_add_listener(registry, ®istry_listener_impl, this);
|
wl_registry_add_listener(registry, ®istry_listener_impl, this);
|
||||||
@ -104,7 +108,16 @@ void Window::handle_focused_view(const char *title, uint32_t tags) {
|
|||||||
if (focused_output_ != output_) return;
|
if (focused_output_ != output_) return;
|
||||||
|
|
||||||
if (std::strcmp(title, "") == 0 || format_.empty()) {
|
if (std::strcmp(title, "") == 0 || format_.empty()) {
|
||||||
label_.hide(); // hide empty labels or labels with empty format
|
if (default_format_.has_value()) {
|
||||||
|
label_.show();
|
||||||
|
const std::string &default_format = default_format_.value();
|
||||||
|
label_.set_markup(default_format);
|
||||||
|
if (tooltipEnabled()) {
|
||||||
|
label_.set_tooltip_markup(default_format);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
label_.hide(); // hide empty labels or labels with empty format
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
label_.show();
|
label_.show();
|
||||||
auto text = fmt::format(fmt::runtime(format_), Glib::Markup::escape_text(title).raw());
|
auto text = fmt::format(fmt::runtime(format_), Glib::Markup::escape_text(title).raw());
|
||||||
|
Reference in New Issue
Block a user