Commit Graph
3885 Commits
Author SHA1 Message Date
aiongg fd26427cab Merge upstream main into docking-adoption 2026-10-25 16:24:58 +00:00
Brandon ThomasandClaude Opus 5.5 03c88c166c Release 0.14.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.14.0
2026-10-25 09:26:32 -04:00
aiongg 4bc5d2b587 Docking: the web app resets a saved split-frame layout once too 2026-10-25 12:17:42 +00:00
aiongg b477efd3da Docking: repin craft-ui and craft-docpath to craft-libs b6d35e2 2026-10-25 12:17:31 +00:00
aiongg 8ae15d4f5e Docking: side panels in dock columns; saved split-frame layouts reset once 2026-10-25 12:17:28 +00:00
aiongg 4e6c210a5f Docking: repin craft-ui and craft-docpath to craft-libs 4dc543c 2026-10-25 05:57:50 +00:00
aiongg 7291abdc14 Merge upstream main into docking-adoption 2026-10-25 05:55:03 +00:00
aiongg 31ec62cd03 Info panel Target Photo edits, Add Keywords cursor request and Fixed keys follow-ups (#2889)
* LR-PREF-SHORTCUTS: the shortcuts panel's Fixed keys ignore keys saved for unknown commands

* KEYC-METADATA: an Add Keywords request the Keywords panel can't take in time expires

* LR-META-INFO: Target Photo saves an Info edit to the photo it shows
2026-10-25 00:58:10 -04:00
aiongg 5e548627df Merge pull request #2876 from aiongg/dotcoocoo-batch
Integration batch: 10 community PRs (slideshow, print templates, View Options, Info panel, keyword and metadata keys)
2026-10-25 00:13:38 -04:00
aiongg e8588b925b Docking: repin craft-ui and craft-docpath to craft-libs 8a503cf 2026-10-25 03:59:13 +00:00
aiongg c3feda15c0 LR-META-INFO: the Info panel shows Selected Photos by default; gaps.md lists its change notes once 2026-10-25 03:36:14 +00:00
aiongg e339afc263 Merge PR #2810: LR-META-INFO: the Info panel can show metadata for the selected photos 2026-10-25 02:25:16 +00:00
aiongg 6e5e958639 Merge PR #2792: LRC-DEV-VIEWOPTIONS: View Options can turn off the loupe's "Rendering…" message 2026-10-25 02:24:50 +00:00
aiongg 17a3b80702 Merge PR #2790: LRC-DEV-VIEWOPTIONS: the info overlay can show briefly when the photo changes 2026-10-25 02:24:29 +00:00
aiongg 77196373a9 Merge PR #2870: KEYC-METADATA: Cmd+K / Ctrl+K puts the cursor in the Add keyword box 2026-10-25 02:24:29 +00:00
aiongg 122859d269 Merge PR #2846: KEYC-METADATA: Alt+0 / Alt+Shift+0 go to the next / previous keyword set 2026-10-25 02:24:03 +00:00
aiongg 387ad02b79 Merge PR #2832: LR-PREF-SHORTCUTS: a declared shortcut yields to a key the saved keymap gives another command 2026-10-25 02:23:22 +00:00
aiongg eb9ef0a40e Merge PR #2824: KEYC-METADATA: Cmd+Alt+Shift+C / V copy and paste metadata 2026-10-25 02:23:21 +00:00
aiongg 5c46163e66 Merge PR #2778: LRC-PRINT-TEMPLATES: print templates export to a file and import from one 2026-10-25 02:23:20 +00:00
aiongg f923967c63 Merge PR #2786: LRC-SS-PLAYBACK: a manual slideshow waits for the arrow keys 2026-10-25 02:23:20 +00:00
aiongg 75d8e06850 Merge PR #2816: Tests: the launch-list read-only test compares a held lock file without reading it (Windows) 2026-10-25 02:23:19 +00:00
aiongg 8e16c05cbb Docking: a panel whose saved place is gone opens beside the photo on its side
When a hidden panel's anchor is neither shown nor hidden, craft-ui falls
back to the given anchor's tabs. The photo view is that anchor and takes no
tabs, so the panel opens beside it on its default side instead of at the
right edge. Test: Library anchored on an absent Presets opens to the left
of the photo.
2026-10-25 00:34:42 +00:00
dotCooCoo beb42abb25 KEYC-METADATA: Cmd+K / Ctrl+K puts the cursor in the Add keyword box
Lightroom Classic's keyboard shortcut page lists Command+K (Ctrl+K on
Windows) for Add keywords. LightCraft had no key for it.

Add Keywords (panel.addKeywords, Cmd+K) shows the Keywords panel,
opens its Keywording section when it is folded shut, and puts the
cursor in the Add keyword box, so the next keywords typed go to the
selected photos. Pressed again, it leaves the panel open. With no photo
selected the panel shows its note, and selecting photos later does not
move the cursor into the box.

