status bar
git clone https://git.lucas.co/cce-status-interface.git
fix: dedup viewport pushes on parsed content, not the raw payload
The raw viewport text embeds live camera pan/zoom, so during a camera
animation every push differed as a string while parsing to identical
tabs — the window module rebuilt (and the compositor re-baked blur)
per animation frame, flickering the mode text until the camera
settled. Compare the parsed result instead.
Co-Authored-By: Claude Fable 5 <[email protected]>
src/main.rs | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/main.rs b/src/main.rs
index 59745ca..de6ab44 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1275,7 +1275,15 @@ impl cce_ui::engine::Application for StatusApp {
let mut changed = true;
match msg {
CustomEvent::ViewportUpdated(t) => {
- changed = self.viewport != t;
+ // Dedup on the PARSED tabs, not the raw payload: the raw
+ // text embeds live camera pan/zoom numbers, so a camera
+ // animation re-delivers a string that differs every frame
+ // while the rendered viewport content is identical — raw
+ // comparison made the whole segment rebuild (and the
+ // compositor re-bake its blur) per animation frame, which
+ // reads as the module flickering until the camera settles.
+ changed = self.viewport != t
+ && parse_viewport_text(&t) != parse_viewport_text(&self.viewport);
self.viewport = t;
}
CustomEvent::LayoutUpdated(l) => {