mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-11-04 09:42:42 +01:00 
			
		
		
		
	Merge branch 'master' into pr/anakael/sway-language-impr
This commit is contained in:
		@@ -3,5 +3,5 @@
 | 
			
		||||
FROM debian:sid
 | 
			
		||||
 | 
			
		||||
RUN apt-get update && \
 | 
			
		||||
    apt-get install -y build-essential meson ninja-build git pkg-config libinput10 libpugixml-dev libinput-dev wayland-protocols libwayland-client0 libwayland-cursor0 libwayland-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libxkbcommon-dev libudev-dev libpixman-1-dev libgtkmm-3.0-dev libjsoncpp-dev scdoc libdbusmenu-gtk3-dev libnl-3-dev libnl-genl-3-dev libpulse-dev libmpdclient-dev gobject-introspection libgirepository1.0-dev libxkbcommon && \
 | 
			
		||||
    apt-get install -y build-essential meson ninja-build git pkg-config libinput10 libpugixml-dev libinput-dev wayland-protocols libwayland-client0 libwayland-cursor0 libwayland-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libxkbcommon-dev libudev-dev libpixman-1-dev libgtkmm-3.0-dev libjsoncpp-dev scdoc libdbusmenu-gtk3-dev libnl-3-dev libnl-genl-3-dev libpulse-dev libmpdclient-dev gobject-introspection libgirepository1.0-dev libxkbcommon-dev && \
 | 
			
		||||
    apt-get clean
 | 
			
		||||
 
 | 
			
		||||
@@ -8,5 +8,5 @@ RUN dnf install -y @c-development git-core meson scdoc 'pkgconfig(date)' \
 | 
			
		||||
    'pkgconfig(jsoncpp)' 'pkgconfig(libinput)' 'pkgconfig(libmpdclient)' \
 | 
			
		||||
    'pkgconfig(libnl-3.0)' 'pkgconfig(libnl-genl-3.0)' 'pkgconfig(libpulse)' \
 | 
			
		||||
    'pkgconfig(libudev)' 'pkgconfig(pugixml)' 'pkgconfig(sigc++-2.0)' 'pkgconfig(spdlog)' \
 | 
			
		||||
    'pkgconfig(wayland-client)' 'pkgconfig(wayland-cursor)' 'pkgconfig(wayland-protocols)' 'pkgconfig(xkbcommon)' && \
 | 
			
		||||
    'pkgconfig(wayland-client)' 'pkgconfig(wayland-cursor)' 'pkgconfig(wayland-protocols)' 'pkgconfig(xkbregistry)' && \
 | 
			
		||||
    dnf clean all -y
 | 
			
		||||
 
 | 
			
		||||
@@ -3,5 +3,7 @@
 | 
			
		||||
FROM opensuse/tumbleweed:latest
 | 
			
		||||
 | 
			
		||||
