Commit Graph
554 Commits
Author SHA1 Message Date
sankalp fcd3258a2c refactor(utils): simplify unknown handling in format_window
- 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
2026-04-10 01:18:20 +05:45
sankalp 74f16f4d15 refactor(scratch): drop unused MPRIS test- No new features
- No enhancements- No bug fixes
2026-04-10 01:13:35 +05:45
sankalp ad6d35fe46 feat(modules/panel/components): adjust dropdown capture layer and pointer widget assignments
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.
2026-04-10 01:13:29 +05:45
sankalp 38de0c66ed feat(widgets): enhance mouse capture handling and dropdown escape keybinding
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.
2026-04-10 01:13:23 +05:45
sankalp cb2e6053f2 feat(styles): add active pseudo‑class styles for panel and related buttons
Enhancements
- Added `:active` variants for panel-button, battery-button, network-button, bt-button, tray-button, and global-menu, mirroring existing hover styling.
- Ensures consistent visual feedback when these components are active.
2026-04-10 01:13:07 +05:45
sankalp 150ec6662c bugfix(modules/panel): ensure pointing widget assignment for interactive elements 2026-04-10 01:12:58 +05:45
sankalp 8337971e1e feat(widgets): replace custom animationmanager with new Animator-based implementation
Replace legacy animation manager with a unified Animator utility, improving performance and simplifying animation control.

- New Features  - Integrated Animator with custom easing functions (ease_out_quint, ease_in_cubic) for consistent 120 FPS animations.
  - SlideRevealer now uses Animator.play/stop API, exposing simplified control.
- Enhancements
  - Simplified animation lifecycle: start/stop handled via Animator instead of manual timer.
  - Pixel‑accurate positioning using int(round(...)) for smoother motion.
  - Reduced memory usage by removing unused timer and container tracking.
- Bug Fixes  - Fixed stale timer references and redraw queue clearing race conditions.
  - Corrected handling of zero‑size dimensions to properly finalize animations.
  - Removed redundant AnimationManager import and idle_add boilerplate.
2026-04-10 00:14:21 +05:45
sankalp 27c5ee2e36 refactor(modules/notification): consolidate Gtk importMove the Gtk import from gi.repository into the top‑level imports to simplify code and avoid duplicated imports.
Details
- New Features: - Enhancements:
- Bug Fixes:
2026-04-10 00:10:50 +05:45
sankalp adb87456c7 refactor(modules): Clean up imports and centralize utilities- Enhancements:
- Remove redundant gi.repository imports
  - Move common utilities (GLib, GObject, logger, os) into fabric.utils
  - Centralize GLib usage and reduce namespace pollution
2026-04-10 00:10:40 +05:45
sankalp 9847bdf884 refactor(utils): consolidate imports to fabric.utils
Removes unused `json` import and refactors imports to pull `GLib`, `Gtk`, `logger`, and `os` from `fabric.utils`, reducing module proliferation.

Details:
- Enhancements: Simplified import structure, removing redundant dependencies.
- Bug Fixes: None.
2026-04-10 00:10:33 +05:45
sankalp 76c409fce1 fix(services): clean up importsand simplify Seeked handling
- New Features:
- Enhancements: Added module‑level logger import.
- Bug Fixes: Simplified Seeked handling and corrected metadata type annotation.
2026-04-10 00:10:24 +05:45
sankalp eb12354d00 refactor(widgets): migrateGTK imports to fabric.utils
Migrate GTK-related imports from gi.repository to fabric.utils and remove outdated require_version calls.

