- volume_scale/brightness_scale disconnect_by_func may fail if signals
were never connected (e.g. on first hide before resources init)
- Downgrade from error to silent pass
- Replace GTK theme battery icons with SVG from assets/icons/battery/
- Replace back button icon with misc/chevron-left.svg
- Remove unused get_battery_theme_icon function
- Replace Svg.has_style_class (nonexistent) with _anim_state flag
- Add on_show handler to trigger scan+refresh when wifi widget mapped
- Fix other_networks snap_to_size when section visible with children
- Add destroyed widget guards on connection callbacks
This commit fully migrates the Python network service away from external wlan0: connected to Amar 2GNet
"MEDIATEK MT7921 802.11ax"
wifi (mt7921e), 2C:98:11:76:9B:2B, hw, mtu 1500
ip4 default, ip6 default
inet4 192.168.18.70/24
route4 192.168.18.0/24 metric 600
route4 default via 192.168.18.1 metric 600
inet6 2405:acc0:1306:351c:ac94:2135:f9a8:5c89/64
inet6 fe80::4057:8edd:a684:5e33/64
route6 fe80::/64 metric 1024
route6 2405:acc0:1306:351c::/64 metric 600
route6 default via fe80::1 metric 600
lo: connected (externally) to lo
"lo"
loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536
inet4 127.0.0.1/8
inet6 ::1/128
docker0: connected (externally) to docker0
"docker0"
bridge, 0A:89:72:7F:4D:75, sw, mtu 1500
inet4 172.17.0.1/16
route4 172.17.0.0/16 metric 0
p2p-dev-wlan0: disconnected
"p2p-dev-wlan0"
wifi-p2p, hw
enp2s0: unavailable
"Realtek RTL8111/8168/8211/8411"
ethernet (r8169), 40:C2:BA:53:D5:E4, hw, mtu 1500
DNS configuration:
servers: 192.168.18.1
interface: wlan0
servers: fe80::1
interface: wlan0
Use "nmcli device show" to get complete information about known devices and
"nmcli connection show" to get an overview on active connection profiles.
Consult nmcli(1) and nmcli-examples(7) manual pages for complete usage details.
subprocess calls, implementing native D-Bus communication for a more robust and
integrated architecture.
Key changes:
- :
- Implemented native D-Bus methods for , , and .
- Updated to track , , and state.
- Fixed a bug where D-Bus returned a tuple, preventing known networks from being parsed correctly.
- :
- Wired UI events to the new D-Bus connection methods.
- Fixed a race condition in initialization where it missed the synchronous signal, leaving the UI permanently disabled.
- Removed the early-return optimization in that was preventing the active CSS state from applying to already-known networks.
- Cleaned up unused variables to satisfy linting and removed redundant blocks.
- :
- Removed the 5-second timeout hack, as the new D-Bus service properly fires callbacks upon connection success/failure.
- Removed hardcoded WPA2 text to make the dialog security-type agnostic.
- :
- Cleaned up active state styling so only the SVG icon box highlights (using ) when a network is connected.
Use raw D-Bus via Gio.DBusProxy instead of libplayerctl. All MPRIS
interactions now go through standard D-Bus property reads and method calls.
- Filter out playerctld proxy (duplicates active player)
- Validate art URLs (http/https/file only)
- Track failed cover downloads to avoid retry loops
- Remove excessive try/except around safe property reads
- Add public metadata property for consumers
- Fix consumer references to removed _player.props.metadata
- Use org.freedesktop.login1.Session.SetBrightness for kernel backlight
- Remove ddcutil dependency entirely
- Fix OSD: use signal percentage value directly (like audio OSD)
- Fix controlcenter: stop dividing percentage by max_screen again
Handler was connected twice — once in __init__ and again in
_initialize_resources. Every device-ready event fired on_network_ready
twice. Removed the __init__ connection (the lazy one is correct).
- Drop rfkill from bluetooth toggle (redundant with D-Bus Powered,
was causing stale cache on next read)
- Force toggle switch and icon to target state immediately after
setting, don't wait for D-Bus callback
- Fix nightlight icon race: flip local is_active instead of
re-querying async kill state
- Guard wifi on_network_ready against ethernet-first device loop
(emits device-ready per device; wifi_device None on first)
- Share single NetworkClient between main panel and wifi popup
(eliminates async-init race of two independent instances)
- Strip connected: prefix from wlan label initial display
- Add _pending_toggle pattern to wifi notify handler to
suppress stale-cache revert; same for bluetooth switch lock
When control center hides, PlayerBox.suspend() blocks all signal
handlers. On resume(), clearing the flag wasn't enough — stale
state lingered until next fabricator poll (up to 5s). Now resume()
immediately syncs play/pause icon, metadata, and artwork.
Add support for managing systemd‑inhibit processes via a PID file; introduce _caffeine_is_active helper; modify _check_initial_states and toggle_caffeine to start/stop inhibition and update UI icons and labels.
- mpris: native MediaArt cache lookup, dedupe play/pause emission, safe
cleanup, artwork polling for already-playing browser players, drop
os.system seek fallback
- spotlight: scope plugin keyword and detect() matches to a single plugin
via search_single instead of global search; register clipboard keywords
(clip/clipboard)
_check_icon_to_type now queries Gtk.IconTheme for the icon name
(with -symbolic suffix) before falling back to a hardcoded mapping.
_get_icon_for_device simplified since type property now returns
GTK icon names directly.
Add Pomodoro component with UI controls and state management,
modify Panel to instantiate and cache Pomodoro and TodoList widgets,
hook datetime button to toggle Pomodoro and handle right‑click on todo list,
extend destroy logic to cleanly close Pomodoro and Todo instances.
- Implement _on_button_press to show Gtk.Menu on right‑click.
- Provide Pair, Trust/Untrust, and Remove commands.
- Connect notify::connected-devices signal to refresh device list.
- Ensure graceful cleanup when device is removed.
Add _on_map handler and connect "map" signal to update playing state.
Refactor button handling to use change-value signal and dynamic child management.
Update playback status notification to avoid duplicates and use current_status variable.