1
0
Fork 0
mirror of https://github.com/Zedfrigg/ironbar.git synced 2025-07-02 03:01:04 +02:00

feat: add icon size config and cellular support to networkmanager module

This commit is contained in:
Reinout Meliesie 2024-02-15 15:20:39 +01:00
parent 33d367cdf4
commit b92c8d65ce
Signed by: zedfrigg
GPG key ID: 3AFCC06481308BC6

View file

@ -9,6 +9,7 @@ use zbus::names::InterfaceName;
use zbus::zvariant::ObjectPath; use zbus::zvariant::ObjectPath;
use crate::config::CommonConfig; use crate::config::CommonConfig;
use crate::gtk_helpers::IronbarGtkExt;
use crate::image::ImageProvider; use crate::image::ImageProvider;
use crate::modules::{Module, ModuleInfo, ModuleParts, ModuleUpdateEvent, WidgetContext}; use crate::modules::{Module, ModuleInfo, ModuleParts, ModuleUpdateEvent, WidgetContext};
use crate::{glib_recv, send_async, spawn}; use crate::{glib_recv, send_async, spawn};
@ -16,16 +17,25 @@ use crate::{glib_recv, send_async, spawn};
// TODO: Add icon size option // TODO: Add icon size option
#[derive(Debug, Deserialize, Clone)] #[derive(Debug, Deserialize, Clone)]
pub struct NetworkmanagerModule { pub struct NetworkmanagerModule {
#[serde(default = "default_icon_size")]
icon_size: i32,
#[serde(flatten)] #[serde(flatten)]
pub common: Option<CommonConfig>, pub common: Option<CommonConfig>,
} }
const fn default_icon_size() -> i32 {
24
}
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub enum NetworkmanagerState { pub enum NetworkmanagerState {
Cellular,
Offline,
Unknown,
Wired,
Wireless, Wireless,
WirelessDisconnected, WirelessDisconnected,
Wired,
Offline,
} }
impl Module<gtk::Box> for NetworkmanagerModule { impl Module<gtk::Box> for NetworkmanagerModule {
@ -84,23 +94,26 @@ impl Module<gtk::Box> for NetworkmanagerModule {
) -> Result<ModuleParts<gtk::Box>> { ) -> Result<ModuleParts<gtk::Box>> {
let container = gtk::Box::new(Orientation::Horizontal, 0); let container = gtk::Box::new(Orientation::Horizontal, 0);
let icon = Image::new(); let icon = Image::new();
icon.add_class("icon");
container.add(&icon); container.add(&icon);
let icon_theme = info.icon_theme.clone(); let icon_theme = info.icon_theme.clone();
let initial_icon_name = "icon:content-loading-symbolic"; let initial_icon_name = "icon:content-loading-symbolic";
ImageProvider::parse(initial_icon_name, &icon_theme, false, 18) ImageProvider::parse(initial_icon_name, &icon_theme, false, self.icon_size)
.map(|provider| provider.load_into_image(icon.clone())); .map(|provider| provider.load_into_image(icon.clone()));
let rx = context.subscribe(); let rx = context.subscribe();
glib_recv!(rx, state => { glib_recv!(rx, state => {
let icon_name = match state { let icon_name = match state {
NetworkmanagerState::Cellular => "network-cellular-symbolic",
NetworkmanagerState::Offline => "network-wireless-disabled-symbolic",
NetworkmanagerState::Unknown => "dialog-question-symbolic",
NetworkmanagerState::Wired => "network-wired-symbolic",
NetworkmanagerState::Wireless => "network-wireless-symbolic", NetworkmanagerState::Wireless => "network-wireless-symbolic",
NetworkmanagerState::WirelessDisconnected => "network-wireless-acquiring-symbolic", NetworkmanagerState::WirelessDisconnected => "network-wireless-acquiring-symbolic",
NetworkmanagerState::Wired => "network-wired-symbolic",
NetworkmanagerState::Offline => "network-wireless-disabled-symbolic",
}; };
ImageProvider::parse(icon_name, &icon_theme, false, 18) ImageProvider::parse(icon_name, &icon_theme, false, self.icon_size)
.map(|provider| provider.load_into_image(icon.clone())); .map(|provider| provider.load_into_image(icon.clone()));
}); });
@ -125,9 +138,17 @@ async fn get_network_state(
.to_string(); .to_string();
match primary_connection_type.as_str() { match primary_connection_type.as_str() {
"802-11-olpc-mesh" => Ok(NetworkmanagerState::Wireless),
"802-11-wireless" => Ok(NetworkmanagerState::Wireless), "802-11-wireless" => Ok(NetworkmanagerState::Wireless),
"802-3-ethernet" => Ok(NetworkmanagerState::Wired), "802-3-ethernet" => Ok(NetworkmanagerState::Wired),
_ => panic!("Unknown primary connection type"), "adsl" => Ok(NetworkmanagerState::Wired),
"cdma" => Ok(NetworkmanagerState::Cellular),
"gsm" => Ok(NetworkmanagerState::Cellular),
"pppoe" => Ok(NetworkmanagerState::Wired),
"wifi-p2p" => Ok(NetworkmanagerState::Wireless),
"wimax" => Ok(NetworkmanagerState::Cellular),
"wpan" => Ok(NetworkmanagerState::Wireless),
_ => Ok(NetworkmanagerState::Unknown),
} }
} else { } else {
let wireless_enabled = *properties["WirelessEnabled"] let wireless_enabled = *properties["WirelessEnabled"]