Flutter's macOS engine only sends mouse-moved events to the key window
by default. The borderless audience (beamer) window deliberately never
becomes key, so chart tooltips never appeared on the second screen, and
hover styling stuck around whenever a window lost key status before the
exit event arrived. Track the mouse whenever the app is active instead,
for both the main window and every secondary window.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
When a second display is connected (macOS), presenting now opens a
borderless audience window on the beamer showing the slide, while the
main window shows the presenter view (current/next slide, speaker notes,
clock, controls) on the laptop. The two windows stay in sync over method
channels: navigation, blank screen, audio-complete and beamer clicks are
forwarded between them, and media plays only on the beamer to avoid
double audio. Falls back to the existing single-window presenter when
there is one display or the second window can't be created.
- Vendors a fork of desktop_multi_window in third_party/ that re-adds the
native macOS window geometry/fullscreen calls (coverScreen, setFrame,
close) the published 0.3.0 dropped; wired via a path dependency.
- Registers the app's plugins for sub-windows in MainFlutterWindow so
video/image rendering works on the beamer.
- Routes the multi_window dart entrypoint to a minimal AudienceWindowApp.
Compiles (flutter analyze + macOS debug build) and all tests pass;
runtime two-screen behaviour still needs verification on real hardware.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bundles several in-progress changes from the working tree:
- App appearance / look-and-feel: customizable app theme profiles
(colors, dark interface) with a settings UI and persistence.
- New "Broncode" (source code) slide type: dark code sheet with
syntax highlighting, a dedicated editor with a language picker,
and Marp markdown round-trip via a fenced code block.
- Presenter: eliminate the brief black frame between slides by
precaching neighbouring slide images and enabling gaplessPlayback,
so recordings stay clean.
Adds round-trip tests for the code slide and translations for the
new strings across all supported languages.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Flutter desktop app for building Marp presentations via structured
slide editors, with live preview, fullscreen presenter, and PDF/PPTX
export. Includes Makefile quality gate, CI workflow, and full test suite.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>