Revert Window-Layout persistent-skip (Mac Rhino persistiert nicht)
Annahme war falsch: Mac Rhino merkt sich die Window-Anordnung NICHT zuverlaessig zwischen Sessions. User-Report: Layout ist nach Restart "rausgeflogen". Cold-Start-Apply muss jedes Mal laufen. - Cold-Start in _on_ready: sticky-Guard only (1x pro Rhino-Session), cfg.windowLayoutLastApplied entfernt - pending in tick_idle: skip wenn sticky bereits TRUE (= cold-start hat in dieser Session schon applied) — verhindert doppelten Apply und damit die zweite Re-Mount-Welle - _mark_layout_applied()-Helper geloescht - _on_apply (Eto-Button) + APPLY_LAYOUT-Message auf direkten Apply zurueck Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+15
-45
@@ -360,22 +360,6 @@ def _layout_name_to_guid(name):
|
|||||||
return None
|
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):
|
def _apply_window_layout(name):
|
||||||
"""Wendet ein benanntes Window-Layout an. Probiert mehrere Wege weil
|
"""Wendet ein benanntes Window-Layout an. Probiert mehrere Wege weil
|
||||||
Mac Rhino 8 keine offizielle Python-API dafuer exponiert und die
|
Mac Rhino 8 keine offizielle Python-API dafuer exponiert und die
|
||||||
@@ -532,8 +516,7 @@ def open_settings_dialog():
|
|||||||
btn_apply.Text = "Jetzt anwenden"
|
btn_apply.Text = "Jetzt anwenden"
|
||||||
def _on_apply(s, e):
|
def _on_apply(s, e):
|
||||||
if state["defaultLayout"]:
|
if state["defaultLayout"]:
|
||||||
if _apply_window_layout(state["defaultLayout"]):
|
_apply_window_layout(state["defaultLayout"])
|
||||||
_mark_layout_applied(state["defaultLayout"])
|
|
||||||
btn_apply.Click += _on_apply
|
btn_apply.Click += _on_apply
|
||||||
|
|
||||||
btn_save = _ef.Button()
|
btn_save = _ef.Button()
|
||||||
@@ -831,27 +814,16 @@ class OberleisteBridge(panel_base.BaseBridge):
|
|||||||
self._dm_sent = False
|
self._dm_sent = False
|
||||||
self._commands_sent = False
|
self._commands_sent = False
|
||||||
# Default-Window-Layout anwenden, wenn aktiviert und noch nicht in
|
# Default-Window-Layout anwenden, wenn aktiviert und noch nicht in
|
||||||
# dieser Session geschehen. Doppelte Persistenz:
|
# DIESER Rhino-Session geschehen (sticky-flag = process-lifetime).
|
||||||
# 1) `sticky["_dossier_layout_applied"]` — process-lifetime, schuetzt
|
# Mac Rhino persistiert die Window-Anordnung zwischen Sessions
|
||||||
# vor Endlos-Loops wenn die Layout-Restoration Panels re-mountet.
|
# NICHT zuverlaessig — der Cold-Start-Apply muss jedes Mal laufen.
|
||||||
# 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.
|
|
||||||
try:
|
try:
|
||||||
cfg = _settings_load()
|
cfg = _settings_load()
|
||||||
if not sc.sticky.get("_dossier_layout_applied"):
|
if not sc.sticky.get("_dossier_layout_applied"):
|
||||||
layout_name = cfg.get("windowLayout") or cfg.get("defaultLayout")
|
layout_name = cfg.get("windowLayout") or cfg.get("defaultLayout")
|
||||||
if cfg.get("autoApplyLayout") and layout_name:
|
if cfg.get("autoApplyLayout") and layout_name:
|
||||||
sc.sticky["_dossier_layout_applied"] = True
|
sc.sticky["_dossier_layout_applied"] = True
|
||||||
last_applied = cfg.get("windowLayoutLastApplied") or ""
|
_apply_window_layout(layout_name)
|
||||||
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)
|
|
||||||
# Viewport-Colors einmalig pro Session auto-applien (wenn aktiviert)
|
# Viewport-Colors einmalig pro Session auto-applien (wenn aktiviert)
|
||||||
if (cfg.get("autoApplyViewColors") and
|
if (cfg.get("autoApplyViewColors") and
|
||||||
not sc.sticky.get("_dossier_view_colors_applied")):
|
not sc.sticky.get("_dossier_view_colors_applied")):
|
||||||
@@ -1060,8 +1032,7 @@ class OberleisteBridge(panel_base.BaseBridge):
|
|||||||
self._send_settings_state()
|
self._send_settings_state()
|
||||||
elif t == "APPLY_LAYOUT":
|
elif t == "APPLY_LAYOUT":
|
||||||
name = (p.get("name") or "").strip()
|
name = (p.get("name") or "").strip()
|
||||||
if name and _apply_window_layout(name):
|
if name: _apply_window_layout(name)
|
||||||
_mark_layout_applied(name)
|
|
||||||
elif t == "SAVE_LAYOUT_PREF":
|
elif t == "SAVE_LAYOUT_PREF":
|
||||||
cfg = _settings_load()
|
cfg = _settings_load()
|
||||||
if "windowLayout" in p:
|
if "windowLayout" in p:
|
||||||
@@ -1175,18 +1146,17 @@ class OberleisteBridge(panel_base.BaseBridge):
|
|||||||
|
|
||||||
pend_layout = cfg.get("pendingApplyLayout")
|
pend_layout = cfg.get("pendingApplyLayout")
|
||||||
if isinstance(pend_layout, str) and pend_layout:
|
if isinstance(pend_layout, str) and pend_layout:
|
||||||
# Wenn das Layout bereits persistent angewendet wurde (z.B.
|
# Wenn der Cold-Start-Apply (_on_ready) DIESE Session schon
|
||||||
# vom Cold-Start-Apply paar Sekunden vorher), skippen wir den
|
# das Layout gesetzt hat (sticky=True), skippen wir den
|
||||||
# Re-Apply. Sonst triggert es eine zweite Re-Mount-Welle (ALLE
|
# Re-Apply vom Launcher-Pending — sonst triggert es eine
|
||||||
# Panels nochmal). Force-Apply (vom User-Klick im Launcher)
|
# zweite Re-Mount-Welle ALLER Panels.
|
||||||
# kann marker vorher leeren um zu erzwingen.
|
if sc.sticky.get("_dossier_layout_applied"):
|
||||||
if cfg.get("windowLayoutLastApplied") == pend_layout:
|
print("[OBERLEISTE] pendingApplyLayout '{}' — Cold-Start "
|
||||||
print("[OBERLEISTE] pendingApplyLayout '{}' bereits "
|
"hat in dieser Session bereits applied, skip".format(pend_layout))
|
||||||
"persistent angewendet — skip Re-Apply".format(pend_layout))
|
|
||||||
else:
|
else:
|
||||||
print("[OBERLEISTE] pendingApplyLayout:", pend_layout)
|
print("[OBERLEISTE] pendingApplyLayout:", pend_layout)
|
||||||
if _apply_window_layout(pend_layout):
|
_apply_window_layout(pend_layout)
|
||||||
cfg["windowLayoutLastApplied"] = pend_layout
|
sc.sticky["_dossier_layout_applied"] = True
|
||||||
cfg.pop("pendingApplyLayout", None)
|
cfg.pop("pendingApplyLayout", None)
|
||||||
mutated = True
|
mutated = True
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user