slstatus-alsa-mute-1.0.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       slstatus-alsa-mute-1.0.diff (1464B)
       ---
            1 From 36f56dcdccdf986dd9ddf090a5ae16165b3b23e0 Mon Sep 17 00:00:00 2001
            2 From: sewn <sewn@disroot.org>
            3 Date: Sat, 12 Oct 2024 18:58:05 +0300
            4 Subject: [PATCH] volume: add mute support for ALSA
            5 
            6 ---
            7  components/volume.c | 11 +++++++++--
            8  1 file changed, 9 insertions(+), 2 deletions(-)
            9 
           10 diff --git a/components/volume.c b/components/volume.c
           11 index 15c5a39..eb56c47 100644
           12 --- a/components/volume.c
           13 +++ b/components/volume.c
           14 @@ -193,7 +193,7 @@
           15                  snd_mixer_selem_id_t *mixid = NULL;
           16                  snd_mixer_elem_t *elem = NULL;
           17                  long min = 0, max = 0, volume = -1;
           18 -                int err;
           19 +                int err, sw1, sw2;
           20  
           21                  if ((err = snd_mixer_open(&mixer, 0))) {
           22                          warn("snd_mixer_open: %d", err);
           23 @@ -229,13 +229,20 @@
           24                  if ((err = snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_MONO, &volume))) {
           25                          warn("snd_mixer_selem_get_playback_volume(): %d", err);
           26                  }
           27 +                if ((err = snd_mixer_selem_get_playback_switch(elem, 0, &sw1))) {
           28 +                        warn("snd_mixer_selem_get_playback_switch(): %d", err);
           29 +                }
           30 +                if ((err = snd_mixer_selem_get_playback_switch(elem, 1, &sw2))) {
           31 +                        warn("snd_mixer_selem_get_playback_switch(): %d", err);
           32 +                }
           33  
           34          cleanup:
           35                  snd_mixer_free(mixer);
           36                  snd_mixer_detach(mixer, devname);
           37                  snd_mixer_close(mixer);
           38  
           39 -                return volume == -1 ? NULL : bprintf("%.0f", (volume-min)*100./(max-min));
           40 +                return volume == -1 ? NULL : bprintf("%s%.0f",
           41 +                        !(sw1 || sw2) ? "muted " : "", (volume-min)*100./(max-min));
           42          }
           43  #else
           44          #include <sys/soundcard.h>
           45 -- 
           46 2.46.2
           47