diff --git a/rhino/oberleiste.py b/rhino/oberleiste.py index d61e0c8..317ad41 100644 --- a/rhino/oberleiste.py +++ b/rhino/oberleiste.py @@ -360,22 +360,6 @@ def _layout_name_to_guid(name): return None -def _mark_layout_applied(name): - """Schreibt den zuletzt erfolgreich angewendeten Layout-Namen in die - Launcher-settings.json. Spaetere Cold-Starts vergleichen und skippen - den Apply-Cmd wenn der Layout-Name unveraendert ist (Rhino merkt sich - die Window-Anordnung dann selbst persistent).""" - if not name: return - try: - cfg = _settings_load() - if cfg.get("windowLayoutLastApplied") == name: - return - cfg["windowLayoutLastApplied"] = name - _settings_save(cfg) - except Exception as ex: - print("[OBERLEISTE] _mark_layout_applied:", ex) - - def _apply_window_layout(name): """Wendet ein benanntes Window-Layout an. Probiert mehrere Wege weil Mac Rhino 8 keine offizielle Python-API dafuer exponiert und die @@ -532,8 +516,7 @@ def open_settings_dialog(): btn_apply.Text = "Jetzt anwenden" def _on_apply(s, e): if state["defaultLayout"]: - if _apply_window_layout(state["defaultLayout"]): - _mark_layout_applied(state["defaultLayout"]) + _apply_window_layout(state["defaultLayout"]) btn_apply.Click += _on_apply btn_save = _ef.Button() @@ -831,27 +814,16 @@ class OberleisteBridge(panel_base.BaseBridge): self._dm_sent = False self._commands_sent = False # Default-Window-Layout anwenden, wenn aktiviert und noch nicht in - # dieser Session geschehen. Doppelte Persistenz: - # 1) `sticky["_dossier_layout_applied"]` — process-lifetime, schuetzt - # vor Endlos-Loops wenn die Layout-Restoration Panels re-mountet. - # 2) `cfg["windowLayoutLastApplied"]` — file-persistent, schuetzt vor - # re-apply bei jedem Cold-Start. Rhino merkt sich die Window- - # Anordnung selbststaendig nach dem ersten erfolgreichen Apply; - # spaetere Starts brauchen den Layout-Cmd nicht mehr. + # DIESER Rhino-Session geschehen (sticky-flag = process-lifetime). + # Mac Rhino persistiert die Window-Anordnung zwischen Sessions + # NICHT zuverlaessig — der Cold-Start-Apply muss jedes Mal laufen. try: cfg = _settings_load() if not sc.sticky.get("_dossier_layout_applied"): layout_name = cfg.get("windowLayout") or cfg.get("defaultLayout") if cfg.get("autoApplyLayout") and layout_name: sc.sticky["_dossier_layout_applied"] = True - last_applied = cfg.get("windowLayoutLastApplied") or "" - if last_applied == layout_name: - print("[OBERLEISTE] Window-Layout '{}' bereits " - "persistent angewendet — skip Cold-Start-Apply " - "(spart Panel-Re-Mount-Welle)".format(layout_name)) - else: - if _apply_window_layout(layout_name): - _mark_layout_applied(layout_name) + _apply_window_layout(layout_name) # Viewport-Colors einmalig pro Session auto-applien (wenn aktiviert) if (cfg.get("autoApplyViewColors") and not sc.sticky.get("_dossier_view_colors_applied")): @@ -1060,8 +1032,7 @@ class OberleisteBridge(panel_base.BaseBridge): self._send_settings_state() elif t == "APPLY_LAYOUT": name = (p.get("name") or "").strip() - if name and _apply_window_layout(name): - _mark_layout_applied(name) + if name: _apply_window_layout(name) elif t == "SAVE_LAYOUT_PREF": cfg = _settings_load() if "windowLayout" in p: @@ -1175,18 +1146,17 @@ class OberleisteBridge(panel_base.BaseBridge): pend_layout = cfg.get("pendingApplyLayout") if isinstance(pend_layout, str) and 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)) + # Wenn der Cold-Start-Apply (_on_ready) DIESE Session schon + # das Layout gesetzt hat (sticky=True), skippen wir den + # Re-Apply vom Launcher-Pending — sonst triggert es eine + # zweite Re-Mount-Welle ALLER Panels. + if sc.sticky.get("_dossier_layout_applied"): + print("[OBERLEISTE] pendingApplyLayout '{}' — Cold-Start " + "hat in dieser Session bereits applied, skip".format(pend_layout)) else: print("[OBERLEISTE] pendingApplyLayout:", pend_layout) - if _apply_window_layout(pend_layout): - cfg["windowLayoutLastApplied"] = pend_layout + _apply_window_layout(pend_layout) + sc.sticky["_dossier_layout_applied"] = True cfg.pop("pendingApplyLayout", None) mutated = True