View > Right Panel (view.rightPanel, F8) hides the right panel and shows the one that was
there again (Edit when nothing was remembered; Crop, Remove, Masking and Red Eye end when
hidden and come back as Edit). View > Hide All Panels (view.allPanels, Shift+Tab) hides the
left sidebar, the right panel, the Presets column and the filmstrip; the next press brings
back exactly what was shown, so a panel that was already hidden stays hidden. Showing any
panel by hand while they are hidden makes the snapshot stale: the next Shift+Tab hides again
instead of resurrecting old state. Both commands take an optional show / hide parameter and
are checked in the View menu while they apply. The top bar and tool strip stay.
Shift+Tab is also egui's "focus previous widget", set when the pass begins and without
consuming the key; with nothing focused it focused the loupe. The shortcut consumes the key
and cancels the traversal. In a focused text field neither key is a shortcut, and Shift+Tab
keeps moving focus as before. On a Mac keyboard F8 is Play/Pause unless fn is held or
"Use F1, F2, ... as standard function keys" is on.
Docs: KEYC-PANELS is partial (Tab, T, F5 and solo remain; F6 / F7 are in PR #1078), KEYC-HELP
is done (F1), KEYC-RATING's missing list drops the already implemented [ ] keys, two View
menu rows are added, gap 28 shrinks, and the parity summary is refreshed with
cargo xtask parity --write (it was already stale on main).
The native menu leaves Shift+Tab to egui (no accelerator, so the macOS menu shows no key hint) and
the native_menu accelerator test lists it with the other keys egui handles.
On merge: the HDR histogram is applied in develop_reporting (#712 split develop), is skipped for
draft renders (a second render per drag tick), and HdrBins::bin clamps a hand-built split so it
can't underflow (test hdr_bins_with_any_split_stay_in_range).
photo.editExternal takes the selection (or ids, at most 50): each photo gets its own -Edit copy
stacked on its original, the copies are selected and returned in copies (path / id / original
still name the first). Photo ▸ Edit In opens each copy in the editor.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BKWB9TCnvzJHV6xMLAj2J4
On merge: Lightroom's default profiles (Adobe Standard, Adobe Color), named by nearly every sidecar,
give no camera-profile warning; other profiles still do (test default_lightroom_profiles_are_not_reported).
The import help string keeps main's onDeleted wording and gains warnings.
On merge: the quick preview path orients like the whole-file path (preview_orientation with the
raw's header prefix, so a portrait raw whose embedded JPEG carries no orientation is not sideways),
and its doc links point at preview_window.
Turning on AI Denoise without a model opens Settings > AI Denoise and
keeps a pending request, so the switch showed checked and Settings
offered "Cancel pending action". Closing the setup with no model
download or installation running now drops that request: the switch
goes back off and nothing claims to be pending. A download started
before closing still turns AI Denoise on when it finishes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BKWB9TCnvzJHV6xMLAj2J4
File > Import Profiles & Presets... now builds one toast for both halves
(a second toast replaced the first, so a .cube-only import said "No new
presets"). The preset half is skipped when no preset files were picked,
and profile.import's failures are shown with their reason. profile.import
also reports .cube files and zips it couldn't read instead of dropping
them silently. The command's result carries the profile half under
"profiles".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BKWB9TCnvzJHV6xMLAj2J4
On merge: metadata.downloadPlaceNames accepts plain http only for the loopback address itself
(http://127.0.0.1.example.com/ and http://127.0.0.1@host/ are refused; test
download_base_is_https_or_loopback_only).