| Age | Commit message (Expand) | Author | Files | Lines |
| 3 days | feat(compose): wire the composer into the main window, item 123compose-and-send | Danilo M. | 1 | -9/+181 |
| 4 days | feat(compose): register the six compose actions, item 123 | Danilo M. | 1 | -0/+21 |
| 5 days | refactor(ui): extract the busy indicator into a widget, item 134 | Danilo M. | 1 | -2/+2 |
| 6 days | feat: find mail tagged deleted but never moved to trash | Danilo M. | 1 | -0/+11 |
| 7 days | feat(delete): bind Del, and resolve a restore against the database | Danilo M. | 1 | -0/+19 |
| 7 days | feat(trash): restore mail from the trash view | Danilo M. | 1 | -1/+22 |
| 7 days | fix(delete): repair seven defects in the move-to-trash path | Danilo M. | 1 | -5/+80 |
| 8 days | feat(delete): move the message to the account's trash folder | Danilo M. | 1 | -0/+139 |
| 9 days | feat(ui): act on the message a row displays, not its whole thread | Danilo M. | 1 | -8/+93 |
| 10 days | feat(ui): open a thread on its own by double-clicking a row | Danilo M. | 1 | -0/+4 |
| 10 days | fix(sync): send held edits before the sync-end refresh reads the database | Danilo M. | 1 | -0/+10 |
| 10 days | feat(ui): highlight the built-in filter matching the current view | Danilo M. | 1 | -0/+14 |
| 10 days | fix(startup): let startup_query name a built-in filter, and run it | Danilo M. | 1 | -0/+8 |
| 10 days | feat(filters): put the four built-in filters on the query row | Danilo M. | 1 | -1/+25 |
| 10 days | fix(status): count threads as they arrive instead of "Searching..." | Danilo M. | 1 | -0/+13 |
| 11 days | feat(pane): always render one message, never the conversationthread-view-removed | Danilo M. | 1 | -1/+2 |
| 11 days | fix(startup): raise the config-problem modal outside the constructor | Danilo M. | 1 | -1/+15 |
| 11 days | refactor(search): carry SearchMode instead of bool extend | Danilo M. | 1 | -4/+6 |
| 11 days | feat(search): run a search asked for from the message pane | Danilo M. | 1 | -0/+7 |
| 11 days | feat(rules): seed the rules dialog even when it is open | Danilo M. | 1 | -1/+6 |
| 12 days | feat(queries): edit, pin and delete a saved query from the UI | Danilo M. | 1 | -0/+36 |
| 12 days | fix(queries): put the Save query button beside the query bar | Danilo M. | 1 | -0/+3 |
| 12 days | feat(queries): save a query from the UI, and split the buttons off the query row | Danilo M. | 1 | -0/+21 |
| 12 days | feat(rules): preview a rule's mail in the thread list | Danilo M. | 1 | -0/+26 |
| 13 days | feat(rules): open the tagging rules from the Message menu | Danilo M. | 1 | -0/+31 |
| 14 days | feat(sync): sync a tag change automatically after a short delay | Danilo M. | 1 | -0/+19 |
| 2026-08-11 | feat(placeholder): count sent mail and drafts on the blank pane | Danilo M. | 1 | -1/+44 |
| 2026-08-11 | feat(sent): add a Sent view, flat and by recipient | Danilo M. | 1 | -1/+27 |
| 2026-08-10 | feat(view): follow a background sync without a keystroke | Danilo M. | 1 | -0/+105 |
| 2026-08-10 | feat(ui): let the user choose newest or oldest first | Danilo M. | 1 | -0/+1 |
| 2026-08-10 | feat(ui): scope actions to the selected row kind and name it | Danilo M. | 1 | -0/+65 |
| 2026-08-10 | feat(ui): render a single message when its row is selected | Danilo M. | 1 | -0/+9 |
| 2026-08-10 | feat(ui): load a thread's replies when its row is expanded | Danilo M. | 1 | -0/+7 |
| 2026-08-10 | refactor(view): make ThreadListView a QTreeView for message rows | Danilo M. | 1 | -2/+14 |
| 2026-08-09 | fix(ui): stop a restored splitter position collapsing the message pane | Danilo M. | 1 | -0/+8 |
| 2026-08-09 | fix(sync): clear the pending-edit count on a cron sync | Danilo M. | 1 | -2/+9 |
| 2026-08-07 | feat(sync): sync only the accounts with unsynced edits | Danilo M. | 1 | -0/+20 |
| 2026-08-07 | feat(ui): add a Maildir overview under Help | Danilo M. | 1 | -0/+33 |
| 2026-08-07 | feat(ui): fill the blank message pane with a branded placeholder | Danilo M. | 1 | -0/+37 |
| 2026-08-07 | feat(tags): mark every thread in the view read, in one undoable step | Danilo M. | 1 | -0/+26 |
| 2026-08-07 | feat(sync): the status bar says which account is syncing | Danilo M. | 1 | -3/+23 |
| 2026-08-06 | fix(ui): one Sync control, and a query bar that looks finished | Danilo M. | 1 | -1/+4 |
| 2026-08-06 | test: stop two tests depending on the machine they run on | Danilo M. | 1 | -0/+12 |
| 2026-08-06 | fix(sync): hold tag edits made during a background sync | Danilo M. | 1 | -0/+38 |
| 2026-08-04 | fix(sync): count unsynced edits as net state, not as writes | Danilo M. | 1 | -2/+20 |
| 2026-08-04 | feat(ui): make Delete a toggle, and expire transient status messages | Danilo M. | 1 | -0/+22 |
| 2026-08-04 | feat(ui): disable Sync during a background sync, and blank the pane on Esc | Danilo M. | 1 | -0/+17 |
| 2026-08-04 | fix(sync): stop a local sync reporting itself as a background one | Danilo M. | 1 | -2/+12 |
| 2026-08-04 | feat(sync): notice syncs this window did not start | Danilo M. | 1 | -0/+7 |
| 2026-08-04 | feat(ui): make multi-select discoverable and stop it opening threads | Danilo M. | 1 | -0/+23 |