Skip to content

Quick Deck: Present takes the whole screen (window.fullscreen) - #550

Merged
ymote merged 1 commit into
mainfrom
feat/quickdeck-present-screen
Oct 19, 2026
Merged

ymote merged 1 commit into
mainfrom
feat/quickdeck-present-screen

Conversation

@ymote

@ymote ymote commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

Quick Deck's Present now takes the whole screen. The Present tap asks the shell for full screen through #520's window.fullscreen, so the show covers the screen instead of only the app's area inside its window. Where the host can't do that (card-host, a phone, a refused request), the show fills the window as before.

Only Quick Deck files change: bundle/main.splash, both READMEs and tests/ui.py.

What changes

  • start_present asks {on: true} once the show has started, within the 5 seconds a press counts for.
  • show() gives the screen back ({on: false}) whenever Present is over, however it ended: Exit, the corner control or the end of the show.
  • on_app_fullscreen(false) ends Present when Esc, ⌘F or another window ends the full screen. on_app_fullscreen(true) after Present already ended gives the screen straight back.
  • A slide drawn for the smaller window is drawn again at the full-screen stage width (present.px). The stretched picture shows until then.
  • tests/ui.py:
    • The shell journey checks that Present covers the whole window and that the window comes back: by Exit in the light pass, by Esc in the dark one.
    • The playback journey waits for the full screen and a settled stage before it measures the clip's box.
  • READMEs (English and Chinese): the Present row describes the full-screen stage and its fallback.

Verified

  • The maintainer pressed Present on a Mac build with this commit (19 Oct). The host window entered macOS full screen and left it on Present's Exit.
  • Hidden macOS runs on main 8e85234 plus this commit, using a shell built from exactly this tree:
    • python3 apps/quickdeck/tests/ui.py --only shell: passed light and dark. The window [54, 76, 1292, 662] went to [0, 0, 1400, 900] for Present and came back (within a point), by Exit in the light pass and by Esc in the dark one.
    • python3 apps/quickdeck/tests/ui.py --only playback: passed light and dark: the autoplay clip and the .pptx copy's tapped clip play in Present full screen (two grabs a second apart differ over the clip's box).
  • Earlier, on the 16 Oct base: the same two journeys passed light and dark. The autoplay clip played on through the full-screen switch.

Not covered

🤖 Generated with Claude Code

The Present tap now asks the shell for full screen (#520's
window.fullscreen), so the show covers the whole screen instead of only
the app's area inside its window. Where the host can't (card-host, a
phone, a refused request) the show fills the window as before.

- start_present asks {on: true} once the show has started, within the
  5 seconds a press counts for.
- show() gives the screen back ({on: false}) whenever Present is over,
  however it ended: Exit, the corner control or the end of the show.
- on_app_fullscreen(false), from Esc, Cmd+F or another window, ends
  Present; on_app_fullscreen(true) after Present already ended gives the
  screen straight back.
- A slide drawn for the smaller window is drawn again at the full-screen
  stage width (present.px); the stretched picture shows until then.

tests/ui.py: the shell journey checks that Present covers the whole
window and that the window comes back, by Exit in the light pass and by
Esc in the dark one; the playback journey waits for the full screen and
a settled stage before it measures the clip's box.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ymote

ymote commented Oct 19, 2026

Copy link
Copy Markdown
Contributor Author

