control centre: menus for Wi-Fi, Bluetooth, VPN and Sound in their own window

The tile or block grows into its menu; the panel fades its content and takes the
menu's size underneath. Wi-Fi lists networks (join saved/open, disconnect, stop
iwd), Bluetooth lists devices, VPN has a switch per openvpn service, Sound has
every output with its own slider and a default picker. A second Sound slider for
the output named by extra_output in shell.conf (NR515). Screen and keyboard light
are written to sysfs directly: logind refuses a shell without a seat.
This commit is contained in:
server2
2026-10-10 12:13:34 +02:00
parent 1b571abef0
commit 318b2a8443
10 changed files with 1004 additions and 70 deletions
+5
View File
@@ -76,6 +76,9 @@ pub struct Theme {
// the iwd access point profile the control centre's hotspot starts (/var/lib/iwd/ap/<name>.ap); empty: none
pub hotspot: String,
// a second Sound slider in the control centre, for the output whose name contains this; empty: none
pub extra_output: String,
}
impl Service for Theme {
@@ -84,6 +87,7 @@ impl Service for Theme {
colors: Animation::new(PINK_ON_PURPLE),
cover_colors: false,
hotspot: String::new(),
extra_output: String::new(),
}
}
@@ -179,6 +183,7 @@ fn apply(theme: &str, config: &str, startup: bool) {
theme.cover_colors = setting("cover_colors") == Some("true");
theme.hotspot = setting("hotspot").unwrap_or("").to_string();
theme.extra_output = setting("extra_output").unwrap_or("").to_string();
// a change in the middle of a fade starts from the colours on screen now
let now = theme.colors.value();