Skip to content

feat(receiver): add pane fullscreen shortcut and drag-to-remove - #126

Draft
raiseCatError wants to merge 1 commit into
devfrom
feature/window-pane-ux
Draft

raiseCatError wants to merge 1 commit into
devfrom
feature/window-pane-ux

Conversation

@raiseCatError

Copy link
Copy Markdown
Owner

Implements parts A and B of #120 (and the wording part of C).

Behavior

Double-tap a pane title → Fullscreen on This Device; double-tap again → the previous arrangement.

  • Reuses enterLocalFullscreen / exitLocalFullscreen (presentation only: the saved tree, pane order, sizes and tabs are untouched, so restore is exact). No Mac window geometry or display-mode change.
  • The pane title stays visible in local fullscreen, so the same gesture exits. Exit Fullscreen in the strip and the long-press menu remain.
  • The first tap still acts immediately (select/switch tab); there is no single-tap delay. Label taps are never forwarded to the Mac.
  • VoiceOver/TalkBack: a "Fullscreen on This Device" / "Exit Fullscreen" action on the label. Animation is skipped with Reduce Motion.

Drag an existing pane → Cancel or Remove from Layout.

  • Remove is offered only for .pane(id, tab: nil) drags in Window mode with another pane left. Never for tabs, Stage Peek windows/apps, new panes, or the last pane (its menu still has Remove from Layout).
  • Removal goes through removeTile (one undo step). It never sends windowClose or windowAction (asserted in tests).
  • Cancel lights neutral grey beside a red Remove; both ≥44 pt (48 dp on Android) with short labels for narrow phones; a haptic tick on entering each.

Wording: menu accessibility hints now state that fullscreen affects only this device and that Remove keeps the Mac window open. WINDOW_MODE.md and RECEIVER_CONTROLS.md are updated to the shipped behavior.

Verification

  • OpenSidecarMacTests/WorkspaceClientTests: 22/22 pass, including the new testDoubleTapFullscreenToggleRestoresTheExactLayout and testDraggingAPaneToRemoveTakesItOutOfTheLayoutOnly.
  • iOS simulator build (OpenSidecariOS): succeeds.
  • Android :app:compileDebugKotlin: succeeds. No Android unit test (the controller needs a Context; there's no Robolectric).
  • Not done: on-device or simulator interaction QA (gesture timing feel, drop-zone placement), VoiceOver/TalkBack runs, Android UI tests.

Limitation

A pane holding several tabs can't be dragged to Remove, because each of its labels is a tab drag; its menu still offers Remove from Layout.

… to Remove from Layout

Double-tapping an existing pane's title toggles Fullscreen on This Device
(presentation only; the saved arrangement is restored exactly). The first
tap still acts immediately, and label taps never reach the Mac.

While repositioning a whole pane with others left, a Remove from Layout
target appears beside Cancel. It removes the pane from this device's
layout only (one undo step) and is never offered for tabs, Stage Peek
windows or apps, or the last pane.

Same behavior on iOS/iPadOS/Mac receiver (shared SwiftUI) and Android.
Refs #120
@raiseCatError raiseCatError changed the title Window view: double-tap pane title for local fullscreen, drag to Remove from Layout feat(receiver): add pane fullscreen shortcut and drag-to-remove Nov 3, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant