Skip to content

Allow dragging contacts between To, Cc and Bcc - #34

Merged
mrinc merged 5 commits into
masterfrom
fix/recipient-drag-drop
Oct 4, 2026
Merged

mrinc merged 5 commits into
masterfrom
fix/recipient-drag-drop

Conversation

@bcbetterninja

@bcbetterninja bcbetterninja commented Oct 3, 2026 •

Copy link
Copy Markdown
Collaborator

Recipient chips could not be dragged between To, Cc, and Bcc because compose had no recipient drag/drop handlers. Dragging a Cc contact onto To now moves the existing chip, keeps its display name, and saves/sends it in the destination field. All six field-to-field moves are supported.

The destination highlights during an accepted drag. Pending text in both fields is preserved; an address already present in the destination is merged without a duplicate. Clicking a chip also keeps the recipient input focused for typing. Same-field, unrelated, stale, and cross-compose drops are rejected, and sending/uploading prevents recipient moves. Recipient transfers use an in-process format without exposing contact text to unrelated drop targets.

Validation:

  • Latest CI passed on Windows, Linux, and macOS, including CodeQL.
  • Solution and offline UI preview builds: zero warnings/errors.
  • All 588 tests passed on the updated base, including nine recipient cases covering every direction, immediate autosave, sent recipients, quoted display names, duplicate addresses, and rejected/busy moves.
  • Real X11 pointer regression passed chip-click typing focus in every field, all six To/Cc/Bcc moves, pending text, saved drafts, unrelated/same-field rejection, duplicate merging, and the remove button. Added to Linux PR checks.
  • Existing real X11 compose keyboard regression passed typing, editing, undo, focus switching, and draft capture.
  • The mail fallback regression now uses type:mail so unrelated workspace searches cannot reorder its collection during headless assertions. All 588 tests passed again, plus ten repeated runs of that regression.

Also includes the test-only Windows cleanup fix from PR #36: the temporary legacy recovery fixture disables SQLite pooling so mail.db can be deleted after disposal. This fixes the Windows blocker inherited from the merged PR #35 on the updated base.

@coderabbitai

coderabbitai Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 649766c4-ce84-4ee5-be14-50144bd7e9cb
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3121414b57

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread src/BetterMail.App/ComposeWindow.axaml.cs
@mrinc
mrinc merged commit faa92c3 into master Oct 4, 2026
9 checks passed
@mrinc
mrinc deleted the fix/recipient-drag-drop branch October 4, 2026 15:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants