Commit Graph
250 Commits
Author SHA1 Message Date
sankalp 30005b9f1f feat(notch): export NotchPill 2026-08-05 06:10:03 +05:45
sankalp e75023ef72 refactor(notch): inherit NotchPill, accept idle_widget 2026-08-05 06:10:03 +05:45
sankalp 9ce37b9837 feat(notch): add shared NotchPill container 2026-08-05 06:10:02 +05:45
sankalp cdc51ffdaf fix(desktop): stop calendar label churn at midnight
Update timer used fixed ms-until-midnight computed at import. Once
midnight passed, the fixed interval re-armed an elapsed timeout, busy
looping update_calendar and destroying/recreating every label until
GTK3 stopped rendering them. Timer now recomputes the interval each
day and the grid mutates pre-built labels in place via set_label /
set_name instead of rebuild.

Also added missing year check for today highlight.
2026-08-05 00:13:02 +05:45
sankalp 8f3d05f7d7 style(desktop): drop stale edit-mode comment 2026-08-03 07:40:13 +05:45
sankalp 73e050897b fix(desktop): repaint widgets during drag and drop
A Gtk.Fixed child resize only bubbles to the toplevel when the window
itself is queued, so move() kept the old allocation until a rebuild.
Queue the window after each reposition so the dragged widget follows
the cursor and lands at the drop position live.

Dropped remove()+put() which never repainted in the layer-shell window.
2026-08-03 07:39:33 +05:45
sankalp 515c04d33c refactor(spotlight): spawn caffeine detached 2026-08-02 13:37:10 +05:45
sankalp 4f2c3eb88c refactor(spotlight): use shared app cache 2026-08-02 13:37:10 +05:45
sankalp d1734fe040 refactor(recording): reuse mmss formatter 2026-08-02 13:37:10 +05:45
sankalp a8682700f4 perf(panel): defer heavy component imports to first use 2026-08-02 13:37:10 +05:45
sankalp 5b613d734f refactor(pomodoro): reuse mmss formatter 2026-08-02 13:37:10 +05:45
sankalp e95d3df14f perf(unified_cache): cache icon theme name with TTL 2026-08-02 13:37:10 +05:45
sankalp 849a8267e2 fix(notification_center): reconcile groups in place 2026-08-02 13:37:10 +05:45
sankalp 2f89203477 refactor(notification): share pixbuf resolution 2026-08-02 13:37:10 +05:45
sankalp 75d59aa06d refactor(globalmenu): reuse active-window service 2026-08-02 13:37:10 +05:45
sankalp 21179b049a refactor(globalmenu): compile shim via run_command 2026-08-02 13:37:10 +05:45
sankalp b8e1162743 refactor(dock): add cached icon surface fields 2026-08-02 13:37:10 +05:45
sankalp 86b8ad51ad perf(dock): cache icon surfaces, coalesce title fetches 2026-08-02 13:37:10 +05:45
sankalp f20d6fe9c5 perf(desktop): defer widget imports to first rebuild 2026-08-02 13:37:10 +05:45
sankalp 0821f0ed47 fix(controlcenter): connect signals once per lifetime 2026-08-02 13:37:10 +05:45
sankalp f6a37290f7 refactor(expanded_player): reuse mmss formatter 2026-08-02 13:37:10 +05:45
sankalp 972eb18088 refactor(controlcenter): drop dead device-remove fallback 2026-08-02 13:37:10 +05:45
sankalp 98c3181541 fix(date): update label in place to avoid GTK3 visibility glitch
Repeated set_label() on every tick destroys and recreates the button's
internal label; after enough redraws GTK3 drops its visibility. Capture
the label once and update via set_text() instead.
2026-08-02 12:10:11 +05:45
sankalp 09f792078f fix: dropdown callbacks, singleton about dialog, config-driven settings sidebar, switcher cache eviction 2026-08-01 20:03:46 +05:45
sankalp 456545e6a6 perf: break animator and popup ref cycles, suspend idle timers
Break self -> animator -> lambda cycles in smooth switch and flat scale
by stopping animators and disconnecting value handlers on destroy. Drop
mutual OSD window/osd refs and clear the applet active-popup class ref.

Suspend the dock animation loop when nothing animates, pause the desktop
system info poller while unmapped, replace the OSD watchdog polling with
a single shot at expiry, lower the notch visualizer tick rate, and
cancel outstanding dock occlusion/rebuild timers on teardown.
2026-08-01 19:53:15 +05:45
sankalp d8696b9198 fix: add destroy() and signal cleanup across widgets, fix settings window + menu regressions
P0 leak fixes: context/action menus destroyed on deactivate, config
callbacks unregistered in settings widgets, recorder and server signal
IDs stored and disconnected, bluetooth client closed and unsubscribed,
rfkill timer removed, seek timers cancelled, dropdown and options menus
freed, app name cache LRU-bounded.

Fix desktop 'Edit Widgets' and settings menu regressions by deferring
destroy out of Gtk signal handlers via GLib.idle_add.

