feat(ui): floating glowing dictation overlay - #516
Open
jatinkrmalik wants to merge 8 commits into
Open
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #516 +/- ##
==========================================
+ Coverage 84.39% 84.82% +0.42%
==========================================
Files 32 33 +1
Lines 5672 5970 +298
Branches 915 950 +35
==========================================
+ Hits 4787 5064 +277
- Misses 687 705 +18
- Partials 198 201 +3
🚀 New features to boost your workflow:
|
Show a bottom-center non-focus overlay while recognition is LISTENING or PROCESSING so users get a clear visual cue beyond the tray icon. Optional GtkLayerShell on Wayland; plain always-on-top GTK fallback elsewhere. Configurable via ui.show_overlay (default on) and Settings.
Overlay unit tests no longer construct real GTK windows or import tray_indicator, which was loading gi.repository early and breaking later tests that mock GI (single-instance and suspend GLib checks).
Capture the floating glowing orb in listening (green) and processing (amber) states for the PR and README screenshots section.
Exercise GTK init, draw/animation, positioning, layer-shell fallbacks, tray overlay wiring, settings toggle, and config edge cases so patch coverage on the floating overlay clears the 80% Codecov target.
Avoid instance-level MagicMock shadowing of set_overlay_enabled under some import/mock orderings (seen on CI Python 3.10).
Assign a MagicMock config_manager on the instance so assertions do not depend on the constructor patch (which can leave a real ConfigManager under some Python versions / import orders).
Drop the hand-drawn mic glyph, simplify the Cairo clear/pulse path, reuse ConfigManager get_bool/set, tighten tray overlay helpers, and delete string-grep structural tests that proved nothing.
jatinkrmalik
force-pushed
the
feature/dictation-overlay
branch
from
July 15, 2026 07:28
a7d6a2c to
1f56b88
Compare
Use a full-width bottom strip (layer-shell left/right/bottom anchors, or resize+move fallback) so the orb is bottom-center on Wayland. Map the window once and toggle opacity instead of hide/show so compositors do not re-activate it and yank focus out of the editor (which broke IBus inject).
1 task
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.
Summary
Adds a SuperWhisper-style floating on-screen indicator so users can see that the mic is hot without staring at the tray icon.
GtkLayerShellon Wayland; plain always-on-top GTK window everywhere else (no new hard dependency)ui.show_overlay, default on)Wired through the same
RecognitionStatecallbacks as the tray icon (toggle and push-to-talk).How to try it locally
Test plan
pytest tests/test_dictation_overlay.py(state → show/hide, disabled config, non-focus flags, soft layer-shell)Screenshots (overlay)
Floating indicator while recognition is active: