feat(dupe): keep active group button on screen (#113) #142

Merged
ValleyGeek merged 2 commits from 0.2.4/issue-113-keep-group-onscreen into main 2026-06-25 06:17:00 +00:00
Member

Summary

  • Duplicates workbench: the duplicate-group list now scrolls automatically to keep the active group's button visible, near 40% from the top of the list, whenever the active group changes — by clicking a group, navigating with W/S, or advancing via Keep/AoK.

Bumps VERSION to 0.3.2.

Test plan

  • pytest — full suite passes (605 passed, 1 skipped)
  • ruff check / ruff format --check pass
  • scripts/smoke-ui-exit.sh — clean Qt teardown
  • New tests covering the auto-scroll-to-active-button behavior across click, W/S, and Keep/AoK advance
  • Manually exercised in a real directory with 2,200 images / 270 duplicate groups
## Summary - Duplicates workbench: the duplicate-group list now scrolls automatically to keep the active group's button visible, near 40% from the top of the list, whenever the active group changes — by clicking a group, navigating with `W`/`S`, or advancing via Keep/AoK. Bumps VERSION to 0.3.2. ## Test plan - [x] `pytest` — full suite passes (605 passed, 1 skipped) - [x] `ruff check` / `ruff format --check` pass - [x] `scripts/smoke-ui-exit.sh` — clean Qt teardown - [x] New tests covering the auto-scroll-to-active-button behavior across click, W/S, and Keep/AoK advance - [x] Manually exercised in a real directory with 2,200 images / 270 duplicate groups
DupeContainer.set_active_tag() and the direct button-click handler both now
funnel through _scroll_active_button_into_view(), which scrolls the dupe-tag
scroll area so the newly active group's button sits ~40% from the top of the
viewport, clamped to the scrollbar's range. The placement math is a pure
classmethod (_compute_scroll_target) so it's testable without rendering a
real scroll area. Every existing way the active tag changes (click, W/S
keyboard prev/next, Keep/AoK advance) shares this one path, so issue #131's
upcoming "next unreviewed" button inherits the behavior automatically.

Threading notes: no worker/thread changes — this is pure main-thread widget
geometry/scrolling, triggered via QTimer.singleShot(0, ...) to defer past
pending layout updates from the existing batched row-building.
VERSION set by hand to 0.3.2, continuing the stacked v0.3.0 tranche
sequence (138 -> 0.3.0, 136 -> 0.3.1, this branch -> 0.3.2).
bump-version.sh/get-version.py only know about origin/main (still
0.2.4 — none of these stacked branches have merged yet), so the script
output is not authoritative here; verified via a refreshed editable
install instead.
ValleyGeek deleted branch 0.2.4/issue-113-keep-group-onscreen 2026-06-25 06:17:00 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ai-collab/bulk-image-organizer!142
No description provided.