From a4703f104fdb3d1b8586f0ca5e0ee31d9ac1f193 Mon Sep 17 00:00:00 2001 From: Hermes Date: Sun, 12 Jul 2026 14:31:58 +0000 Subject: [PATCH] fix: connect signal BEFORE _refresh (was unreachable on exception), bridge_is_open exception-safe, remove bogus QTimer workaround --- toolbar/hermes_bridge.shelf | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/toolbar/hermes_bridge.shelf b/toolbar/hermes_bridge.shelf index c93f503..5c9f59b 100644 --- a/toolbar/hermes_bridge.shelf +++ b/toolbar/hermes_bridge.shelf @@ -28,7 +28,11 @@ def save_config(cfg): json.dump(cfg, f, indent=2) def bridge_is_open(port): - return f"Port {port} is open" in hou.hscript("openport")[0] + try: + out = hou.hscript("openport")[0] + except Exception: + return False + return f"Port {port} is open" in out # ── Styles ────────────────────────────────────────── STYLE_CONNECTED = ( @@ -51,9 +55,9 @@ class HermesBridgeWindow(QtWidgets.QWidget): self.port = self.cfg.get("port", DEFAULT_PORT) self.hostname = socket.gethostname() self._build_ui() - self._refresh() - # Connect after refresh — style changes don't kill the signal + # Connect signals FIRST — _refresh may throw but button must work self.btn_toggle.released.connect(self._toggle) + self._refresh() def _build_ui(self): self.setWindowTitle("Hermes Bridge") @@ -129,11 +133,6 @@ class HermesBridgeWindow(QtWidgets.QWidget): f"on {self.hostname} (port {self.port}).") def _toggle(self): - # Defer to next event loop cycle — avoids re-entrancy - # issues with hou.hscript in signal handler context - QtCore.QTimer.singleShot(0, self._execute_toggle) - - def _execute_toggle(self): try: if bridge_is_open(self.port): hou.hscript(f"closeport {self.port}")