X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/912bd26ede8901c98fd8d7a35f8493ee448109ad..1c43f4df29de9e15f629a7f0beaa355875305916:/widgets/alsabar.lua?ds=sidebyside

diff --git a/widgets/alsabar.lua b/widgets/alsabar.lua
index fc45c72..eec3428 100644
--- a/widgets/alsabar.lua
+++ b/widgets/alsabar.lua
@@ -27,7 +27,7 @@ local setmetatable = setmetatable
 -- lain.widgets.alsabar
 local alsabar = {
     channel = "Master",
-    step    = "2%",
+    step    = "1%",
 
     colors = {
         background = beautiful.bg_normal,
@@ -47,8 +47,7 @@ local alsabar = {
     },
 
     _current_level = 0,
-    _muted         = false,
-    _status        = "off"
+    _muted         = false
 }
 
 function alsabar.notify()
@@ -57,7 +56,7 @@ function alsabar.notify()
     local preset = {
         title   = "",
         text    = "",
-        timeout = 1,
+        timeout = 5,
         screen  = alsabar.notifications.screen,
         font    = alsabar.notifications.font .. " " ..
                   alsabar.notifications.font_size,
@@ -95,7 +94,7 @@ end
 
 local function worker(args)
     local args       = args or {}
-    local timeout    = args.timeout or 1
+    local timeout    = args.timeout or 5
     local settings   = args.settings or function() end
     local width      = args.width or 63
     local height     = args.heigth or 1
@@ -105,6 +104,7 @@ local function worker(args)
 
     alsabar.cmd           = args.cmd or "amixer"
     alsabar.channel       = args.channel or alsabar.channel
+    alsabar.togglechannel = args.togglechannel
     alsabar.step          = args.step or alsabar.step
     alsabar.colors        = args.colors or alsabar.colors
     alsabar.notifications = args.notifications or alsabar.notifications
@@ -128,17 +128,16 @@ local function worker(args)
         -- Capture mixer control state:          [5%] ... ... [on]
         local volu, mute = string.match(mixer, "([%d]+)%%.*%[([%l]*)")
 
-        volu = tonumber(volu) or 0
-        if mute == "" then mute = "off"
-
-        if alsabar._current_level ~= volu or alsabar._status ~= mute then
-
-            alsabar._current_level = volu
-            alsabar._status = mute
+        -- HDMIs can have a channel different from Master for toggling mute
+        if alsabar.togglechannel then
+            mute = string.match(read_pipe(string.format("%s get %s", alsabar.cmd, alsabar.togglechannel)), "%[(%a+)%]")
+        end
 
+        if (volu and tonumber(volu) ~= alsabar._current_level) or (mute and string.match(mute, "on") ~= alsabar._muted)
+        then
+            alsabar._current_level = tonumber(volu) or alsabar._current_level
             alsabar.bar:set_value(alsabar._current_level / 100)
-
-            if not mute and volu == 0 or mute == "off"
+            if not mute and tonumber(volu) == 0 or mute == "off"
             then
                 alsabar._muted = true
                 alsabar.tooltip:set_text (" [Muted] ")
@@ -150,9 +149,8 @@ local function worker(args)
             end
 
             volume_now = {}
-            volume_now.level = volu
+            volume_now.level = tonumber(volu)
             volume_now.status = mute
-
             settings()
         end
     end