fix(v0.4): full-screen per device — latest-writer-wins PTY sizing
A shared PTY can only be one size; min-sizing clamped the shared session to the SMALLEST viewer, so a wide desktop got letterboxed when an iPad was also attached (iPad looked full-screen, desktop did not). Switch to latest-writer-wins: the device that most recently fit/focused drives the PTY size, so whichever device you're actively using is full-screen. - session.ts: setClientDims resizes the PTY directly (drop min across clients); attach/detach/blur never resize (the active device keeps its size) - frontend: TerminalSession.refit() force-resends dims; window 'focus' / visibilitychange re-assert the active tab's size, so switching devices reclaims full-screen - tests updated for latest-wins (incl. join/hidden/blur don't resize) Verified (two ws clients): 200x50 → iPad 100x40 → desktop refit 200x50 → iPad blur keeps 200x50. 225 tests green.
This commit is contained in:
@@ -349,6 +349,19 @@ export class TerminalSession {
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-fit and FORCE-resend dims (latest-writer-wins): when this device regains
|
||||
* focus, re-assert its size so the shared PTY snaps to this screen even if
|
||||
* another device had resized it. No-op while hidden.
|
||||
*/
|
||||
refit(): void {
|
||||
if (this.el.style.display === 'none') return
|
||||
this.lastCols = -1 // force sendResize to fire even if our dims are unchanged
|
||||
this.lastRows = -1
|
||||
const dims = this.safefit()
|
||||
if (dims !== null) this.sendResize(dims.cols, dims.rows)
|
||||
}
|
||||
|
||||
hide(): void {
|
||||
this.el.style.display = 'none'
|
||||
// v0.4: withdraw our size vote so a backgrounded mirror doesn't clamp the
|
||||
|
||||
Reference in New Issue
Block a user