- Remove redundant gi.require_version declarations
- Replace gi.repository imports with fabric.utils equivalents
- Align import ordering for consistency
2026-04-10 00:10:02 +05:45
sankalp e7a7d2c47e fix(services): Properly define and emit Seeked signal with correct GObject typing
- 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
2026-04-09 23:30:43 +05:45
sankalp cdc82c4c7f feat(modules): improve application searchmatching logic
- 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
2026-04-09 23:30:39 +05:45
sankalp 4346c54fa0 feat(utils): enhanceicon resolution with robust desktop entry parsing and error handlingNew Features
- 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.
2026-04-09 23:30:34 +05:45
sankalp af5e7b2d79 feat(scratch): Add test for MPRIS signal emission handling
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
2026-04-09 23:30:25 +05:45
sankalp b6ecc72af8 feat(modules): improve dock auto-hide logic and refactor pinned app handling
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.
2026-04-09 22:41:12 +05:45
sankalp 70a0c2c9e0 fix(root):remove glace-git from install script 2026-04-09 21:38:06 +05:45
sankalp 6b56db0882 feat(styles): add dock CSS with interactive states and transitions
- 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
2026-04-09 19:33:02 +05:45
sankalp 5e005b1a4e feat(root): AddDock module integration
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.
2026-04-09 19:32:56 +05:45
sankalp 345ef643e1 refactor(utils): replace requests with urllib and improve error handling
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
2026-04-09 19:20:55 +05:45
sankalp 40ddabe7fc refactor(modules/desktop): simplify Deskwidgets to manage windows instead of being a window
- 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.
2026-04-09 19:20:49 +05:45
sankalp 5b2afe7c9a feat(root): add deskwidget layout options and clean up dependencies
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.
2026-04-09 19:20:41 +05:45
sankalp e1ebc0acce style(styles): refineswitcher button and workspace selection styling
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
2026-04-09 18:54:38 +05:45
sankalp e7af41805f refactor(modules):simplify UI and drop Glance integration 2026-04-09 18:54:29 +05:45
sankalp c214d2fade style(styles): modernize weather widget CSS and add condition gradient themes
- 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
2026-04-09 18:47:32 +05:45
sankalp f3386ab7a0 feat(modules/desktop): Refactor weather widget layout with header/footer and dynamic gradient styling
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
2026-04-09 18:47:17 +05:45
sankalp a3edf9c323 fix(utils):ensure current_active_wm_class is set when updating active app 2026-04-09 18:34:05 +05:45
sankalp 92c4f20d79 feat(modules/panel/components): add wmclass parameter to AboutApp creation
- 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.
2026-04-09 18:34:00 +05:45
sankalp 0c4a375ff6 feat(widgets): enhance desktopfile discovery and icon loading
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
2026-04-09 18:33:50 +05:45
sankalp 8f6042634f feat(services): add current_active_wm_class tracking and signal, fix default active app name
- 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".
2026-04-09 18:33:40 +05:45
sankalp d47537e627 feat(modules/panel/components): addhot-reload support and config‑based visibility filtering to system tray
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
2026-04-09 18:29:01 +05:45
sankalp dc7d45d86a feat(root): add systray_ignore and improve notification configuration formatting
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.
2026-04-09 18:28:53 +05:45
sankalp 63862a08da feat(modules/panel): hide tray items when empty and sync visibility on config changes
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.
2026-04-09 18:28:43 +05:45
sankalp 70ba69b116 enhancements(modules/controlcenter): Safely access device.connection and device.paired attributes using getattr with default False 2026-04-09 18:28:35 +05:45
sankalp a85513d6a6 revert: use previous icon for now 2026-04-09 18:17:09 +05:45
sankalp 56ad44842e feat(root): migrate to uv‑managed environment
- 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
2026-04-02 23:25:42 +05:45
sankalp 7f588bbf47 feat(assets): streamline battery andvolume icons
- 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
2026-04-02 23:13:47 +05:45
sankalp 118387aa69 feat(config):Update power mode icons and adjust startup commands 2026-04-02 23:13:47 +05:45
sankalp c22ea5dfda refactor(modules): simplify SVG asset handling across modules
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.
2026-04-02 23:13:47 +05:45
sankalp 017c127a44 chore(root): migrate touv and simplify dependencies
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.
2026-04-02 23:13:47 +05:45
sankalp f123de9a52 refactor(utils):simplify Wi‑Fi icon path resolution 2026-04-02 23:13:47 +05:45
sankalp f7355765f7 Merge branch 'macos' into dev 2026-04-02 21:10:14 +05:45
sankalp 5fe0d5264a Merge pull request #31 from S4NKALP/dependabot/pip/requests-2.33.0 2026-04-02 14:54:00 +05:45
dependabot[bot] 28ea3305f3 chore(deps): bump requests from 2.32.4 to 2.33.0
Bumps [requests](https://github.com/psf/requests) from 2.32.4 to 2.33.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.4...v2.33.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.33.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 09:06:26 +00:00
sankalp 5656609348 feat(modules/desktop): addweather SVG icon mapping and improve condition label handling
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.
2026-03-23 23:40:31 +05:45
sankalp c35550d209 feat(assets/icons/weather): add clear, clear-night, and windy weather icons
New Features
- Added `weather-clear.svg`
- Added `weather-clear-night.svg`
- Added `weather-windy.svg`
2026-03-23 23:40:23 +05:45
sankalp 7a21d34680 feat(assets): add caps-lock and keyboard layout icons
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.
2026-03-23 23:34:15 +05:45
sankalp 88e53ac9b7 refactor(config): Defer import ofstart_config_service to reduce startup overhead
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
2026-03-23 23:34:11 +05:45
sankalp 231645d8f9 refactor(styles): rename selectors and add min-width to container
- 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
2026-03-23 23:34:07 +05:45