Fix settings entry fields by connecting the activate signal explicitly
(Enter saves the value).
2026-08-01 19:44:39 +05:45
sankalp 55fc3fba21 fix: drop notification header icon, defer spotlight paste quit, use hyprctl send_shortcut 2026-08-01 19:23:56 +05:45
sankalp 4122b9a305 fix: launch desktop apps from home dir, not Modus cwd
GIO inherits the caller's working directory when a desktop file has no
Path= entry, so terminals and file managers opened in the Modus project
dir. chdir to the desktop file's Path= or $HOME before launching.
2026-07-31 20:37:03 +05:45
sankalp 3c93ac1c20 fix: disconnect signals and config callbacks on destroy
- dock/main.py: off_config_change in destroy()
- switcher/main.py: add destroy() for capture signals + config
- panel/main.py: disconnect fullscreen-changed signal
- notification_center.py: add destroy() for 4 notification signals
2026-07-31 01:37:16 +05:45
sankalp beab79a405 refactor: extract shared mixins, fix cpu waste, resolve browser icons
- Extract CloseButtonRevealerMixin, PullToRefreshMixin, BasePlayerBoxStack
- Replace mpris.py 2s+5s D-Bus polling with Seeked signal subscription
- Remove redundant desktop/main.py os.listdir() poll (FileMonitor covers)
- Remove switcher/main.py 200ms capture timer, chain from frame-ready
- Resolve browser MPRIS icons via desktop file lookup, fallback to app name
- Fix CodeQL py/clear-text-storage by rounding lat/lon and stripping from cache
2026-07-31 01:35:25 +05:45
sankalp 92c2b92333 refactor: remove redundant Box wrappers
- dock/main.py: canvas_box eliminated, Revealer wraps canvas directly
- desktop/system.py: two single-child Box wrappers removed
- controlcenter/player.py: redundant album_cover wrapper removed
- controlcenter/expanded_player.py: same pattern as player.py
2026-07-31 00:39:53 +05:45
sankalp 5c936a68da refactor: replace hasattr(self, ...) with direct None-safe access 2026-07-31 00:24:23 +05:45
sankalp 3bc086596a feat(settings): add hover_scale entry, fix SettingsEntry float handling 2026-07-30 22:59:11 +05:45
sankalp 1d7a94f154 chore(clipboard): remove noisy INFO logs from _load_history 2026-07-30 22:52:02 +05:45
sankalp f93f5f8942 feat(dock): add hover_scale config change handler 2026-07-30 22:52:00 +05:45
sankalp 3ad4221a9a feat(dock): use max_scale() for icon cache size and drop custom cairo filter 2026-07-30 22:52:00 +05:45
sankalp c94dbff55e feat(dock): call max_scale() instead of MAX_SCALE constant in layout 2026-07-30 22:51:59 +05:45
sankalp 1f24c5c3e8 feat(dock): replace MAX_SCALE constant with config-backed max_scale() function 2026-07-30 22:51:54 +05:45
sankalp 0195971eba fix(globalmenu): fetch Firefox/Zen bookmarks from SQLite when DBus empty
Zen Browser doesn't expose bookmark submenu children through DBusMenu.
Fall back to reading places.sqlite for Bookmarks Toolbar and
Other Bookmarks folders. Truncate to 25 items to avoid menu overflow.
2026-07-29 10:08:20 +05:45
sankalp 8980e90e39 feat: globalmenu updates 2026-07-29 09:31:05 +05:45
sankalp 056a8ace89 refactor(spotlight): replace custom SVGs with themed symbolic icons
Remove _ICON_SVG_MAP and _icon_to_svg. Use Gtk themed icons directly
via fabric Image widget with set_from_icon_name instead of loading
custom SVG files. Fixes crash when plugin icon SVG is missing.
2026-07-28 21:14:13 +05:45
sankalp f3bfb4ec12 chore(spotlight): add debug logging to clipboard plugin
Log query, history state, cliphist output stats, and filter results
to aid debugging prefix search issues.
2026-07-28 21:14:04 +05:45
sankalp 36158ffbbb fix(spotlight): return empty for unrelated caffeine queries
Add had_prefix flag so caffeine.search() returns [] for queries
without 'caffeine' or 'caff' prefix instead of always showing help.
Add debug logging.
2026-07-28 21:13:54 +05:45
sankalp f4689b8076 refactor(config): reorganize config.toml into sections
- Move all settings into [general], [dock], [panel], [switcher], [notification]
- Remove [desktop_widgets] section, move items to panel/general
- Add dot notation support to config service for nested keys
- Update all config references across codebase
2026-07-28 13:34:23 +05:45
sankalp 1d66b57ad7 feat(wifi): add DNS switcher to WiFi control center panel 2026-07-28 13:03:04 +05:45
sankalp 0a7cd2cf6d refactor(desktop): improve registry API and deduplicate fade animators
- Replace three synced dicts with single WidgetInfo dataclass
- Add type hints, unregister(), is_registered(), keys(), widgets()
- Add DEFAULT_SIZE constant, duplicate-registration warning
- Extract _make_fade_animator() to remove duplicated animator setup
- Use public registry API in main.py instead of accessing _widgets
2026-07-28 10:38:26 +05:45
sankalp 347e15af35 feat: update desktop widgets position 2026-07-28 10:25:35 +05:45
sankalp 34f9f71d62 feat: update date widget 2026-07-28 10:23:04 +05:45
sankalp 98640d82c2 feat: update position of desktop widgets 2026-07-28 10:08:02 +05:45
sankalp 1b4c319fdb style: format app-capture README code examples
Add blank lines between function definitions per PEP 8.
2026-07-28 10:01:18 +05:45