diff --git a/__pycache__/qt_process.cpython-313.pyc b/__pycache__/qt_process.cpython-313.pyc index 949d16e..913eecd 100644 Binary files a/__pycache__/qt_process.cpython-313.pyc and b/__pycache__/qt_process.cpython-313.pyc differ diff --git a/__pycache__/volume.cpython-313.pyc b/__pycache__/volume.cpython-313.pyc index 8ecb8ae..4530c7b 100644 Binary files a/__pycache__/volume.cpython-313.pyc and b/__pycache__/volume.cpython-313.pyc differ diff --git a/qt_process.py b/qt_process.py index 0d25a36..66331dd 100755 --- a/qt_process.py +++ b/qt_process.py @@ -48,11 +48,7 @@ def qt_process(to_qt_queue, from_qt_queue): osd.update_codecs(command['vcodec'], command['acodec'], command['video_res'], command['interlaced']) # Volume OSD commands - elif command['action'] == 'show_volume_osd': - # Close existing volume OSD if present - if volume_osd is not None: - volume_osd.close_widget() - + elif command['action'] == 'show_volume_osd' or command['action'] == 'update_volume_osd': # Get volume level and mute state volume_level = command.get('volume_level', 0) is_muted = command.get('is_muted', False) @@ -60,25 +56,23 @@ def qt_process(to_qt_queue, from_qt_queue): # If muted, override volume display to 0 display_volume = 0 if is_muted else volume_level - # Create new volume OSD - volume_osd = VolumeOsdWidget(display_volume) - if is_wayland: - volume_osd.showFullScreen() - else: - volume_osd.show() - - # Start the close timer - volume_osd.start_close_timer() - elif command['action'] == 'update_volume_osd': - if volume_osd is not None: - volume_level = command.get('volume_level', 0) - is_muted = command.get('is_muted', False) - - # If muted, override volume display to 0 - display_volume = 0 if is_muted else volume_level - + # Update existing volume OSD if present, otherwise create new one + if volume_osd is not None and volume_osd.isVisible(): volume_osd.update_volume(display_volume) volume_osd.start_close_timer() + else: + # Create new volume OSD if none exists or if it's not visible + if volume_osd is not None: + volume_osd.close_widget() + + volume_osd = VolumeOsdWidget(display_volume) + if is_wayland: + volume_osd.showFullScreen() + else: + volume_osd.show() + + # Start the close timer + volume_osd.start_close_timer() elif command['action'] == 'close_volume_osd': if volume_osd is not None: volume_osd.close_widget() diff --git a/volume.py b/volume.py index bb4440a..ad9fe36 100755 --- a/volume.py +++ b/volume.py @@ -168,6 +168,7 @@ class VolumeControl: # Update OSD if queue is available if self.to_qt_queue is not None: + # Always use 'show_volume_osd' action to ensure the OSD appears self.to_qt_queue.put({ 'action': 'show_volume_osd', 'volume_level': new_volume,