nixos-config/user/wm/hyprland/patches/waybarpaupdate.patch
2024-07-29 17:08:56 -05:00

72 lines
2.6 KiB
Diff

diff --git a/include/util/audio_backend.hpp b/include/util/audio_backend.hpp
index 2f53103e5..3737ae264 100644
--- a/include/util/audio_backend.hpp
+++ b/include/util/audio_backend.hpp
@@ -38,6 +38,8 @@ class AudioBackend {
std::string desc_;
std::string monitor_;
std::string current_sink_name_;
+ std::string default_sink_name;
+ bool default_sink_running_;
bool current_sink_running_;
// SOURCE
uint32_t source_idx_{0};
diff --git a/src/util/audio_backend.cpp b/src/util/audio_backend.cpp
index 3d90b6d5a..73aac148b 100644
--- a/src/util/audio_backend.cpp
+++ b/src/util/audio_backend.cpp
@@ -1,9 +1,12 @@
#include "util/audio_backend.hpp"
#include <fmt/core.h>
+#include <pulse/def.h>
#include <pulse/error.h>
+#include <pulse/introspect.h>
#include <pulse/subscribe.h>
#include <pulse/volume.h>
+#include <spdlog/spdlog.h>
#include <algorithm>
#include <cmath>
@@ -139,6 +142,10 @@ void AudioBackend::sinkInfoCb(pa_context * /*context*/, const pa_sink_info *i, i
void *data) {
if (i == nullptr) return;
+ auto running = i->state == PA_SINK_RUNNING;
+ auto idle = i->state == PA_SINK_IDLE;
+ spdlog::trace("Sink name {} Running:[{}] Idle:[{}]", i->name, running, idle);
+
auto *backend = static_cast<AudioBackend *>(data);
if (!backend->ignored_sinks_.empty()) {
@@ -155,11 +162,19 @@ void AudioBackend::sinkInfoCb(pa_context * /*context*/, const pa_sink_info *i, i
}
}
+ backend->default_sink_running_ = backend->default_sink_name == i->name &&
+ (i->state == PA_SINK_RUNNING || i->state == PA_SINK_IDLE);
+
+ if (i->name != backend->default_sink_name && !backend->default_sink_running_) {
+ return;
+ }
+
if (backend->current_sink_name_ == i->name) {
- backend->current_sink_running_ = i->state == PA_SINK_RUNNING;
+ backend->current_sink_running_ = (i->state == PA_SINK_RUNNING || i->state == PA_SINK_IDLE);
}
- if (!backend->current_sink_running_ && i->state == PA_SINK_RUNNING) {
+ if (!backend->current_sink_running_ &&
+ (i->state == PA_SINK_RUNNING || i->state == PA_SINK_IDLE)) {
backend->current_sink_name_ = i->name;
backend->current_sink_running_ = true;
}
@@ -207,5 +222,6 @@ void AudioBackend::sourceInfoCb(pa_context * /*context*/, const pa_source_info *
void AudioBackend::serverInfoCb(pa_context *context, const pa_server_info *i, void *data) {
auto *backend = static_cast<AudioBackend *>(data);
backend->current_sink_name_ = i->default_sink_name;
+ backend->default_sink_name = i->default_sink_name;
backend->default_source_name_ = i->default_source_name;
pa_context_get_sink_info_list(context, sinkInfoCb, data);