Commit Graph
587 Commits
Author SHA1 Message Date
sankalp be308191c5 feat(src/window/panel): add persistent battery, network and bluetooth indicators with visibility handling and improve dropdown and config-driven layout logic
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()`.
2026-05-03 22:06:42 +05:45
sankalp 704c8b229c feat(src/shared): introduce settings window and refine visibility configurationAdd a dedicated settings window with full CSS styling and improve UI consistency
- 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
2026-05-03 22:06:35 +05:45
sankalp ebd50e585c refactor(src/utils): remove unused default settings
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
2026-05-03 22:06:28 +05:45
sankalp 244a913d96 feat(src/services): add config persistence, reload handling and notification pruning on config change
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`
2026-05-03 22:06:23 +05:45
sankalp 791400f437 chore(src/services): remove auth service module- Removed legacy authentication service code.
- Cleaned up unused imports and configuration.
2026-05-03 20:20:05 +05:45
sankalp 27c8bb5151 chore(root): remove unused dependencies
Removed pyotp, pyzbar, and thefuzz from pyproject.toml and requirements.txt to simplify dependencies.

- Enhancements
  - Cleaned up redundant dependencies.
- Bug Fixes
  - None.
2026-05-03 20:20:01 +05:45
sankalp 2c6a75970a refactor(src/utils): replace urllib with httpx and add currency symbol mapping
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.
2026-05-03 20:16:58 +05:45
sankalp 730b7b1446 feat(src/window/controlcenter): migrate artwork caching to use httpx
- 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.
2026-05-03 20:16:52 +05:45
sankalp 746acee1d2 feat(root): add httpx dependency
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.
2026-05-03 20:16:49 +05:45
sankalp ca45348827 refactor(src/window/desktop): replace urllib with httpx in http_get_json
- Replace urllib.request with httpx.get to simplify HTTP handling and improve error resilience
- Update docstring to reflect httpx usage- Remove unused json and urllib.request imports
- Streamline header and timeout configuration
2026-05-03 20:16:44 +05:45
sankalp 3e5552b7f3 fix(src/window/launcher/plugins): refine calculator unit conversion parsing
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.
2026-05-03 20:16:38 +05:45
sankalp d51f30f058 feat(src/window/launcher): trigger search on new text instead of clearing results
- Show applications when query is empty
- Schedule search via GLib timeout
- Improves UI responsiveness and correctness
2026-04-25 08:48:01 +05:45
sankalp f92c42d224 remove bloatware plugins 2026-04-25 08:30:03 +05:45
sankalp 6577c19dcb related to memory leak 2026-04-23 16:09:52 +05:45
sankalp 7eb21daf2f hope it fix memory leak 2026-04-22 21:18:39 +05:45
sankalp 19575b5138 memory fixed :( 2026-04-22 21:17:26 +05:45
sankalp a656eda0ec memory fixed :( 2026-04-22 21:17:09 +05:45
sankalp 30a8ab5510 refactor(src/shared/styles): drop unused color definitionsRemoved the colors.css file that defined unused theme variables, reducing bundle size and eliminating stale style references.
- New Features: —
- Enhancements: removed unused color definitions
- Bug Fixes: —
2026-04-10 18:41:57 +05:45
sankalp 202cc9c6af feat(src):generate colors.css automatically and monitor style changes 2026-04-10 18:40:26 +05:45
sankalp 6449da8c27 feat(root): bump version to 0.2.0 and update dependencies
- 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
2026-04-10 18:40:22 +05:45
sankalp ffb9bc081d fix(root): Remove.py extension from lock command in README
- Corrected lock command reference from `uv run lock.py` to `uv run lock` to match the intended executable, fixing documentation error.
2026-04-10 17:17:03 +05:45
sankalp 89524a9787 chore(root): update .gitignore and regenerate uv.lockUpdated .gitignore to reflect new config locations and removed outdated ignore patterns.
- 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.
2026-04-10 17:14:07 +05:45
sankalp af216b5367 chore(config): Remove legacy configuration files
- New Features: None
- Enhancements: None
- Bug Fixes: None
2026-04-10 17:13:55 +05:45
sankalp dadf548bdb feat(root): add run_app and run_lock helper functions
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.
2026-04-10 17:11:32 +05:45
sankalp 4f4636d469 chore(modules): remove controlcenter battery module 2026-04-10 17:11:32 +05:45
sankalp 77d042f542 feat(config):reorganize config files and enhance launcher 2026-04-10 17:11:32 +05:45
sankalp 9f8decba3f chore(assets): remove deprecated icon assets
Enhancements
- Deleted legacy Bluetooth icons (bluetooth-clear.svg, bluetooth-off.svg, bluetooth-off-clear.svg)
- Removed Wi‑Fi connecting icon (wifi-connecting.svg)
- Deleted default.png and modus.png placeholders
- Cleaned up unused screenshots and wallpaper images

New Features
- None

Bug Fixes
- None
2026-04-10 17:11:32 +05:45
sankalp e4813f35a0 feat(root): implement dynamic todo list refresh and UI enhancements
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.
2026-04-10 17:11:32 +05:45
sankalp 235f53b6a2 chore(scripts): remove deprecated helperscripts
- 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
2026-04-10 17:11:32 +05:45
sankalp cd869c2ff1 chore(styles): use bg for dock background 2026-04-10 17:11:32 +05:45
sankalp 5fa0016ad1 Revert "chore(styles): adopt bg color for dock background"
This reverts commit de3d5728a62f02c4fe1fbb5c759a28cb7a156003.
2026-04-10 17:11:32 +05:45
sankalp 770cea69a9 chore(styles): adopt bg color for dock background
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
2026-04-10 17:11:31 +05:45
sankalp f86476d550 refactor(modules): reorganize importsand add WaylandWindow alias
Enhancements- Reorder imports for readability
- Expose WaylandWindow alias via explicit import
- Remove unused imports and consolidate utilities
2026-04-10 01:18:31 +05:45
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