RUN zypper -n up && \
 | 
			
		||||
    zypper addrepo https://download.opensuse.org/repositories/X11:Wayland/openSUSE_Tumbleweed/X11:Wayland.repo | echo 'a' && \
 | 
			
		||||
    zypper -n refresh && \
 | 
			
		||||
    zypper -n install -t pattern devel_C_C++ && \
 | 
			
		||||
    zypper -n install git meson clang libinput10 libinput-devel pugixml-devel libwayland-client0 libwayland-cursor0 wayland-protocols-devel wayland-devel Mesa-libEGL-devel Mesa-libGLESv2-devel libgbm-devel libxkbcommon-devel libudev-devel libpixman-1-0-devel gtkmm3-devel jsoncpp-devel scdoc libxkbcommon
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ class ALabel : public AModule {
 | 
			
		||||
  virtual ~ALabel() = default;
 | 
			
		||||
  virtual auto        update() -> void;
 | 
			
		||||
  virtual std::string getIcon(uint16_t, const std::string &alt = "", uint16_t max = 0);
 | 
			
		||||
  virtual std::string getIcon(uint16_t, std::vector<std::string> &alts, uint16_t max = 0);
 | 
			
		||||
  virtual std::string getIcon(uint16_t, const std::vector<std::string> &alts, uint16_t max = 0);
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  Gtk::Label                 label_;
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ class Pulseaudio : public ALabel {
 | 
			
		||||
  static void volumeModifyCb(pa_context*, int, void*);
 | 
			
		||||
 | 
			
		||||
  bool              handleScroll(GdkEventScroll* e);
 | 
			
		||||
  const std::string getPortIcon() const;
 | 
			
		||||
  const std::vector<std::string> getPulseIcon() const;
 | 
			
		||||
 | 
			
		||||
  pa_threaded_mainloop* mainloop_;
 | 
			
		||||
  pa_mainloop_api*      mainloop_api_;
 | 
			
		||||
@@ -38,7 +38,8 @@ class Pulseaudio : public ALabel {
 | 
			
		||||
  std::string form_factor_;
 | 
			
		||||
  std::string desc_;
 | 
			
		||||
  std::string monitor_;
 | 
			
		||||
  std::string default_sink_name_;
 | 
			
		||||
  std::string current_sink_name_;
 | 
			
		||||
  bool        current_sink_running_;
 | 
			
		||||
  // SOURCE
 | 
			
		||||
  uint32_t    source_idx_{0};
 | 
			
		||||
  uint16_t    source_volume_;
 | 
			
		||||
 
 | 
			
		||||
@@ -109,6 +109,9 @@ Additionally you can control the volume by scrolling *up* or *down* while the cu
 | 
			
		||||
# ICONS:
 | 
			
		||||
 | 
			
		||||
The following strings for *format-icons* are supported.
 | 
			
		||||
 | 
			
		||||
- the device name
 | 
			
		||||
 | 
			
		||||
If they are found in the current PulseAudio port name, the corresponding icons will be selected.
 | 
			
		||||
 | 
			
		||||
- *default* (Shown, when no other port is found)
 | 
			
		||||
@@ -131,6 +134,7 @@ If they are found in the current PulseAudio port name, the corresponding icons w
 | 
			
		||||
	"format-bluetooth": "{volume}% {icon}",
 | 
			
		||||
	"format-muted": "",
 | 
			
		||||
	"format-icons": {
 | 
			
		||||
		"alsa_output.pci-0000_00_1f.3.analog-stereo": "",
 | 
			
		||||
		"headphones": "",
 | 
			
		||||
		"handsfree": "",
 | 
			
		||||
		"headset": "",
 | 
			
		||||
 
 | 
			
		||||
@@ -76,7 +76,7 @@ std::string ALabel::getIcon(uint16_t percentage, const std::string& alt, uint16_
 | 
			
		||||
  return "";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::string ALabel::getIcon(uint16_t percentage, std::vector<std::string>& alts, uint16_t max) {
 | 
			
		||||
std::string ALabel::getIcon(uint16_t percentage, const std::vector<std::string>& alts, uint16_t max) {
 | 
			
		||||
  auto format_icons = config_["format-icons"];
 | 
			
		||||
  if (format_icons.isObject()) {
 | 
			
		||||
    std::string _alt = "default";
 | 
			
		||||
 
 | 
			
		||||
@@ -151,8 +151,24 @@ void waybar::modules::Pulseaudio::sourceInfoCb(pa_context * /*context*/, const p
 | 
			
		||||
 */
 | 
			
		||||
void waybar::modules::Pulseaudio::sinkInfoCb(pa_context * /*context*/, const pa_sink_info *i,
 | 
			
		||||
                                             int /*eol*/, void *data) {
 | 
			
		||||
  if (i == nullptr)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  auto pa = static_cast<waybar::modules::Pulseaudio *>(data);
 | 
			
		||||
  if (i != nullptr && pa->default_sink_name_ == i->name) {
 | 
			
		||||
  if (pa->current_sink_name_ == i->name) {
 | 
			
		||||
    if (i->state != PA_SINK_RUNNING) {
 | 
			
		||||
      pa->current_sink_running_ = false;
 | 
			
		||||
    } else {
 | 
			
		||||
      pa->current_sink_running_ = true;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!pa->current_sink_running_ && i->state == PA_SINK_RUNNING) {
 | 
			
		||||
    pa->current_sink_name_ = i->name;
 | 
			
		||||
    pa->current_sink_running_ = true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (pa->current_sink_name_ == i->name) {
 | 
			
		||||
    pa->pa_volume_ = i->volume;
 | 
			
		||||
    float volume = static_cast<float>(pa_cvolume_avg(&(pa->pa_volume_))) / float{PA_VOLUME_NORM};
 | 
			
		||||
    pa->sink_idx_ = i->index;
 | 
			
		||||
@@ -175,11 +191,11 @@ void waybar::modules::Pulseaudio::sinkInfoCb(pa_context * /*context*/, const pa_
 | 
			
		||||
void waybar::modules::Pulseaudio::serverInfoCb(pa_context *context, const pa_server_info *i,
 | 
			
		||||
                                               void *data) {
 | 
			
		||||
  auto pa = static_cast<waybar::modules::Pulseaudio *>(data);
 | 
			
		||||
  pa->default_sink_name_ = i->default_sink_name;
 | 
			
		||||
  pa->current_sink_name_ = i->default_sink_name;
 | 
			
		||||
  pa->default_source_name_ = i->default_source_name;
 | 
			
		||||
 | 
			
		||||
  pa_context_get_sink_info_by_name(context, i->default_sink_name, sinkInfoCb, data);
 | 
			
		||||
  pa_context_get_source_info_by_name(context, i->default_source_name, sourceInfoCb, data);
 | 
			
		||||
  pa_context_get_sink_info_list(context, sinkInfoCb, data);
 | 
			
		||||
  pa_context_get_source_info_list(context, sourceInfoCb, data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const std::array<std::string, 9> ports = {
 | 
			
		||||
@@ -194,15 +210,17 @@ static const std::array<std::string, 9> ports = {
 | 
			
		||||
    "phone",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const std::string waybar::modules::Pulseaudio::getPortIcon() const {
 | 
			
		||||
const std::vector<std::string> waybar::modules::Pulseaudio::getPulseIcon() const {
 | 
			
		||||
  std::vector<std::string> res = {default_source_name_};
 | 
			
		||||
  std::string nameLC = port_name_ + form_factor_;
 | 
			
		||||
  std::transform(nameLC.begin(), nameLC.end(), nameLC.begin(), ::tolower);
 | 
			
		||||
  for (auto const &port : ports) {
 | 
			
		||||
    if (nameLC.find(port) != std::string::npos) {
 | 
			
		||||
      return port;
 | 
			
		||||
      res.push_back(port);
 | 
			
		||||
      return res;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return port_name_;
 | 
			
		||||
  return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
auto waybar::modules::Pulseaudio::update() -> void {
 | 
			
		||||
@@ -252,7 +270,7 @@ auto waybar::modules::Pulseaudio::update() -> void {
 | 
			
		||||
                                fmt::arg("format_source", format_source),
 | 
			
		||||
                                fmt::arg("source_volume", source_volume_),
 | 
			
		||||
                                fmt::arg("source_desc", source_desc_),
 | 
			
		||||
                                fmt::arg("icon", getIcon(volume_, getPortIcon()))));
 | 
			
		||||
                                fmt::arg("icon", getIcon(volume_, getPulseIcon()))));
 | 
			
		||||
  getState(volume_);
 | 
			
		||||
  
 | 
			
		||||
  if (tooltipEnabled()) {
 | 
			
		||||
@@ -267,7 +285,7 @@ auto waybar::modules::Pulseaudio::update() -> void {
 | 
			
		||||
        fmt::arg("format_source", format_source),
 | 
			
		||||
        fmt::arg("source_volume", source_volume_),
 | 
			
		||||
        fmt::arg("source_desc", source_desc_),
 | 
			
		||||
        fmt::arg("icon", getIcon(volume_, getPortIcon()))));
 | 
			
		||||
        fmt::arg("icon", getIcon(volume_, getPulseIcon()))));
 | 
			
		||||
    } else {
 | 
			
		||||
      label_.set_tooltip_text(desc_);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user