- 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.
This test validates that MprisPlayer correctly emits the `seeked` signal with both small and large value ranges, using a mocked DBus helper to avoid runtime DBus dependencies.
- New Features:
- Add `scratch/test_mpris_fix.py` to test signal emission edge cases.
- Enhancements:
- None
- Bug Fixes:
- None
New Features
- Introduce a random ticket mechanism to prevent rapid hide/show cycles.
- Add `_get_dock_config` helper to centralize position‑specific configuration.
- Refactor `_create_pinned_button` and `_populate_pinned_apps` for clarity and reuse.
Enhancements- Replace manual child removal with `clear_children` utility.
- Extract `_get_app_icon` to simplify icon resolution.
- Streamline imports and use explicit imports.
Bug Fixes
- Resolve hover race condition using ticket comparison.
- Ensure occlusion checks respect `DOCK_ALWAYS_OCCLUDED` correctly.
- New Feature: Introduce dock styling with background, padding, and rounded corners- Enhancement: Add smooth transition animations for show/hide states
- Enhancement: Implement interactive hover and activate effects on dock items
This change introduces the Dock component to the application, enhancing UI consistency and providing system‑level dock management capabilities.
- **New Features**: Instantiated `Dock` and integrated it into the launcher widget list.
- **Enhancements**: Early initialization of Dock for smoother startup and better configuration flow.
- **Bug Fixes**: None.
Replace external `requests` calls with `urllib` to eliminate third‑party dependency, add robust timeout handling, and improve error reporting. This also standardises URL fetching across the module and updates the process name configuration.
Enhancements:
- Added default request timeout fallback and ensured proper cleanup of response objects
- Enriched exception messages for better debugging
Bug Fixes:
- Fixed potential timeout‑related crashes in `CurrencyCache` and `Conversion`
- Corrected process name setting via `set_process_name` in the entry point
- Refactored Deskwidgets to no longer inherit from Window, now managing windows via attributes.
- Removed unnecessary initialization parameters and size settings.
- Updated class comment to reflect the new responsibilities.
Add UI positioning windows and streamline dependency list to improve maintainability.
- New Features:
- Added deskwidget.top_left and deskwidget.bottom_left to main.py.
- Enhancements:
- Updated pyproject.toml and requirements.txt: removed unused packages and pinned pywayland==0.4.18.
- refreshed uv.lock metadata.
The updates improve visual consistency by increasing padding, adjusting border radii, adding transition effects, and introducing new selection and workspace label styling for clearer UI feedback.
New Features- Added .switcher-selection-label and .switcher-workspace-label selectors with appropriate styling- Introduced .switcher-icon-box with border radius and padding
Enhancements
- Increased #switcher-button padding and border radius
- Adjusted #window-button active background and radius- Added transition effect to #switcher-buttonBug Fixes
- None
- New Features
- Added gradient background classes for various weather conditions
- Enhancements
- Updated transition timing and border radius for smoother animations
- Improved typography spacing and color contrast
- Bug Fixes
- Fixed missing newline at end of file
- Corrected background rendering for gradient classes
The update reorganizes the weather widget UI, adds a header for city and icon, a body for values, adjusts alignment and sizing, and applies a gradient class to the parent container.
- New Features: Structured header/footer layout for weather information
- Enhancements: Realigned text order, increased max_chars_width, resized icon, improved spacing- Bug Fixes: None
- New Feature: Added support for passing `wmclass` to `AboutApp`.
- Enhancements: Safely fetch `current_active_wm_class` using `getattr` with a default empty string.
- Bug Fixes: Prevent potential error when `current_active_wm_class` attribute is absent.
New Features
- Introduced StartupWMClass matching and content‑based fallback for .desktop files
- Added ordered search terms with exact, prefix, and contains strategies- Implemented multi‑step icon retrieval: resolver, direct path, emoji fallback
Enhancements
- Replaced list‑based match attempts with priority‑ordered search flow
- Streamlined parsing of desktop entries by section and key handling- Improved error resilience by using continue on exceptionsBug Fixes
- Fixed potential missing icon assignment when pixbuf lookup fails
- Corrected comment fallback logic to use GenericName when Comment is empty
- New Features
- Added `current_active_wm_class_changed` signal and `current_active_wm_class` read‑write property.
- Implemented setter that emits the signal when the value changes.
- Initialized `_current_active_wm_class` and integrated it into active window updates.
- Enhancements
- Extended active window handling to include window class information.
- Bug Fixes
- Corrected default active application name from "Hyprland" to "Finder".
New Features
- Enable dynamic hiding of tray items using the `systray_ignore` configuration.
Enhancements
- Track tray item instances for hot‑reload and refresh visibility on config changes.
- Improve logging, tooltip handling, and icon lookup for better debugging.
Bug Fixes
- None
New Features
- Add structured `notification_limited_apps_history` entries.
- Introduce `systray_ignore` to filter background applications.
Enhancements
- Refactor `notification_ignored_apps` array layout for clearer presentation.
- Adjust comma and field ordering in the configuration file.
Bug Fixes- None.
This update ensures the panel's tray is hidden when there are no visible items and updatesits visibility automatically when the configuration changes or when notifications are added
or removed.
New Features:
- Add `_update_tray_visibility` method that hides the tray when empty and updates UI
accordingly.
- Connect `tray` "add" and "remove" signals to trigger visibility updates.
- Adjust chevron button visibility, icon, and left margin based on tray state.
Enhancements:
- Invoke visibility update on panel initialization, DND changes, and configuration changes.
- Reset visual elements (chevron icon, margin) when the tray becomes hidden.
- Preserve layout spacing improvements when tray is hidden.
Bug Fixes:
- Prevent stale tray visibility state after configuration updates.
- Updated README to use `uv run lock.py` for lock‑screen binding
- Replaced pip install with `uv sync` and migrated to an uv‑managed Python virtual environment- Marked Installation Script and migration as completed in the TODO checklist
- Enhancements: Use viewBox, drop inline CSS, and simplify path data
- Enhancements: Ensure consistent white fill and improve scaling behavior
- Bug Fixes: Remove theme‑specific color class references that could cause rendering issues
Enhancements:
- Add optimized night‑variant detection for weather icons using a predefined list
- Replace `Svg` usage with direct `svg_file` calls throughout the todo widget, removing redundant relative‑path logic
- Update dock and battery modules to load assets via direct paths, eliminating unnecessary `get_relative_path` calls- Introduce `WEATHER_CACHE_TIMEOUT` constant and tidy up unused imports (`WEATHER_EMOJI_MAP` removed)
- Minor formatting and structural clean‑ups that improve code readability
Bug Fixes:
- Remove dead import of `WEATHER_EMOJI_MAP` and unused constant `WEATHER_EMOJI_MAP`
- Correct syntax of `condition_em` initialization to avoid potential rendering issues
New Features:
- None.
New Features
- Added uv as the primary package manager and introduced new system packages awww, apple-fonts, swappy, and wl-clipboard.
- Removed many redundant Python packages from the install script.
Enhancements
- Replaced Pillow-based QR code detection with GdkPixbuf, eliminating the python-pillow dependency.
- Fixed a typo in the import (`ConfigServic` → `ConfigService`) and corrected service imports.
- Updated the application launch to use `uwsm app -- uv run main.py` for uv-managed execution.
Bug Fixes
- Resolved import typo that prevented proper ConfigService initialization.
- Adjusted QR-code decoding logic to correctly handle image pixel channels, improving robustness.
Why: replaced emoji-based weather icons with a dynamic SVG mapping, introduced WEATHER_ICON_MAP, updated format_weather_data and Weather class to use icon names and svg_file, removed unused constants and clarified day/night variant handling.
- New Features
- Added WEATHER_ICON_MAP linking weather codes to SVG identifiers and supporting night variants.
- Updated format_weather_data to return icon_name and use svg_file for dynamic icon resolution.
- Modified Weather widget to set condition label via dynamic SVG files instead of emoji.
- Enhancements
- Implemented day/night icon variant logic using optimistic naming based on known variants.
- Removed unused constant imports and simplified label update logic.
- Improved error handling with explicit fallbacks for missing weather fields.
- Bug Fixes
- Fixed potential missing icon fallback by using .get with default values.
- Corrected label assignment order to match new data structure.
Add missing icons for caps lock and keyboard layout to enhance settings UI.
New Features
- Add caps-lock-off.svg, caps-lock.svg, and keyboard-layout.svg.
The import is now performed lazily within load_config to avoid early import errors and unnecessary loading during module initialization.
- Enhancement: Lazy loading of configuration service
- Bug Fix: Prevent ImportError when services.config is unavailable during startup
- rename `#osd` selectors to `#osd-container` for better encapsulation
- add `min-width: 180px` to the container definition
- update muted styling rules to use `#osd-container.muted` instead of element‑specific classes
- replace deprecated `#brighntess-icons.muted` with `#osd-image.muted`
- clean up stray braces and whitespace in the stylesheet
Enhancements
- Replace bare `except:` with `except Exception:` in multiple modules- Cast step calculation to `int` for consistent type
- Simplify `get_battery_icon_file` to return a string directly
- Use `get_todo_service()` instead of module-level `todo_service` throughout todo widget
- Remove unused `"zen": "zen-browser"` mapping entry
Bug Fixes
- Prevent bare exception swallowing by catching `Exception` explicitly
- Ensure proper cleanup of timer IDs and other resources
- Delete unused modules/osdd components
New Features
- None
Introduce a new OSDWindow implementation, expose keyboard layout configuration, and modernize dependency handling and helper utilities.
- **New Features**
- Added `keyboard_layouts` list (`us`, `np`) to `config.json`
- Created `OSDWindow` class and updated `main.py` to use it
- Introduced new service modules (`battery`, `brightness`, `capslock`, `network`, `mpris`, `todo`, `modus`) and expanded `services/__init__.py`
- Added `CommandResult` and `run_command` helper in `utils/functions.py`
- **Enhancements**
- Upgraded numerous dependencies to newer versions and switched `fabric` to a git source
- Replaced bare `except:` with `except Exception:` in `WiFiPasswordDialog`
- Improved type hints (`NamedTuple`, `TypeVar`) and refactored JSON file helpers
- Added property notifications for battery percentage, state, and presence
- **Bug Fixes**
- Fixed incorrect return type annotation in `read_json_file`
- Corrected tick‑handler logic to avoid double registration
- Properly notify listeners on battery property changes
- Ensured proper exception handling and cleanup in utility functions