The refactor introduces persistent indicator widgets and updates how visibility and layout are managed based on configuration changes.
New Features
- Added BatteryIndicator, NetworkIndicator and BluetoothIndicator as persistent panel children.
- Implemented visibility toggling for each indicator according to configuration and battery presence.
- Added debug prints when an indicator’s visibility changes or a battery is not detected.
Enhancements
- Updated dropdown actions to use `get_about_window()` and `get_settings_window()` for About and System Settings entries.
- Switched layout rebuilding to use `get_config_all()` and now only rebuilds when specific keys actually change.
- Removed manual recreation of indicators; visibility is controlled via `show()`/`set_visible()`.
- Consolidated changed‑key detection and added logging of rebuild reasons.
- Streamlined config key checks to use `config_data.get(..., True)`.
Bug Fixes
- Fixed BatteryIndicator to hide and log when no battery is detected.
- Corrected use of `config_data.get()` with appropriate fallback values.
- Updated layout updates to use `show()` and trigger a resize queue instead of `show_all()`.
- New Settings window implementation with styling and layout
- Updated visibility configuration to use direct configuration keys
- Simplified layer‑shell positioning logic and improved reliability
Enhancements- Refactored MouseCapture geometry calculations for cleaner code
- Integrated size‑allocate handler to maintain input region sync
- Added global About window singleton and improved toggle behavior
Bug Fixes
- Fixed potential index errors in MouseCapture coordinate calculations- Resolved missing imports and path issues for icon assets
Remove several default configuration entries that are no longer required, cleaning up dead code and reducing configuration surface.
- Cleanup: drop unused constants
- Maintenance: simplify DEFAULT dict
Add ability to persist current configuration to disk and trigger reloads, expose set() and save() methods, monitor the config directory for changes, and adjust notification history based on config modifications.
- New Features
- Implement `save()` method to write config to file and trigger reload
- Add `set()` method for in‑memory config updates
- Extend file monitoring to include parent directory
- Rename `get_all_config` to `get_config_all`
- Enhancements
- Refine reload logic to correctly capture previous state via `_last_notified_config`
- Trigger reloads on additional file‑monitor events (CREATED, DELETED)
- Prune cached notifications according to config changes (`notification_ignored_apps`, `notification_limited_apps_history`)
- Bug Fixes
- Resolve race condition where reload‑pending flag could be left set
- Ensure callbacks are notified on every reload request
- Fix stale comparison of config values in `has_changed`
Removed pyotp, pyzbar, and thefuzz from pyproject.toml and requirements.txt to simplify dependencies.
- Enhancements
- Cleaned up redundant dependencies.
- Bug Fixes
- None.
Why: Modernize HTTP client usage and expose currency symbols for conversion.
New Features
- Added `CURRENCY_SYMBOLS` mapping from symbols to currency codes.
- Switched all external requests to `httpx` with custom headers and redirects.
Enhancements
- Increased timeout to 10 seconds and enabled `follow_redirects=True`.
- Centralized error handling with explicit status‑code checks.
Bug Fixes
- Added proper exception handling for JSON parsing to avoid silent failures.
- Improved error messages for non‑200 responses.
- New Feature: Replace urllib.request with httpx for fetching artwork URLs, providing timeout and redirect support.
- Enhancement: Added proper HTTP status code handling and early exit on download cancellation.
- Bug Fix: Gracefully handle non‑200 responses and prevent resource leaks during network operations.
Add httpx>=0.28.1 as a new HTTP client dependency.
New Features- Added httpx>=0.28.1 to pyproject.toml and requirements.txt.
Enhancements
- Updated uv.lock to include httpx package metadata.
Bug Fixes
- None.
The updated regex now matches non‑numeric unit prefixes, and units are normalized before conversion, improving accuracy and preventing mismatches.
- Bug Fixes: Fixed incorrect unit detection that caused failed conversions.
- Enhancements: Added unit cleaning (`converter.clean_type`) to standardize input.
- New Features: None.
- New Features
- Incremented project version to 0.2.0
- Enhancements
- Fixed image reference to use src/assets/modus.png
- Pinned pywayland to exact version 0.4.18
- Added explicit version constraints for new dependencies
- Bug Fixes
- None
- New Features: Added tracking of config/ files and removed stale asset ignores.
- Enhancements: Regenerated uv.lock with updated dependency versions, including cffi and click.
- Bug Fixes: Eliminated ignore rules that could unintentionally exclude new project files.
Introduce helper functions to invoke the primary application and lock entry points, enhancing modularity and testability.
New Features
- run_app(): launches the main application.
- run_lock(): launches the lock module.
Enhancements
- Refactor start.py to isolate command execution logic.
This change adds a mechanism to refresh the todo list dynamically when the underlying service updates, improving UI responsiveness and user experience. It also updates documentation and removes deprecated files.
- New Features:
- Added `_refresh_todos` method to rebuild the todo list when `get_todo_service().todos` changes.
- Introduced `TodoListCapture` class for mouse capture handling of the todo list window.
- Enhancements:
- Updated README with corrected image paths, installation tips, and manual installation commands.
- Introduced `start.py` to launch the application or lock mode.
- Removed deprecated `config.json` and `debug_memory.py`.
- Bug Fixes:
- Fixed lock screen screenshot path in README.
- delete gamemode.sh, hyprpicker.sh, and screen-capture.sh as they are no longer used
- cleanup of dead code simplifies project structure and reduces maintenance overhead
Replace transparent background with theme variable and tidy up CSS.
- New Features
- Enhancements
- Use `@bg` instead of `alpha(#fff, 0.07)`
- Remove unused comment blocks
- Bug Fixes
- Clean up duplicated CSS comments and whitespace
- Removed redundant checks for "unknown" in title and wmclass
- Streamlined cleanup to treat "unknown" as empty strings
- Always call format_app_name with update=True to sync service state
- Improves readability and reduces edge‑case bugs
Changed the default layer used by `create_dropdown_with_capture` from `"bottom"` to `"top"` and updated the call site accordingly. Added safety checks to set `_pointing_widget` on indicator windows when they exist, preventing potential errors when the windows are not created.
- Enhancements:
- Updated default `layer` parameter in `create_dropdown_with_capture` to `"top"`.
- Bug Fixes:
- Ensured `BluetoothIndicator`, `NetworkIndicator`, and `BatteryIndicator` properly assign `_pointing_widget` to their respective buttons when the associated windows are present.
Why: Refactor mouse capture logic to use robust input‑region handling, add support for multi‑click events, and align layer usage with the passed layer parameter; update dropdown to use an Escape keybinding instead of a button‑press hide.
New Features:
- Support button‑press, double‑click, and triple‑click events.
- Introduce `_get_child_window_bounds` helper and window‑local coordinate detection for accurate click placement.
- Add cursor‑feedback styling updates on the trigger widget.
Enhancements:
- Make overlay layer configurable via the passed `layer` argument.
- Replace direct `button-press-event` connection with an Escape keybinding in the dropdown.
- Update imports to use `Gdk` and new utilities (`HyprlandWithMonitors`, `modus_service`).
Bug Fixes:
- Resolve race condition that could hide child windows on external clicks.
- Ensure immediate hide when clicking outside the child window to avoid timing issues.
- Correct click‑inside detection logic and properly consume events.
- Removed outdated TODO comment and placeholder signal definition that caused type conversion errors
- Added Signal with explicit GObject.TYPE_INT64 argument type and correct parameter extraction using .get_int64()
- Ensured reliable emission of seeked signal to upstream DBus handler
- New Features
- Expand search terms to handle reverse DNS and decorated names, increasing match coverage
- Introduce priority‑based matching (exact window_class, name, executable) before falling back to fuzzier containment
- Early exit when no search terms are available
- Enhancements
- Refactor search term collection and normalization for better readability and performance
- Add handling for common wrapper executables to prevent false positives
- Implement fuzzy containment matching for partial name matches
- Bug Fixes
- Fix return logic when search terms are empty to avoid unintended None returns
- Correct order of priority checks to prioritize exact matches over fuzzy matches
- Refactor `_get_icon_from_desktop_file` to ignore file errors and fallback to the default icon.
- Replace regex‑based lookup in `_get_desktop_file` with normalized search IDs and explicit filename matching.
- Add support for matching `StartupWMClass`/`Name` fields within desktop files.
Enhancements
- Improve icon theme lookup in `_compositor_find_icon` with suffix handling and direct matches.
- Add defensive checks for empty `app_id` and exception handling throughout.
Bug Fixes
- Handle exceptions when reading desktop files and log errors gracefully.