roundabout,
created on Thursday, 11 September 2025, 19:31:36 (1757619096),
received on Thursday, 11 September 2025, 19:31:39 (1757619099)
Author identity: Vlad <vlad.muntoiu@gmail.com>
c042d9cf54db22993058d71252d64392dfce1889
applets/volume/__init__.py
@@ -46,11 +46,12 @@ class Volume(panorama_panel.Applet):
self.percentage_reveal = config.get("percentage_reveal", 1000)
self.percentage_animation_time = config.get("percentage_animation_time", 250)
self.icon_size = config.get("icon_size", 24)
self.scrolling_sign = config.get("scroll_direction", 1)
self.volume_step = config.get("volume_step", 0.05)
asyncio.create_task(self.main())
async def main(self):
self.menu_button = Gtk.MenuButton()
self.volume_step = 0.05
self.pulse = pulsectl_asyncio.PulseAsync("panorama-panel-volume-manager")
await self.pulse.connect()
server_info = await self.pulse.server_info()
@@ -154,15 +155,32 @@ class Volume(panorama_panel.Applet):
self.icon.set_from_icon_name("audio-volume-high-symbolic")
def on_button_scroll(self, controller, dx, dy):
if dy < 0 or dy > 0:
if dy:
self.menu_button.popup()
if dy * self.scrolling_sign > 0:
new_volume = self.current_volume - self.volume_step
elif dy * self.scrolling_sign < 0:
new_volume = self.current_volume + self.volume_step
else:
new_volume = self.current_volume
if new_volume < 0:
new_volume = 0.0
elif new_volume > 1:
new_volume = 1.0
if self.current_volume == new_volume:
return Gdk.EVENT_STOP
self.volume_scale.set_value(new_volume)
self.current_volume = new_volume
self.set_button_icon()
return Gdk.EVENT_STOP
def on_popover_scroll(self, controller, dx, dy):
if dy > 0:
if dy * self.scrolling_sign > 0:
new_volume = self.current_volume - self.volume_step
elif dy < 0:
elif dy * self.scrolling_sign < 0:
new_volume = self.current_volume + self.volume_step
else:
new_volume = self.current_volume
if new_volume < 0:
new_volume = 0.0
elif new_volume > 1:
@@ -249,4 +267,6 @@ class Volume(panorama_panel.Applet):
"popdown_after_manual": self.popdown_after_manual,
"percentage_animation_time": self.percentage_animation_time,
"icon_size": self.icon_size,
"scroll_direction": self.scrolling_sign,
"volume_step": self.volume_step,
}