The command label has a row in every catalog. The KEYC-METADATA row,
docs/ui-parity.md and docs/library-shortcuts.md list the key. The
KEYC-METADATA row also lists the existing Alt+1 to Alt+9 keyword set
keys in place of "no keyword sets".
2026-10-24 16:48:57 -07:00
aiongg 02aa1e0f59 Docs: only the five split zones of ui.dock move have PascalCase names 2026-10-24 23:41:54 +00:00
aiongg 1e4cc14dfb Docking: group and window menu labels go through tr() in sentence case 2026-10-24 23:41:54 +00:00
aiongg 63ab092576 View: F8 on a right panel that isn't showing brings it forward in its mode
When the right panel is open but minimized or behind another tab, F8 keeps
its mode instead of switching to the one it last hid, and view.rightPanel
reveals Tools. Test: F8 on a minimized floating Tools window in Crop opens
the window and stays in Crop.
2026-10-24 23:37:41 +00:00
aiongg e442e3d220 Docking: a panel with no recorded place opens beside the photo on its side
Showing a panel that has no hidden entry skips craft-ui's right-edge
fallback and opens it beside the photo view on the panel's default side.
Test: Library opens to the left of the photo, Presets to the right.
2026-10-24 23:36:03 +00:00
aiongg ee1576682a Docking: a drop at the window's edge makes no dock column
The side panels are frames whose widths LightCraft tracks, so new_dock_zones
is off. Test: an edge drop of Tools leaves the layout without a Node::Dock.
2026-10-24 23:33:27 +00:00
dotCooCoo 1b0a9dae1b LR-META-INFO: the Info panel's GPS field is a TextField, so Esc gives an edit up
The GPS box was an egui TextEdit: Esc left the field with the typed text
kept, and leaving the field saved it. It is now the app's TextField, as the
other Info fields are: Esc puts the text back and saves nothing, and the
field gets the Cut / Copy / Paste / Select All menu.
2026-10-24 15:49:45 -07:00
aiongg b2f6246314 Docking: repin craft-libs 6e7f285 (the docking follow-ups) 2026-10-24 22:29:00 +00:00
aiongg a27d8c05d4 Docs: ui.dock above and below name the target's group 2026-10-24 22:19:29 +00:00
dotCooCoo 7a4e842dd5 LR-META-INFO: an Info field saves to the photos selected when its edit started
The text fields and GPS saved with no `ids`, so `photo.setMeta` wrote to
whatever was selected when the edit ended. A selection change during an
edit then gave the typed text to the new selection. Each edit now keeps
the selected photos from its start and saves to them.
2026-10-24 14:51:15 -07:00
aiongg 5b7a4e9a94 Docs: ui.dock move lists the tab, above and below zones 2026-10-24 21:31:46 +00:00
aiongg a70d7638a0 Docking: repin craft-libs 1774443; a dragged divider keeps its panel's width without app code
craft-ui and craft-docpath are pinned to craft-libs
17744430be327d0257496a6a31c8d38fe20a6756, where a divider drag keeps the
split's sizing mode. LightCraft no longer turns dragged ratios back into
side-panel widths.
2026-10-24 20:45:00 +00:00
dotCooCoo b572dee19f KEYC-METADATA: Alt+0 / Alt+Shift+0 go to the next / previous keyword set
Lightroom Classic's keyboard shortcut page lists Option+0 / Option+Shift+0
(Alt+0 / Alt+Shift+0 on Windows) for cycling forward and backward through
the keyword sets; LightCraft had no key or command for it. Next Keyword
Set (keyword.nextSet, Alt+0) and Previous Keyword Set
(keyword.previousSet, Alt+Shift+0) make the set after or before the
current one current, in the Keyword Set menu's order: Recent Keywords,
then the saved sets. The keys wrap around at either end, and Alt+1 to
Alt+9 then apply the new set's keywords.

The two command labels have rows in every catalog. The KEYC-METADATA and
LRC-LIB-KEYWORDS rows, docs/ui-parity.md and docs/library-shortcuts.md
list the keys.
2026-10-24 12:55:46 -07:00
aiongg c964b7f654 Docking: a dragged divider beside Library or Tools keeps that panel's width
craft-ui stores a moved divider as a ratio. After each frame the split
beside a side panel takes the width the panel was drawn at, so the panel
keeps its width when the window resizes and left_width / right_width follow
the drag.
2026-10-24 19:44:32 +00:00
aiongg 5ce171da23 Docking: the workspace, its commands and their parser come from craft-ui (craft-libs 16fb3d4)
craft-ui and craft-docpath are pinned to craft-libs 16fb3d46e1eaa0d455465e4e66a3ac7b17b55bd3.
The saved workspace is craft_ui::docking::Workspace<Panel>; settings written
before it had a version load as version 1. ui.dock params parse as the shared
DockCommand and apply through Workspace::apply_all. LightCraft keeps its
panels, permissions, default layout, photo-view checks, the fallback beside
the photo view for a panel with no recorded place, and its settings file.

