mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-26 03:30:36 +00:00
b5e8e67d71
Closes #1707 — single-click on a workspace tree filename did nothing. #1698 was a regression where the filename's dblclick rename handler was unreachable because the row's el.onclick (openFile) fired synchronously on the first click. The fix in #1702 stopped click propagation on nameEl — but that broke single-click activation entirely (#1707): clicking the filename now did nothing, you had to click the icon or row whitespace to open the file. Restored fix preserves both intents via a 300ms debounced delegator: let _nameClickTimer = null; nameEl.onclick = (e) => { e.stopPropagation(); if (_nameClickTimer) { clearTimeout(_nameClickTimer); _nameClickTimer = null; } _nameClickTimer = setTimeout(() => { _nameClickTimer = null; if (typeof el.onclick === 'function') el.onclick(e); }, 300); }; nameEl.ondblclick = (e) => { e.stopPropagation(); if (_nameClickTimer) { clearTimeout(_nameClickTimer); _nameClickTimer = null; } // ... existing rename body }; Single-click on nameEl schedules a setTimeout that calls el.onclick(e) after the dblclick threshold passes (300ms — matches the OS dblclick threshold on most platforms). Double-click cancels the pending timer and triggers the existing rename input. Cost: 300ms latency on file-open clicks. Acceptable trade for keeping rename reachable on single-click. Also updated tests/test_workspace_tree_rename.py to accept both the pre-#1707 (pure stopPropagation) and post-#1707 (debounced delegator) shapes — the original assertion was too narrow and would have rejected the correct fix. 9 new regression tests in tests/test_1707_workspace_filename_click.py: - 6 source-level static-analysis checks on the patched handler shape - 3 behavioral tests via Node VM (synthesize click → 300ms delay, click → dblclick within tick → assert rename mounts + openFile is not called). 7 of 9 tests fail on master pre-fix (verified); all 9 pass after.