linux observer
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Stop emitting LayoutUpdated for text-only menu label changes

Remove update_item() calls for label-only updates in _update_status(),
_update_sync(), and _update_live_stats(). Labels are still assigned to
MenuItem objects so KDE reads fresh values via GetLayout on menu open.

Only structural changes (pause/resume visibility toggles) now emit
LayoutUpdated, fixing the 5-second menu blink on KDE.

+1 -8
-7
src/solstone_linux/tray.py
··· 355 355 "stopped": "not running", 356 356 } 357 357 self._status_item.label = labels.get(status, status) 358 - self.menu.update_item(self._status_item) 359 358 360 359 # Toggle pause/resume 361 360 is_paused = status == "paused" ··· 392 391 "offline": "sync: offline", 393 392 } 394 393 self._sync_item.label = labels.get(sync_status, f"sync: {sync_status}") 395 - self.menu.update_item(self._sync_item) 396 394 397 395 # Update icon — syncing state gets the half icon 398 396 if not self.error: ··· 411 409 new_label = f"segment: {mins}:{secs:02d} remaining" 412 410 if self._segment_item.label != new_label: 413 411 self._segment_item.label = new_label 414 - self.menu.update_item(self._segment_item) 415 412 416 413 # Stats (computed in update()) 417 414 if self.stats: ··· 429 426 430 427 if self._cache_item.label != new_cache: 431 428 self._cache_item.label = new_cache 432 - self.menu.update_item(self._cache_item) 433 429 if self._captures_item.label != new_captures: 434 430 self._captures_item.label = new_captures 435 - self.menu.update_item(self._captures_item) 436 431 if self._uptime_item.label != new_uptime: 437 432 self._uptime_item.label = new_uptime 438 - self.menu.update_item(self._uptime_item) 439 433 440 434 # Update pause remaining in resume button 441 435 if self.status == "paused" and pause_remaining > 0: ··· 443 437 new_resume = f"resume ({pr_mins}m remaining)" 444 438 if self._resume_item.label != new_resume: 445 439 self._resume_item.label = new_resume 446 - self.menu.update_item(self._resume_item) 447 440 448 441 def _build_tooltip(self) -> str: 449 442 """Build rich tooltip body (HTML on KDE)."""
+1 -1
tests/test_tray.py
··· 70 70 assert app._pause_submenu.visible is False 71 71 assert app._resume_item.visible is True 72 72 assert app._status_item.label == "paused" 73 - assert app.menu.update_item.call_count == 3 73 + assert app.menu.update_item.call_count == 2 74 74 75 75 def test_update_status_idle(self): 76 76 app = _make_app()