[gnome-music/wip/jfelder/volume-slider: 4/5] mute




commit 7079b1d76d170a412cba17b130b10bf0ecf40d0f
Author: Jean Felder <jfelder src gnome org>
Date:   Fri Oct 1 15:40:37 2021 +0200

    mute

 gnomemusic/widgets/playertoolbar.py | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/gnomemusic/widgets/playertoolbar.py b/gnomemusic/widgets/playertoolbar.py
index 8215a091c..0cac97e0b 100644
--- a/gnomemusic/widgets/playertoolbar.py
+++ b/gnomemusic/widgets/playertoolbar.py
@@ -24,6 +24,7 @@
 
 from gettext import gettext as _
 from math import isclose
+from typing import Optional
 
 import gi
 gi.require_version("GstAudio", "1.0")
@@ -67,6 +68,7 @@ class PlayerToolbar(Gtk.ActionBar):
         super().__init__()
 
         self._player = None
+        self._volume_button_id = 0
 
         self._cover_image.set_size_request(
             ArtSize.SMALL.width, ArtSize.SMALL.height)
@@ -129,8 +131,9 @@ class PlayerToolbar(Gtk.ActionBar):
         self._sync_repeat_image()
 
         self._player.connect("notify::volume", self._player_volume_changed)
-        self._volume_button.connect(
+        self._volume_button_id = self._volume_button.connect(
             "notify::value", self._volume_button_changed)
+        self._player.connect("notify::mute", self._player_mute_changed)
 
     def _volume_button_changed(
             self, widget: Gtk.VolumeButton,
@@ -147,7 +150,8 @@ class PlayerToolbar(Gtk.ActionBar):
         self._player.props.volume = value_linear
 
     def _player_volume_changed(
-            self, player: Player, val: GObject.ParamSpecDouble) -> None:
+            self, player: Player,
+            val: Optional[GObject.ParamSpecDouble]) -> None:
         print("on ajuste le volume dans la toolbar")
         print("la valeur linear", self._player.props.volume)
         volume_cubic = GstAudio.StreamVolume.convert_volume(
@@ -156,6 +160,15 @@ class PlayerToolbar(Gtk.ActionBar):
         print("la valeur cubic", volume_cubic)
         self._volume_button.props.value = volume_cubic
 
+    def _player_mute_changed(
+            self, player: Player, val: GObject.ParamSpecBoolean) -> None:
+        muted = self._player.props.mute
+        if muted:
+            with self._volume_button.handler_block(self._volume_button_id):
+                self._volume_button.props.value = 0.0
+        else:
+            self._player_volume_changed(self._player, None)
+
     def _repeat_menu_changed(
             self, action: Gio.SimpleAction, new_state: GLib.Variant) -> None:
         self._repeat_action.set_state(new_state)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]