198dc7113728579af0b62013ab6e25c348cca78d
A panel that owns something on the server — a pty, a lock — has had no way to be told it was closed. `TerminalWrapper` says so in a comment: it cannot kill on unmount, because a drag, a swap, a mobile panel switch and a genuine close are the same event from inside the component. So the signal is raised where the intent is, not where the teardown is. `usePanelClose(panelId, fn)` registers a handler; `WorkspaceView` fires it from `handleRemove` and from `handleSetApp` when the app actually changes, and from nowhere else. Registration is deliberately never torn down — "unmounted" is the ambiguous signal being replaced, so honouring it would reintroduce the bug — and handlers are stamped with the workspace they were registered on so one dashboard's panel id cannot fire another's. `findPanelApp` is what tells a real app change from re-picking the app already there, which `setApp` treats as a no-op; without it every pick from the app menu would close a panel that never closed. No app uses the hook yet. The terminals come next; a chat panel deliberately never will, since a chat panel is a pointer to a server-side session and closing the window must not delete what it points at.
Description
No description provided
42 MiB
Languages
TypeScript
90.9%
Shell
4.7%
JavaScript
4.1%
CSS
0.2%
HTML
0.1%