The photo view takes side splits (accepts_splits on PROTECTED), so panels
still open and move beside it.

Tests: a version 1 workspace file loads and reopens its hidden panel; a drag
of a group by its bar moves both of its panels.
2026-10-24 19:23:08 +00:00
dotCooCoo 8d67b834e4 LR-PREF-SHORTCUTS: a declared shortcut yields to a key the saved keymap gives another command
When a saved keymap gave a key to one command and a later build declared
the same key as another command's default, one press ran both commands,
and menus and Help > Keyboard Shortcuts listed the key on both.

binding() now drops a declared shortcut while the keymap gives its key to
another known command, other than its contextual partner. handle(),
conflicts(), shortcut_of(), the menus and the shortcut editor read it.
In the editor such a row counts as changed, so its restore button takes
the key back.

handle() also let every saved entry stop the fixed keys on its key
(Enter in the grid, secondary keys such as Shift+X, the rating and
label digits, Home, End and Shift+arrows), including entries for
commands the build does not know. It now reads only the entries of
known commands, as binding() does, so a stale entry in ui.json no
longer silences Shift+X, a rating digit or a label digit.
2026-10-24 11:20:04 -07:00
dotCooCoo e25cc3ca0b LR-META-INFO: Selected Photos reads the selection when the active photo is outside it
The active photo can be one that is not selected (library.select with an
`active` outside `ids`). With Selected Photos on, the Info fields then
showed that photo's values and marked fields Mixed against it. The fields
now show the active photo's values only when it is selected, and else the
first selected photo's, and compare the selected photos with those.
2026-10-24 10:43:44 -07:00
dotCooCoo 2d5ce5382b Merge branch 'main' into feat/loupe-info-briefly 2026-10-24 10:32:28 -07:00
dotCooCoo cc557e189d KEYC-METADATA: Cmd+Alt+Shift+C / V copy and paste metadata
Copy Metadata and Paste Metadata had no shortcut. They now use
Cmd+Option+Shift+C and Cmd+Option+Shift+V on macOS and
Ctrl+Alt+Shift+C and Ctrl+Alt+Shift+V on Windows and Linux, the keys
Lightroom Classic's keyboard shortcut page lists for copying and
pasting metadata in the Library module. Both keys also work when
Windows and Linux deliver them as clipboard events. The KEYC-METADATA
row now lists the keys LightCraft binds (Cmd+S, the two new keys and
Alt+1 to Alt+9 for keyword sets) and every other key of that table
that is still missing. Gap 28 in docs/gaps.md and the Library keys in
docs/ui-parity.md list the two new keys.
2026-10-24 09:13:54 -07:00
dotCooCoo a9d2c594b0 LRC-PRINT-TEMPLATES: print template tests clean up their folder on failure
The template file tests now create their folder through a Scratch guard
that removes it when the test ends, including when an assertion fails,
as tests_folders.rs and tests_slideshow_export.rs do.
2026-10-24 08:56:00 -07:00
dotCooCoo 9fcf7f5b88 LRC-DEV-VIEWOPTIONS: switching libraries restarts Show Briefly When Photo Changes
Photo IDs are local to a library, so the loupe's last photo is forgotten when another library opens, and a photo there with the same ID shows the info overlay again.
2026-10-24 08:24:49 -07:00
dotCooCoo d2c8d46a7b Tests: the launch-list read-only test compares a held lock file without reading it
On Windows, tests_launch_library::listing_the_libraries_leaves_every_folder_byte_identical
failed every time with os error 33. Its snapshot read every file in the folder, including the
lock file of the library the test holds with LibraryLock::acquire. On Windows that lock is
LockFileEx, and reading the locked bytes through another handle fails with
ERROR_LOCK_VIOLATION.

The snapshot now records each file's length as well as its contents and modification time.
When the read of a catalog.lock fails with os error 33 on Windows, its contents are left out
and the file is compared by its length and modification time. Every other file is still
compared byte for byte, and on other platforms the held lock file is too. The app does not
read a held lock file anywhere, so only the test changes.
2026-10-24 08:03:17 -07:00
Brandon Thomas 38f8d25087 Merge PR: integration batch 44 (11 community PRs)
Integration batch 44: 11 community PRs
2026-10-24 11:00:48 -04:00
Brandon Thomas 5f8593a074 Merge PR #673 2026-10-24 10:20:14 -04:00
Brandon Thomas f7d11bf750 Merge PR #1956 (with maintainer follow-up)
# Conflicts:
#	docs/whats-new.md
2026-10-24 10:20:14 -04:00
Brandon Thomas 82c39a9847 Merge PR #2011 (with maintainer follow-up)
# Conflicts:
#	docs/whats-new.md
2026-10-24 10:20:14 -04:00
Brandon Thomas d7e7639d7a Merge PR #2800 2026-10-24 10:20:13 -04:00
Brandon Thomas 3f1e5c21d6 Merge PR #2775
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
2026-10-24 10:20:13 -04:00