Count clicks ourselves so double-clicks work at all

Pixi only fills `detail` on the `click` event it synthesises; on
`pointerdown` it is always 0, so every `e.detail === 2` branch was dead
code. Asset rows, hierarchy folding and select-all in text fields never
responded to a double-click.

A shared click counter in src/ui/clicks.ts replaces the three readings of
`e.detail`. A finished double-click ends the run, so two in a row count
2 and 2 rather than 3 and 4.

The harness could only send `clickCount: 1`, which is why no test caught
this: every "activate" check went through Enter. It can send real
double-clicks now, and five checks drive the three paths separately.
This commit is contained in:
root committed 2026-09-09 14:13:05 +02:00
1 parent d7c8d3e579
commit ed1fe31c77
11 files changed
+196 -5

No files matched your search

+2
View File
@@ -181,6 +181,8 @@ export function installDebugHook(app: Application, state: EditorState, editor: E
/** Rows the hierarchy shows – collapsed subtrees are not in here. */
hierarchyOrder: () => hierarchy.rowOrder(),
hierarchyChevron: (id: string) => hierarchy.chevronPosition(id),
/** Centre of a hierarchy row, clear of the chevron – for clicks that must hit the row itself. */
hierarchyRow: (id: string) => hierarchy.rowPosition(id),
hierarchyRowColor: (id: string) => hierarchy.rowColor(id),
hierarchyExpandAll: () => hierarchy.expandAll(),
hierarchyCollapseAll: () => hierarchy.collapseAll(),
+5
View File
@@ -142,6 +142,11 @@ export class HierarchyPanel extends Panel {
return this.list.chevronGlobal(id);
}
/** Global centre of a row, away from its chevron (test hook). */
rowPosition(id: string): { x: number; y: number } | null {
return this.list.rowGlobal(id);
}
expandAll(): void {
for (const object of this.holder()?.objects ?? []) this.expanded.add(object.id);
this.refresh();