mirror of
https://github.com/rad4day/Waybar.git
synced 2023-12-21 10:22:59 +01:00
Merge branch 'master' into output-exclusion
This commit is contained in:
commit
7bebfebe5f
@ -21,7 +21,7 @@ class Tray : public AModule {
|
|||||||
|
|
||||||
static inline std::size_t nb_hosts_ = 0;
|
static inline std::size_t nb_hosts_ = 0;
|
||||||
Gtk::Box box_;
|
Gtk::Box box_;
|
||||||
SNI::Watcher watcher_;
|
SNI::Watcher::singleton watcher_;
|
||||||
SNI::Host host_;
|
SNI::Host host_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7,10 +7,24 @@
|
|||||||
namespace waybar::modules::SNI {
|
namespace waybar::modules::SNI {
|
||||||
|
|
||||||
class Watcher {
|
class Watcher {
|
||||||
|
private:
|
||||||
|
Watcher();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Watcher(std::size_t id);
|
|
||||||
~Watcher();
|
~Watcher();
|
||||||
|
|
||||||
|
using singleton = std::shared_ptr<Watcher>;
|
||||||
|
static singleton getInstance() {
|
||||||
|
static std::weak_ptr<Watcher> weak;
|
||||||
|
|
||||||
|
std::shared_ptr<Watcher> strong = weak.lock();
|
||||||
|
if (!strong) {
|
||||||
|
strong = std::shared_ptr<Watcher>(new Watcher());
|
||||||
|
weak = strong;
|
||||||
|
}
|
||||||
|
return strong;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
typedef enum { GF_WATCH_TYPE_HOST, GF_WATCH_TYPE_ITEM } GfWatchType;
|
typedef enum { GF_WATCH_TYPE_HOST, GF_WATCH_TYPE_ITEM } GfWatchType;
|
||||||
|
|
||||||
@ -34,7 +48,6 @@ class Watcher {
|
|||||||
void updateRegisteredItems(SnWatcher *obj);
|
void updateRegisteredItems(SnWatcher *obj);
|
||||||
|
|
||||||
uint32_t bus_name_id_;
|
uint32_t bus_name_id_;
|
||||||
uint32_t watcher_id_;
|
|
||||||
GSList * hosts_ = nullptr;
|
GSList * hosts_ = nullptr;
|
||||||
GSList * items_ = nullptr;
|
GSList * items_ = nullptr;
|
||||||
SnWatcher *watcher_ = nullptr;
|
SnWatcher *watcher_ = nullptr;
|
||||||
|
@ -52,7 +52,8 @@ void waybar::modules::Pulseaudio::contextStateCb(pa_context *c, void *data) {
|
|||||||
pa_context_set_subscribe_callback(c, subscribeCb, data);
|
pa_context_set_subscribe_callback(c, subscribeCb, data);
|
||||||
pa_context_subscribe(
|
pa_context_subscribe(
|
||||||
c,
|
c,
|
||||||
static_cast<enum pa_subscription_mask>(static_cast<int>(PA_SUBSCRIPTION_MASK_SINK) |
|
static_cast<enum pa_subscription_mask>(static_cast<int>(PA_SUBSCRIPTION_MASK_SERVER) |
|
||||||
|
static_cast<int>(PA_SUBSCRIPTION_MASK_SINK) |
|
||||||
static_cast<int>(PA_SUBSCRIPTION_MASK_SOURCE)),
|
static_cast<int>(PA_SUBSCRIPTION_MASK_SOURCE)),
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr);
|
nullptr);
|
||||||
@ -109,7 +110,9 @@ void waybar::modules::Pulseaudio::subscribeCb(pa_context * conte
|
|||||||
if (operation != PA_SUBSCRIPTION_EVENT_CHANGE) {
|
if (operation != PA_SUBSCRIPTION_EVENT_CHANGE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (facility == PA_SUBSCRIPTION_EVENT_SINK) {
|
if (facility == PA_SUBSCRIPTION_EVENT_SERVER) {
|
||||||
|
pa_context_get_server_info(context, serverInfoCb, data);
|
||||||
|
} else if (facility == PA_SUBSCRIPTION_EVENT_SINK) {
|
||||||
pa_context_get_sink_info_by_index(context, idx, sinkInfoCb, data);
|
pa_context_get_sink_info_by_index(context, idx, sinkInfoCb, data);
|
||||||
} else if (facility == PA_SUBSCRIPTION_EVENT_SOURCE) {
|
} else if (facility == PA_SUBSCRIPTION_EVENT_SOURCE) {
|
||||||
pa_context_get_source_info_by_index(context, idx, sourceInfoCb, data);
|
pa_context_get_source_info_by_index(context, idx, sourceInfoCb, data);
|
||||||
@ -214,7 +217,7 @@ auto waybar::modules::Pulseaudio::update() -> void {
|
|||||||
} else {
|
} else {
|
||||||
label_.get_style_context()->remove_class("muted");
|
label_.get_style_context()->remove_class("muted");
|
||||||
}
|
}
|
||||||
format =
|
format =
|
||||||
config_[format_name].isString() ? config_[format_name].asString() : format;
|
config_[format_name].isString() ? config_[format_name].asString() : format;
|
||||||
}
|
}
|
||||||
// TODO: find a better way to split source/sink
|
// TODO: find a better way to split source/sink
|
||||||
|
@ -6,7 +6,7 @@ namespace waybar::modules::SNI {
|
|||||||
Tray::Tray(const std::string& id, const Bar& bar, const Json::Value& config)
|
Tray::Tray(const std::string& id, const Bar& bar, const Json::Value& config)
|
||||||
: AModule(config, "tray", id),
|
: AModule(config, "tray", id),
|
||||||
box_(bar.vertical ? Gtk::ORIENTATION_VERTICAL : Gtk::ORIENTATION_HORIZONTAL, 0),
|
box_(bar.vertical ? Gtk::ORIENTATION_VERTICAL : Gtk::ORIENTATION_HORIZONTAL, 0),
|
||||||
watcher_(nb_hosts_),
|
watcher_(SNI::Watcher::getInstance()),
|
||||||
host_(nb_hosts_, config, std::bind(&Tray::onAdd, this, std::placeholders::_1),
|
host_(nb_hosts_, config, std::bind(&Tray::onAdd, this, std::placeholders::_1),
|
||||||
std::bind(&Tray::onRemove, this, std::placeholders::_1)) {
|
std::bind(&Tray::onRemove, this, std::placeholders::_1)) {
|
||||||
spdlog::warn(
|
spdlog::warn(
|
||||||
|
@ -3,14 +3,13 @@
|
|||||||
|
|
||||||
using namespace waybar::modules::SNI;
|
using namespace waybar::modules::SNI;
|
||||||
|
|
||||||
Watcher::Watcher(std::size_t id)
|
Watcher::Watcher()
|
||||||
: bus_name_id_(Gio::DBus::own_name(Gio::DBus::BusType::BUS_TYPE_SESSION,
|
: bus_name_id_(Gio::DBus::own_name(Gio::DBus::BusType::BUS_TYPE_SESSION,
|
||||||
"org.kde.StatusNotifierWatcher",
|
"org.kde.StatusNotifierWatcher",
|
||||||
sigc::mem_fun(*this, &Watcher::busAcquired),
|
sigc::mem_fun(*this, &Watcher::busAcquired),
|
||||||
Gio::DBus::SlotNameAcquired(), Gio::DBus::SlotNameLost(),
|
Gio::DBus::SlotNameAcquired(), Gio::DBus::SlotNameLost(),
|
||||||
Gio::DBus::BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
|
Gio::DBus::BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
|
||||||
Gio::DBus::BUS_NAME_OWNER_FLAGS_REPLACE)),
|
Gio::DBus::BUS_NAME_OWNER_FLAGS_REPLACE)),
|
||||||
watcher_id_(id),
|
|
||||||
watcher_(sn_watcher_skeleton_new()) {}
|
watcher_(sn_watcher_skeleton_new()) {}
|
||||||
|
|
||||||
Watcher::~Watcher() {
|
Watcher::~Watcher() {
|
||||||
@ -23,6 +22,7 @@ Watcher::~Watcher() {
|
|||||||
g_slist_free_full(items_, gfWatchFree);
|
g_slist_free_full(items_, gfWatchFree);
|
||||||
items_ = nullptr;
|
items_ = nullptr;
|
||||||
}
|
}
|
||||||
|
Gio::DBus::unown_name(bus_name_id_);
|
||||||
auto iface = G_DBUS_INTERFACE_SKELETON(watcher_);
|
auto iface = G_DBUS_INTERFACE_SKELETON(watcher_);
|
||||||
g_dbus_interface_skeleton_unexport(iface);
|
g_dbus_interface_skeleton_unexport(iface);
|
||||||
}
|
}
|
||||||
@ -34,7 +34,7 @@ void Watcher::busAcquired(const Glib::RefPtr<Gio::DBus::Connection>& conn, Glib:
|
|||||||
if (error != nullptr) {
|
if (error != nullptr) {
|
||||||
// Don't print an error when a watcher is already present
|
// Don't print an error when a watcher is already present
|
||||||
if (error->code != 2) {
|
if (error->code != 2) {
|
||||||
spdlog::error("Watcher {}: {}", watcher_id_, error->message);
|
spdlog::error("Watcher: {}", error->message);
|
||||||
}
|
}
|
||||||
g_error_free(error);
|
g_error_free(error);
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user