← Commit history

1.6.47: dialog-shaped seat detection (exclude Fusion side panels)

John Lauer ·c0dba63067 ·3mo ago ·parent 6e3be8d
5 files changed +31−13
BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.6.46\ No newline at end of file+1.6.47\ No newline at end of file
CHANGELOG.md+10
@@ -3,6 +3,16 @@ All notable changes to the Adom Desktop Fusion 360 bridge, newest first. Canonical: https://wiki.adom.inc/adom/adom-desktop-fusion-bridge ยท GitHub backup: `adom-inc/adom-desktop-fusion-bridge` +## 1.6.47 - 2026-07-06++- **Tightened seat-dialog detection to DIALOG-SHAPED owned popups (fixes a false positive from+  1.6.46).** 1.6.46 matched any owned popup wider than 300px, but Fusion's own side panels (Data+  Panel / browser rail, ~300x785) are owned popups too - so the moment a document was open,+  `find_licensing_dialog()` flagged a drivable Fusion as "blocked by a seat dialog" and readiness+  reported ready:false forever (caught live on winvm: get_app_state succeeded while readiness lied).+  The seat modal is always WIDE (823x262 / 1235x527); side panels are narrow. Detection now requires+  width >= 480, so the panels are excluded and the real dialog still matches.+ ## 1.6.46 - 2026-07-06  - **Fixed the seat/licensing dialog going UNDETECTED (John caught it live on winvm).** The
adom-bridge-fusion-manifest.json+5−5
@@ -1,13 +1,13 @@ {   "manifest_version": 1,   "name": "fusion360",-  "version": "1.6.46",-  "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.46/adom-bridge-fusion-v1.6.46.zip",-  "sha256": "806b9b6dc88b289aa23fc6dbebd7da33944045dfd150808f12a0de69b4152278",-  "size": 345325,+  "version": "1.6.47",+  "url": "https://wiki.adom.inc/download/adom/adom-desktop-fusion-bridge/1.6.47/adom-bridge-fusion-v1.6.47.zip",+  "sha256": "9cfa11c55d99baef1c268a4a13cf69a338eb4af53a8ed5ffe13541e16ec7b3cd",+  "size": 345799,   "verbPrefixes": [     "fusion_"   ],   "healthEndpoint": "/status",-  "released_at": "2026-07-06T14:51:53Z"+  "released_at": "2026-07-06T15:05:00Z" }
bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "fusion360",   "displayName": "Autodesk Fusion 360",-  "version": "1.6.46",+  "version": "1.6.47",   "description": "Drive Autodesk Fusion 360 from the cloud: launch Fusion, electronics board layout, design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers/BOM/CPL), fast APS server-indexed cloud search plus browse/recent/file-info/versions, cloud file download/upload and folder creation, and in-app parametric modeling (fusion_run_modeling_script). Never-charge: APS calls are capped to the free tier.",   "homepage": "https://wiki.adom.inc/adom/adom-desktop-fusion-bridge",   "author": "Adom Inc.",
fusion_detect.py+14−6
@@ -434,15 +434,23 @@ def find_licensing_dialog():     823x262 "Suspend Remote Session" confirm variant, so readiness reported the dialog     gone while it sat there blocking (John caught it live, 2026-07-06). A size-based     fallback is kept for safety in case owner detection ever returns 0.-    Returns the window dict (with 'owner'), or None."""+    Returns the window dict (with 'owner'), or None.++    SHAPE matters, not just ownership: Fusion's own side panels (Data Panel, browser, the+    comments rail) are ~300px-wide OWNED popups too, so an owned-only match false-fires the+    moment a document is open and reads a drivable Fusion as 'blocked' (caught live on winvm+    2026-07-06, right after this over-broad owned check shipped). The seat/sign-in modal is+    always WIDE (823x262 'Suspend Remote Session', 1235x527 'Active Sessions Exceeded') - far+    wider than any side panel - so we require dialog PROPORTIONS: width >= 480 (excludes the+    narrow panels), height >= 180 (excludes toolbar strips), and smaller than the maximized+    main app."""     wins = family_windows()-    # Primary: an OWNED popup (has an owner window) that is bigger than a tooltip.+    # Primary: an OWNED popup that is DIALOG-SHAPED (wide modal, not a narrow side panel).     for w in wins:-        if w.get("owner") and w["width"] >= 300 and w["height"] >= 120:+        ww, hh = w["width"], w["height"]+        if w.get("owner") and 480 <= ww <= 1500 and 180 <= hh <= 900:             return w-    # Fallback (owner==0 for all): a dialog-sized family window that is NOT the-    # maximized main app (>1500 wide / >900 tall) and not a tooltip. Height floor 180-    # so the 262px confirm still matches.+    # Fallback (owner==0 for all - owner detection failed): same shape gate, no owner req.     for w in wins:         ww, hh = w["width"], w["height"]         if 480 <= ww <= 1500 and 180 <= hh <= 900: