← Commit history

v0.9.94: show_3d_board/show_3d_chip wait for the async editor window before the 3D viewer (no more 'not open' race)

John Lauer ·136a4be62d ·2mo ago ·parent 6fcf58a
5 files changed +20−8
BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.9.93+0.9.94
adom-bridge-kicad-manifest.json+5−5
@@ -1,15 +1,15 @@ {   "manifest_version": 1,   "name": "kicad",-  "version": "0.9.93",-  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.93/adom-bridge-kicad-v0.9.93.zip",-  "sha256": "aa2783fe9d50896d4ee466cb4cd4f25bbff25cffa9eacff1bf4133edb71cd5b5",-  "size": 387661,+  "version": "0.9.94",+  "url": "https://wiki.adom.inc/download/adom/kicad-bridge/0.9.94/adom-bridge-kicad-v0.9.94.zip",+  "sha256": "297d99612fab0cdfac9f2fdd1b645fa4b4a2ac77844ce1671667526b2606cbd9",+  "size": 387818,   "verbPrefixes": [     "kicad_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-08-14T18:53:13Z",+  "released_at": "2026-08-14T18:56:33Z",   "hero": "https://wiki.adom.inc/blob/app/kicad-bridge/kicad-hero.png",   "languages": [     "Python",
adom-bridge-kicad-v0.9.94.zipadded
⋯ 1 unchanged line ⋯
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "kicad",   "displayName": "KiCad EDA",-  "version": "0.9.93",+  "version": "0.9.94",   "description": "Reverse bridge for KiCad \u2014 board/schematic introspection, lint via kicad-cli, plugin install, multi-instance probe, in-process DRC.",   "homepage": "https://wiki.adom.inc/adom/adom-bridge",   "author": "Adom Inc.",
handlers/show.py+13−1
@@ -22,7 +22,9 @@ symbolName/footprintName (+ optional libraryName), or filePath for the docs. """ from handlers.open_files import handle_open_board, handle_open_schematic from handlers.open_symbol_editor import handle_open_symbol_editor-from handlers.open_footprint_editor import handle_open_footprint_editor, handle_open_3d_viewer+import time+from handlers.open_footprint_editor import (handle_open_footprint_editor, handle_open_3d_viewer,+    _find_pcb_editor, _find_footprint_editor)   def handle_show_symbol(kicad_info: dict, args: dict) -> dict:@@ -50,6 +52,10 @@ def handle_show_3d_chip(kicad_info: dict, args: dict) -> dict:         if not loaded.get("success") and not loaded.get("editorOpened"):             loaded["surface"] = "3d_chip"             return loaded+        for _ in range(20):+            if _find_footprint_editor():+                break+            time.sleep(0.5)     r = handle_open_3d_viewer(kicad_info, {**a, "editor": "fp"})     r.setdefault("surface", "3d_chip")     return r@@ -81,6 +87,12 @@ def handle_show_3d_board(kicad_info: dict, args: dict) -> dict:         if isinstance(opened, dict) and not opened.get("success"):             opened["surface"] = "3d_board"             return opened+        # open_board launches pcbnew ASYNC — wait for its window before the 3D+        # viewer (which needs a live PCB editor) so we don't race "not open".+        for _ in range(40):+            if _find_pcb_editor():+                break+            time.sleep(0.75)     r = handle_open_3d_viewer(kicad_info, {**a, "editor": "pcb"})     r.setdefault("surface", "3d_board")     return r