Local CI passed on bff731c (tools/ci-local.sh --only all --linux-host --offload, 14m44s, Darwin arm64; the ubuntu jobs and the macOS jobs' portable steps (their macOS steps ran here) on the Linux build host, Linux x86_64).

GitHub would run for this PR: desktop.yml, phone.yml, apps.yml. Merged on this local pass (macOS runner queue); GitHub CI runs on the merge commit on main.

Job Step Result Time
ci-local / drift The local mapping fits the workflows PASS -
desktop.yml / desktop Prepare the pinned framework sources PASS 1s
desktop.yml / desktop Compile the desktop with the shared runtime PASS 3m58s
desktop.yml / desktop Desktop tools and scripts PASS 18s
desktop.yml / desktop (linux) Prepare the pinned framework sources PASS 0s
desktop.yml / desktop (linux) One copy of every shell source PASS -
desktop.yml / desktop (linux) In-app updater and installer handoff PASS 1m41s
desktop.yml / desktop (linux) One Makepad, App Hub, octos and Rinx in the locked graph PASS 2s
desktop.yml / desktop (linux) The native apps' generated places match native-apps.json PASS 0s
desktop.yml / native-host-api Prepare the pinned framework sources PASS 1s
desktop.yml / native-host-api Build the native acceptance host and pinned Hub CLI PASS 37s
desktop.yml / native-host-api Signed app tool calls a real OS permission API PASS 4s
phone.yml / home Prepare pinned sources and the reviewed runtime patch PASS 0s
phone.yml / home Validate launcher icons and Apple asset catalogs PASS 3s
phone.yml / home Compile Home and its bundled modules PASS 3m06s
phone.yml / home (linux) Prepare pinned sources and the reviewed runtime patch PASS 0s
phone.yml / home (linux) Verify the single runtime graph PASS 2s
phone.yml / home (linux) The native apps' generated places match native-apps.json PASS 0s
phone.yml / home (linux) The pinned octos revision PASS 0s
phone.yml / home (linux) Build octos (unless cached) PASS -
phone.yml / home (linux) Build Home, App Hub admission and runtime policy tests PASS 3m21s
phone.yml / home (linux) Test Home, App Hub admission and runtime policy PASS 42s
phone.yml / home (linux) Two-lane scenario (real kernel, scripted model) PASS 27s
phone.yml / home (linux) Build opt-in AppCard tests PASS 2m49s
phone.yml / home (linux) Test opt-in AppCard PASS 1s
phone.yml / home (linux) Build craft-engine relay and system-chat tests PASS 2m48s
phone.yml / home (linux) Test craft-engine relay and system chat PASS 14s
phone.yml / home (linux) Build linked Terminal tests PASS 2m30s
phone.yml / home (linux) Test linked Terminal PASS 1s
phone.yml / home (linux) Build Wasm and runtime policy tests PASS 1m16s
phone.yml / home (linux) Test Wasm and runtime policy PASS 11s
apps.yml / services (linux) python3 tools/setup.py PASS 0s
apps.yml / services (linux) Shared system app interface PASS 0s
apps.yml / services (linux) Kernel service PASS 18s
apps.yml / services (linux) OctoSense release updater PASS 6s
apps.yml / services (linux) App peers PASS 28s
apps.yml / services (linux) AI providers config PASS 4s
apps.yml / services (linux) Connected provider protocols and Linux host adapter PASS 47s
apps.yml / services (linux) L0 in-card chat (sys.chat, host side) PASS 9s
apps.yml / services (linux) System toolbox (workflow templates) PASS 1m29s
apps.yml / kernel-security (linux) python3 tools/setup.py PASS 0s
apps.yml / kernel-security (linux) The pinned octos revision PASS 0s
apps.yml / kernel-security (linux) Build octos (unless cached) PASS -
apps.yml / kernel-security (linux) Real-kernel tests PASS 41s
apps.yml / apps (linux) python3 tools/setup.py PASS 0s
apps.yml / apps (linux) Host services (Mail, AI providers, News) PASS 2m05s
apps.yml / apps (linux) Connected accounts and Rinx editor PASS 1m31s
apps.yml / apps (linux) Shell AI services (crates/ai-host) PASS 2m58s
apps.yml / apps (linux) AppCard runtime setup safeguards PASS 0s
apps.yml / apps (linux) AppCard clippy (own crates; shared runtime compiles) PASS 26s
apps.yml / apps (linux) AppCard transport and store PASS 7s
apps.yml / apps (linux) One Makepad, App Hub, octos and Rinx in the locked graph PASS 3s
rom.yml / product (linux) python3 -m unittest discover -s tests -v SKIPPED (!) -
rom.yml / product (linux) Check generated Agent Binder client SKIPPED (!) -
rom.yml / product (linux) bash -n scripts/stage-forks.sh scripts/publish-release.sh scripts/apply-to-tree.sh scripts/build-rom.sh PASS -
rom.yml / web-installer (linux) npm ci --ignore-scripts --no-audit --no-fund SKIPPED (!) -
rom.yml / web-installer (linux) npm test SKIPPED (!) -
rom.yml / web-installer (linux) npx playwright install --with-deps chromium SKIPPED (!) -
rom.yml / web-installer (linux) npm run test:browser SKIPPED (!) -
rom.yml / web-installer (linux) python3 -m unittest discover -s tests -p test_installer_manifest.py -v SKIPPED (!) -
rom.yml / web-installer (linux) bash -n scripts/release.sh SKIPPED (!) -
linux-host / sandbox (linux) python3 tools/setup.py PASS 0s
linux-host / sandbox (linux) Process sandbox on Linux (Landlock, seccomp) PASS 1m48s

Skipped (these did NOT pass; (!) marks a skip that blocks tools/ci-local-merge.sh):

  • rom.yml / product (linux): python3 -m unittest discover -s tests -v: javac -version does not work here: install a JDK (17 or newer) and put its bin/ on PATH or set JAVA_HOME
  • rom.yml / product (linux): Check generated Agent Binder client: needs build-tools/35.0.0/aidl, platforms/android-35/framework.aidl in the Android SDK (no Android SDK found): install the SDK packages 'build-tools;35.0.0' and 'platforms;android-35' (sdkmanager) and set ANDROID_HOME
  • rom.yml / web-installer (linux): npm ci --ignore-scripts --no-audit --no-fund: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH
  • rom.yml / web-installer (linux): npm test: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH
  • rom.yml / web-installer (linux): npx playwright install --with-deps chromium: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH
  • rom.yml / web-installer (linux): npm run test:browser: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH
  • rom.yml / web-installer (linux): python3 -m unittest discover -s tests -p test_installer_manifest.py -v: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH
  • rom.yml / web-installer (linux): bash -n scripts/release.sh: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH

Notes:

  • GitHub runs Python 3.12; this run used Python 3.9.6
  • GitHub runs Python 3.12; the Linux host used Python 3.14.4

@ymote
ymote merged commit 0792424 into main Oct 19, 2026
1 of 6 checks passed
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