Repository navigation
v0.3.4 - #429
Merged
Merged
v0.3.4#429
Conversation
hkdb
commented
Sep 18, 2026
Owner
- Added default CC
- Added default BCC - #341
- Added default reply-to - #404
- Added merge identical messages in thread - #222
- Relabeled spellcheck dictionary English to English (US)
- Added spellcheck dictionary: English (UK) - #417
- Added spellcheck dictionary: Dutch
- Added dot and glow dot optional accents for unread messages
- Added window size persistence - #217
- Added mini calendar for easier navigation - #368
- Added Empty Spam button for spam folder - #239
- New app icon with full hicolor size set + scalable SVG - #395 (Special thanks to @gianlucamazza) - #99
- Fixed post delete ghost messages on message list
- Fixed thread sender and preview in message list - #169
- Fixed comma display name - #398
- Fixed composer draft format detection - #420
- Block save all attachments if flatpak - #384
- Calendar color render adjustments to alleviate #406
- Fixed Microsoft calendar attachments handling - #370
- Fixed Contacts pagination - #278
- Fixed M365 contacts - sync all folders - #278
- Fixed M365 calendar - kill the silent-zero paths - #278
- Fixed draft edit logic - #392
Composer.svelte binds a svelte:window keydown handler that closed the
composer on bare Escape with no check for what was on screen. Two
user-visible symptoms:
- Escape on the save-draft prompt did nothing. bits-ui closed the
dialog, then this handler immediately re-opened it.
- A guarded modal over the composer (settings, folder picker) was
dismissed together with the composer underneath it, popping the
save-draft prompt.
Fix is to bail when a modal layer already consumed the key:
if (e.defaultPrevented) return
if (isDialogGuardActive()) return
handleClose()
bits-ui's escape layer listens on `document` and calls preventDefault()
without stopping propagation, so the event still reaches this
window-level handler — but defaultPrevented persists across listeners
in the same dispatch. That covers every bits-ui layer (dialog,
alertdialog, dropdown, context menu) whether or not it registers the
dialog guard, including layers that deliberately ignore Escape: bits-ui
preventDefaults those too, and the composer shouldn't close under a
modal that is refusing to.
Note a DOM check for [role=dialog] does not work here, which is what I
tried first. A microtask checkpoint runs between listener callbacks, so
Svelte has already flushed the dialog out of the DOM by the time this
handler runs and the query finds nothing.
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
- Fixed Contacts pagination - Fixed M365 contacts - sync all folders - Fixed M365 calendar - kill the silent-zero paths
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.