summaryrefslogtreecommitdiff
path: root/widgets/pavolctld.lua
diff options
context:
space:
mode:
authorTim Keller <tjkeller.xyz>2025-04-16 22:53:53 -0500
committerTim Keller <tjkeller.xyz>2025-04-16 22:53:53 -0500
commitb0d338292565fe3fe932215fd628a7482a29e8f0 (patch)
tree74ac11512ae036b27e4c47973d83c8cc9b1cbd60 /widgets/pavolctld.lua
parent0db16d56d1a167be71b1b464af8f4fef3d052054 (diff)
downloadawesome-b0d338292565fe3fe932215fd628a7482a29e8f0.tar.xz
awesome-b0d338292565fe3fe932215fd628a7482a29e8f0.zip
volume dropdown overhual functionality make it almost good
Diffstat (limited to 'widgets/pavolctld.lua')
-rw-r--r--widgets/pavolctld.lua133
1 files changed, 9 insertions, 124 deletions
diff --git a/widgets/pavolctld.lua b/widgets/pavolctld.lua
index fb3c5e5..1ef523e 100644
--- a/widgets/pavolctld.lua
+++ b/widgets/pavolctld.lua
@@ -1,48 +1,24 @@
local awful = require("awful")
-local gears = require("gears")
local wibox = require("wibox")
-local beautiful = require("beautiful")
-local menubar = require("menubar")
local pavolctld = require("lib.pavolctld")
-local naughty = require("naughty")
+local volume_dropdown = require("widgets.volumedropdown")
-- ensure pavolctld loaded
if not pavolctld then return wibox.widget.textbox("err") end
-- return table
local widget = {}
+
widget.textbox = wibox.widget.textbox()
-widget.dbmeter = wibox.widget.textbox()
-widget.vslider = wibox.widget {
- {
- {
- {
- value = 50,
- max_value = 150,
- shape = beautiful.slider_bar_shape,
- bg = beautiful.slider_handle_color,
- widget = wibox.widget.progressbar,
- },
- height = 5,
- widget = wibox.container.constraint
- },
- halign = "center",
- widget = wibox.container.place,
- },
- {
- bar_height = 0,
- widget = wibox.widget.slider,
- },
- layout = wibox.layout.stack,
-}
-widget.defsink = wibox.widget.textbox()
widget.tooltip = awful.tooltip { objects = {widget.textbox}, delay_show = 1 }
+widget.dropdown = volume_dropdown
-- widget callbacks
pavolctld.set_volume_change_callback(function()
- widget.vslider.value = pavolctld.sinks.default.vol
widget.textbox:set_text(pavolctld.sinks.default.vol)
- widget.dbmeter:set_text(pavolctld.sinks.default.db .. " dB")
+ widget.dropdown.set_volume(pavolctld.sinks.default.vol)
+ widget.dropdown.dbmeter:set_text(pavolctld.sinks.default.db .. " dB")
+ widget.dropdown.muted.checked = pavolctld.sinks.default.mute
end)
pavolctld.set_sink_change_callback(function()
@@ -50,102 +26,11 @@ pavolctld.set_sink_change_callback(function()
end)
pavolctld.set_default_sink_change_callback(function()
- widget.vslider.value = pavolctld.sinks.default.vol
widget.textbox:set_text(pavolctld.sinks.default.vol)
- widget.dbmeter:set_text(pavolctld.sinks.default.db .. " dB")
widget.tooltip:set_text(pavolctld.sinks.default.desc)
- widget.defsink:set_text(pavolctld.sinks.default.desc)
-end)
-
--- slider
-widget.vslider.maximum = 150 -- max in pavolctld
-widget.vslider:buttons(volume_buttons)
-widget.vslider:connect_signal("property::value", function()
- if pavolctld.sinks.default.vol == widget.vslider.value then return end -- help prevent overloading daemon
- pavolctld.volume_set(widget.vslider.value)
-end)
-
--- scrollbox for default sink select
-local default_sink_scrollbox = wibox.widget {
- widget.defsink,
- step_function = wibox.container.scroll.step_functions.linear_increase,
- speed = 25,
- extra_space = 25, -- space between repetition
- pause = true, -- start paused
- widget = wibox.container.scroll.horizontal,
-}
-
--- scroll when hovering
-default_sink_scrollbox:connect_signal("mouse::enter", function()
- default_sink_scrollbox:continue()
+ widget.dropdown.set_volume(pavolctld.sinks.default.vol)
+ widget.dropdown.dbmeter:set_text(pavolctld.sinks.default.db .. " dB")
+ widget.dropdown.defsink:set_text(pavolctld.sinks.default.desc)
end)
-default_sink_scrollbox:connect_signal("mouse::leave", function()
- default_sink_scrollbox:pause()
- default_sink_scrollbox:reset_scrolling()
-end)
-
--- widget dropdown
-local volume_dropdown = wibox.widget {
- {
- {
- {
- default_sink_scrollbox,
- margins = 5,
- widget = wibox.container.margin,
- },
- bg = "#333333",
- widget = wibox.container.background,
- },
- margins = beautiful.border_width,
- color = "#222222",
- widget = wibox.container.margin,
- },
- {
- {
- text = "M",
- widget = wibox.widget.textbox,
- },
- {
- widget.vslider,
- left = 10,
- right = 10,
- widget = wibox.container.margin,
- layout = wibox.layout.stack,
- },
- {
- widget.dbmeter,
- forced_width = 125,
- halign = "right",
- widget = wibox.container.place,
- },
- layout = wibox.layout.align.horizontal,
- },
- forced_num_cols = 1,
- forced_num_rows = 2,
- expand = true,
- forced_width = 500,
- forced_height = 100,
- layout = wibox.layout.grid,
-}
-widget.dropdown = awful.popup {
- widget = {
- volume_dropdown,
- margins = 15,
- widget = wibox.container.margin,
- },
- border_color = beautiful.border_focus,
- border_width = beautiful.border_width,
- shape = gears.shape.rounded_rect,
- ontop = true,
- hide_on_right_click = true,
- preferred_positions = "bottom",
- preferred_anchors = 'back',
- visible = false,
- offset = { y = 5 },
-}
-
-widget.dropdown:bind_to_widget(widget.textbox)
-
-
return widget