diff --git a/src/shared/window/popup_win.py b/src/shared/window/popup_win.py index ca2dbe8..46e4f35 100644 --- a/src/shared/window/popup_win.py +++ b/src/shared/window/popup_win.py @@ -100,15 +100,17 @@ class PopupWindow(WaylandWindow): try: self._pointing_widget.disconnect_by_func(self.do_handle_size_allocate) except Exception as e: - logger.warning( - f"[popup_win] self._pointing_widget.disconnect_by_func(self.do_handle_s... failed: {e}" - ) + if "nothing connected" not in str(e): + logger.warning( + f"[popup_win] self._pointing_widget.disconnect_by_func(self.do_handle_s... failed: {e}" + ) try: self.disconnect_by_func(self.do_handle_size_allocate) except Exception as e: - logger.warning( - f"[popup_win] self.disconnect_by_func(self.do_handle_size_allocate) failed: {e}" - ) + if "nothing connected" not in str(e): + logger.warning( + f"[popup_win] self.disconnect_by_func(self.do_handle_size_allocate) failed: {e}" + ) super().destroy() def do_calculate_edges(self): diff --git a/src/window/controlcenter/bluetooth.py b/src/window/controlcenter/bluetooth.py index 24d1218..1180460 100644 --- a/src/window/controlcenter/bluetooth.py +++ b/src/window/controlcenter/bluetooth.py @@ -338,7 +338,6 @@ class BluetoothConnections(Box): self.parent = parent self.show_hidden_devices = show_hidden_devices self.is_scanning = False # Track scanning state - self.refresh_timer = None # Timer for periodic device refresh self._update_in_progress = False # Prevent concurrent updates self._destroyed = False # Track if widget is destroyed self._client_signal_ids = [] # Track BluetoothClient signal IDs @@ -470,7 +469,6 @@ class BluetoothConnections(Box): self.connect("destroy", self.on_destroy) self.connect("unmap", self.on_hide) - self.connect("map", lambda *_: self.start_device_monitoring()) self.client.notify("scanning") self.client.notify("enabled") @@ -489,7 +487,6 @@ class BluetoothConnections(Box): def on_hide(self, *_): """Called when the widget is hidden (popup closed)""" - self.stop_device_monitoring() self._cancel_pending_refresh() if self.other_devices.get_visible(): self.other_devices.set_visible(False) @@ -675,34 +672,6 @@ class BluetoothConnections(Box): finally: self._update_in_progress = False - def start_device_monitoring(self): - """Start periodic monitoring for device changes""" - self.stop_device_monitoring() - self.refresh_timer = GLib.timeout_add_seconds(5, self.periodic_device_refresh) - - def stop_device_monitoring(self): - """Stop periodic monitoring""" - if self.refresh_timer: - GLib.source_remove(self.refresh_timer) - self.refresh_timer = None - - def periodic_device_refresh(self): - """Periodically refresh device list to catch external connections""" - if self._destroyed: - self.refresh_timer = None - return False - - # Skip if update in progress or client not available/enabled - if self._update_in_progress or not self.client or not self.client.enabled: - return True # Continue monitoring - - try: - self.update_devices() - except Exception as e: - logger.error(f"[Bluetooth] Error during periodic refresh: {e}") - - return True - def force_device_refresh(self): """Force an immediate refresh of the device list""" if self._update_in_progress or self._destroyed: @@ -724,7 +693,6 @@ class BluetoothConnections(Box): def on_destroy(self, widget): """Cleanup when widget is destroyed""" self._destroyed = True - self.stop_device_monitoring() self._cancel_pending_refresh() for sig_id in self._client_signal_ids: try: diff --git a/src/window/controlcenter/expanded_player.py b/src/window/controlcenter/expanded_player.py index 903bf6a..fec01ec 100644 --- a/src/window/controlcenter/expanded_player.py +++ b/src/window/controlcenter/expanded_player.py @@ -1,6 +1,6 @@ import weakref -from fabric.utils import GLib, bulk_connect, logger +from fabric.utils import bulk_connect, logger from fabric.widgets.box import Box from fabric.widgets.button import Button from fabric.widgets.image import Image @@ -286,7 +286,6 @@ class PlayerBox(Box): self._signal_connections = [] self._property_bindings = [] self._seekbar_signal_ids = [] - self._init_metadata_polled = False self._cached_duration = 0 self.album_cover = Box(style_classes="album-image-c") @@ -506,7 +505,6 @@ class PlayerBox(Box): self.cover_path = result self._load_initial_metadata() - GLib.timeout_add(500, self._poll_initial_metadata) def _load_initial_metadata(self): try: @@ -533,16 +531,6 @@ class PlayerBox(Box): f"[expanded_player] metadata = self.player._player.props.metadata failed: {e}" ) - def _poll_initial_metadata(self): - if self.exit: - return False - if self._init_metadata_polled: - return False - self._init_metadata_polled = True - self._load_initial_metadata() - self.set_image() - return False - def update_buttons(self, player_buttons, show_buttons): if show_buttons and len(player_buttons) > 1: if len(self.stack_buttons_box.get_children()) != len(player_buttons): diff --git a/src/window/controlcenter/wifi.py b/src/window/controlcenter/wifi.py index 26049ef..5a4ff9d 100644 --- a/src/window/controlcenter/wifi.py +++ b/src/window/controlcenter/wifi.py @@ -272,7 +272,6 @@ class WifiConnections(Box): self.network_service = NetworkClient() self.wifi_service = None self.is_scanning = False # Track scanning state - self.refresh_timer = None # Timer for periodic network refresh self._update_in_progress = False # Prevent concurrent updates self._destroyed = False # Track if widget is destroyed self._signal_ids = [] # Track all service signal IDs for cleanup @@ -387,11 +386,9 @@ class WifiConnections(Box): self.connect("destroy", self.on_destroy) self.connect("unmap", self.on_hide) - self.connect("map", lambda *_: self.start_network_monitoring()) def on_hide(self, *_): """Called when the widget is hidden (popup closed)""" - self.stop_network_monitoring() self._cancel_pending_refresh() if self.other_networks.get_visible(): self.other_networks.set_visible(False) @@ -633,37 +630,6 @@ class WifiConnections(Box): if hasattr(child, "on_changed"): child.on_changed() - def start_network_monitoring(self): - """Start periodic monitoring for network changes""" - self.stop_network_monitoring() - self.refresh_timer = GLib.timeout_add_seconds(5, self.periodic_network_refresh) - - def stop_network_monitoring(self): - """Stop periodic monitoring""" - if self.refresh_timer: - GLib.source_remove(self.refresh_timer) - self.refresh_timer = None - - def periodic_network_refresh(self): - """Periodically refresh network list to catch external connections""" - if self._destroyed: - self.refresh_timer = None - return False - - if ( - self._update_in_progress - or not self.wifi_service - or not self.wifi_service.enabled - ): - return True # Continue monitoring - - try: - self.update_networks() - except Exception as e: - logger.error(f"[WiFi] Error during periodic network refresh: {e}") - - return True # Continue monitoring - def force_network_refresh(self): """Force an immediate refresh of the network list""" if self._update_in_progress or self._destroyed: @@ -750,7 +716,6 @@ class WifiConnections(Box): def on_destroy(self, widget): """Cleanup when widget is destroyed""" self._destroyed = True - self.stop_network_monitoring() self._cancel_pending_refresh() for obj, sig_id in self._signal_ids: try: diff --git a/src/window/panel/notch/player.py b/src/window/panel/notch/player.py index 466f0a7..805fb1b 100644 --- a/src/window/panel/notch/player.py +++ b/src/window/panel/notch/player.py @@ -137,6 +137,7 @@ class NotchPlayer(Box): self._update_from_service() self._sigs.append(service.connect("play", self._on_play)) self._sigs.append(service.connect("pause", self._on_pause)) + self._sigs.append(service.connect("artwork-change", self._on_artwork_change)) if service.playback_status == "Playing": self._start_timer()