From 0caa0f9813725a9a015f0181264a4af28f5c2a44 Mon Sep 17 00:00:00 2001 From: karim Date: Tue, 19 May 2026 04:43:35 +0200 Subject: [PATCH] pendingApplyLayout: auch skippen wenn marker matched MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Log nach E zeigte ZWEI Apply-Auslöser hintereinander: 1. Cold-Start in _on_ready (setzt marker) → 4 Panels remountet 2. pendingApplyLayout vom Launcher (~Sekunden später) → applied erneut weil pending-Pfad keinen marker-Vergleich machte → 8 Panels remountet → doppelte Re-Mount-Welle, riesiger versteckter Cost. Fix: gleicher marker-Vergleich wie im _on_ready-Pfad. Wenn der gewuenschte Layout-Name bereits persistent angewendet wurde, skippen + pending-Flag trotzdem aus settings.json poppen. Force-Apply-Use-Case (User klickt "Jetzt anwenden" im Launcher): Launcher kann den marker vorher leeren (windowLayoutLastApplied="") um Re-Apply zu erzwingen — bisher nicht im Launcher implementiert, kommt bei Bedarf. Co-Authored-By: Claude Opus 4.7 --- rhino/oberleiste.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/rhino/oberleiste.py b/rhino/oberleiste.py index d058748..d61e0c8 100644 --- a/rhino/oberleiste.py +++ b/rhino/oberleiste.py @@ -1175,9 +1175,18 @@ class OberleisteBridge(panel_base.BaseBridge): pend_layout = cfg.get("pendingApplyLayout") if isinstance(pend_layout, str) and pend_layout: - print("[OBERLEISTE] pendingApplyLayout:", pend_layout) - if _apply_window_layout(pend_layout): - cfg["windowLayoutLastApplied"] = pend_layout + # Wenn das Layout bereits persistent angewendet wurde (z.B. + # vom Cold-Start-Apply paar Sekunden vorher), skippen wir den + # Re-Apply. Sonst triggert es eine zweite Re-Mount-Welle (ALLE + # Panels nochmal). Force-Apply (vom User-Klick im Launcher) + # kann marker vorher leeren um zu erzwingen. + if cfg.get("windowLayoutLastApplied") == pend_layout: + print("[OBERLEISTE] pendingApplyLayout '{}' bereits " + "persistent angewendet — skip Re-Apply".format(pend_layout)) + else: + print("[OBERLEISTE] pendingApplyLayout:", pend_layout) + if _apply_window_layout(pend_layout): + cfg["windowLayoutLastApplied"] = pend_layout cfg.pop("pendingApplyLayout", None) mutated = True