One merge window, not fifteen

show_conflict_summary() built a fresh ConflictSummaryDialog every time and
only reassigned self._conflict_dialog — the old dialog was still a child of
the window, so it stayed on screen. check_for_external_changes() runs
resolve_conflicts() on every Syncthing watch tick, so that was one window per
merge, forever. Fifteen had piled up on trav's desktop.

The dialog is now a session-long log: add_event() folds each merge in as its
own timestamped entry, newest first, and the restore button names the merge
it would undo. MainWindow reuses the open dialog and clears its reference on
finished, so closing it lets the next merge open a fresh one instead of
touching a deleted C++ object.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M8Mzze7shr5pZoEgKQU5NW
This commit is contained in:
2026-08-20 20:33:14 -04:00
co-authored by Claude Opus 5
parent afadf31a99
commit 5df0af0bae
4 changed files with 195 additions and 36 deletions
+5 -3
View File
@@ -38,9 +38,11 @@ performance half. This is the correctness half.
never conflict, effective count = base + sum of journals, and `library.json`
stops being rewritten every 3 s during playback — which is what generates
the conflicts in the first place.
- [ ] **Quiet the merge dialog.** Lossless merges (counts and dates only) should
be a status-bar line, not a window; keep the dialog for lossy cases, and
reuse one instance so six can never stack up again.
- [x] **Quiet the merge dialog.** One dialog per session: each merge is folded
in as a timestamped entry (newest first) instead of opening another
window. Fifteen had stacked up. Kept the window for every merge rather
than demoting lossless ones to the status bar — with journals landing,
a merge stops being routine and is worth seeing.
- [ ] Consider a `.stignore` for `.resolved` so merge backups stop syncing
(Round 35 bounded the folder to 10 snapshots, but it still replicates).