Skip to content

macOS wrapper polish: close-to-Dock lifecycle, native Edit menu, multi-res icns, ad-hoc codesign #158

Description

@jdmanring

The macOS wrapper is at qt_wrapper parity and integrated (.app in /Applications, Dock pin, native memory mechanisms). Four senior-mac-UI polish items remain, none blocking:

  1. Close-to-Dock lifecycle. The red close button currently quits the app (tears down the page + stops the server). macOS convention: clicking close hides the window and keeps the app running in the Dock; the app quits only via Cmd+Q or the Dock menu's Quit. Requires setQuitOnLastWindowClosed(False), a _quitting flag so Cmd+Q still fully quits, moving stop_server()/geometry-save onto app.aboutToQuit, and a Dock-reopen handler ("app activated and window hidden → show + raise").

  2. Native Edit menu. No menu bar today, so Cmd+C/V route through the macOS first-responder/menu chain and are unreliable in the web view. Add a native menu bar (QMainWindow.menuBar() becomes the global mac menu bar) with a standard Edit menu — Undo/Redo/Cut/Copy/Paste/Select All — wired to browser.pageAction(QWebEnginePage.WebAction.*) with QKeySequence.StandardKey shortcuts. Mac-only by construction (an in-window menu bar would be unwanted chrome on Win/Linux, where QtWebEngine handles editing keys directly).

  3. Multi-resolution .icns. build-mac-app.sh currently produces a single 512px icns via sips. Build a proper iconset (16–512 + @2x) rendered from the SVG at native resolution and iconutil -c icns; fall back to sips-from-PNG only without an SVG.

  4. Ad-hoc codesign. codesign --force --deep --sign - Odysseus.app for a stable local identity and reduced quarantine friction. NOT Gatekeeper/notarization — those need a Developer ID and Apple's notary service.

All four are mac-only (mac_wrapper.py / build-mac-app.sh), verifiable on the Tahoe bench except the live Cmd+C keystroke (from-the-chair). Folds under the #43 wrapper work.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions