From a5c4a335c58710e2fd2570a423fcb3e97a8e3164 Mon Sep 17 00:00:00 2001 From: dashie Date: Mon, 11 Dec 2023 13:52:33 +0000 Subject: [PATCH 1/6] fix: Don't readd wifi adapter after turning off wifi --- src/components/bluetooth/bluetooth_entry.rs | 2 ++ src/components/wifi/wifi_box.rs | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/bluetooth/bluetooth_entry.rs b/src/components/bluetooth/bluetooth_entry.rs index a095be5..dbb3d7c 100644 --- a/src/components/bluetooth/bluetooth_entry.rs +++ b/src/components/bluetooth/bluetooth_entry.rs @@ -48,8 +48,10 @@ impl BluetoothEntry { entry.add_prefix(&Image::from_icon_name(&device.icon)); } if device.connected || device.bonded { + println!("was bonded"); entry_imp.remove_device_button.borrow().set_sensitive(true); } else { + dbg!(&device); entry_imp.remove_device_button.borrow().set_sensitive(false); } diff --git a/src/components/wifi/wifi_box.rs b/src/components/wifi/wifi_box.rs index 249be64..f9ac38c 100644 --- a/src/components/wifi/wifi_box.rs +++ b/src/components/wifi/wifi_box.rs @@ -17,7 +17,7 @@ use dbus::Path; use glib::{clone, Cast, PropertySet}; use gtk::glib::Variant; use gtk::prelude::{ActionableExt, WidgetExt}; -use gtk::{gio, StringObject}; +use gtk::{gio, StringObject, StringList}; use re_set_lib::network::network_structures::{AccessPoint, WifiDevice, WifiStrength}; use re_set_lib::signals::{AccessPointAdded, WifiDeviceChanged}; use re_set_lib::signals::{AccessPointChanged, AccessPointRemoved}; @@ -68,6 +68,9 @@ fn setup_callbacks(listeners: Arc, wifi_box: Arc) -> Arc @default-return glib::Propagation::Proceed, move |_, value| { set_wifi_enabled(value); if !value { + imp.reset_wifi_devices.write().unwrap().clear(); + *imp.reset_model_list.write().unwrap() = StringList::new(&[]); + *imp.reset_model_index.write().unwrap() = 0; let mut map = imp.wifi_entries.lock().unwrap(); for entry in map.iter() { imp.reset_wifi_list.remove(&*(*entry.1)); From d3ad017fc07f8cceb7e776c36be724a740577471 Mon Sep 17 00:00:00 2001 From: takotori Date: Mon, 11 Dec 2023 14:59:30 +0100 Subject: [PATCH 2/6] make wifi entries consistent with other entries --- src/components/wifi/wifi_box.rs | 17 +++--- src/components/wifi/wifi_entry.rs | 62 +++++++++++++-------- src/components/wifi/wifi_entry_impl.rs | 14 ++--- src/resources/resetUI.cmb | 77 +++++++++++++------------- src/resources/resetWifiEntry.ui | 60 +------------------- 5 files changed, 95 insertions(+), 135 deletions(-) diff --git a/src/components/wifi/wifi_box.rs b/src/components/wifi/wifi_box.rs index 249be64..9e15a0f 100644 --- a/src/components/wifi/wifi_box.rs +++ b/src/components/wifi/wifi_box.rs @@ -8,7 +8,7 @@ use crate::components::base::utils::Listeners; use crate::components::utils::set_combo_row_ellipsis; use adw::glib; use adw::glib::Object; -use adw::prelude::{ComboRowExt, ListBoxRowExt, PreferencesGroupExt}; +use adw::prelude::{ComboRowExt, ListBoxRowExt, PreferencesGroupExt, PreferencesRowExt}; use adw::subclass::prelude::ObjectSubclassIsExt; use dbus::blocking::Connection; use dbus::message::SignalArgs; @@ -377,12 +377,11 @@ pub fn start_event_listener(listeners: Arc, wifi_box: Arc) { let name_opt = String::from_utf8(ssid).unwrap_or_else(|_| String::from("")); let name = name_opt.as_str(); entry_imp.wifi_strength.set(strength); - entry_imp.reset_wifi_label.get().set_text(name); - entry_imp.reset_wifi_encrypted.set_visible(false); + entry.set_title(name); // TODO handle encryption thing entry_imp .reset_wifi_strength - .get() + .borrow() .set_from_icon_name(match strength { WifiStrength::Excellent => { Some("network-wireless-signal-excellent-symbolic") @@ -392,14 +391,14 @@ pub fn start_event_listener(listeners: Arc, wifi_box: Arc) { WifiStrength::None => Some("network-wireless-signal-none-symbolic"), }); if !ir.access_point.stored { - entry_imp.reset_wifi_edit_button.set_sensitive(false); + entry_imp.reset_wifi_edit_button.borrow().set_sensitive(false); } if ir.access_point.dbus_path == imp.reset_current_wifi_device.borrow().active_access_point { - entry_imp.reset_wifi_connected.set_text("Connected"); + entry_imp.reset_wifi_connected.borrow().set_text("Connected"); } else { - entry_imp.reset_wifi_connected.set_text(""); + entry_imp.reset_wifi_connected.borrow().set_text(""); } { let mut wifi_name = entry_imp.wifi_name.borrow_mut(); @@ -430,9 +429,9 @@ pub fn start_event_listener(listeners: Arc, wifi_box: Arc) { let mut connected = imp.connected.borrow_mut(); *connected = imp.access_point.borrow().dbus_path == current_device.path; if *connected { - imp.reset_wifi_connected.set_text("Connected"); + imp.reset_wifi_connected.borrow().set_text("Connected"); } else { - imp.reset_wifi_connected.set_text(""); + imp.reset_wifi_connected.borrow().set_text(""); } } }); diff --git a/src/components/wifi/wifi_entry.rs b/src/components/wifi/wifi_entry.rs index ba70229..c197232 100644 --- a/src/components/wifi/wifi_entry.rs +++ b/src/components/wifi/wifi_entry.rs @@ -1,16 +1,17 @@ +use std::ops::Deref; use std::sync::Arc; use std::time::Duration; use crate::components::wifi::utils::get_connection_settings; use adw::glib; use adw::glib::{Object, PropertySet}; -use adw::prelude::{ActionRowExt, ButtonExt, EditableExt, PopoverExt}; +use adw::prelude::{ActionRowExt, ButtonExt, EditableExt, PopoverExt, PreferencesRowExt}; use adw::subclass::prelude::ObjectSubclassIsExt; use dbus::blocking::Connection; use dbus::Error; use glib::clone; -use gtk::gio; -use gtk::prelude::{ListBoxRowExt, WidgetExt}; +use gtk::{Align, Button, gio, Image, Orientation}; +use gtk::prelude::{BoxExt, ListBoxRowExt, WidgetExt}; use re_set_lib::network::network_structures::{AccessPoint, WifiStrength}; use crate::components::wifi::wifi_box_impl::WifiBox; @@ -20,7 +21,7 @@ use crate::components::wifi::wifi_options::WifiOptions; glib::wrapper! { pub struct WifiEntry(ObjectSubclass) @extends adw::ActionRow, gtk::Widget, - @implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget, gtk::ListBoxRow; + @implements gtk::Accessible, gtk::Buildable, gtk::Actionable, gtk::ConstraintTarget, adw::PreferencesRow, gtk::ListBoxRow; } unsafe impl Send for WifiEntry {} @@ -37,24 +38,41 @@ impl WifiEntry { let name_opt = String::from_utf8(ssid).unwrap_or_else(|_| String::from("")); let name = name_opt.as_str(); entry_imp.wifi_strength.set(strength); - entry_imp.reset_wifi_label.get().set_text(name); - entry_imp.reset_wifi_encrypted.set_visible(false); + entry.set_title(name); entry_imp.connected.set(connected); + entry_imp.reset_wifi_edit_button.replace(Button::builder() + .icon_name("document-edit-symbolic") + .valign(Align::Center) + .build()); + // TODO handle encryption thing - entry_imp - .reset_wifi_strength - .get() - .set_from_icon_name(match strength { - WifiStrength::Excellent => Some("network-wireless-signal-excellent-symbolic"), - WifiStrength::Ok => Some("network-wireless-signal-ok-symbolic"), - WifiStrength::Weak => Some("network-wireless-signal-weak-symbolic"), - WifiStrength::None => Some("network-wireless-signal-none-symbolic"), - }); + let wifi_strength = Image::builder().icon_name(match strength { + WifiStrength::Excellent => "network-wireless-signal-excellent-symbolic", + WifiStrength::Ok => "network-wireless-signal-ok-symbolic", + WifiStrength::Weak => "network-wireless-signal-weak-symbolic", + WifiStrength::None => "network-wireless-signal-none-symbolic", + }).build(); + + let prefix_box = gtk::Box::new(Orientation::Horizontal, 0); + prefix_box.append(&wifi_strength); + prefix_box.append(&Image::builder() + .icon_name("system-lock-screen-symbolic") + .valign(Align::End) + .pixel_size(9) + .margin_bottom(12) + .build()); + entry.add_prefix(&prefix_box); + + let suffix_box = gtk::Box::new(Orientation::Horizontal, 5); + suffix_box.append(entry_imp.reset_wifi_connected.borrow().deref()); + suffix_box.append(entry_imp.reset_wifi_edit_button.borrow().deref()); + entry.add_suffix(&suffix_box); + if !access_point.stored { - entry_imp.reset_wifi_edit_button.set_sensitive(false); + entry_imp.reset_wifi_edit_button.borrow().set_sensitive(false); } if connected { - entry_imp.reset_wifi_connected.set_text("Connected"); + entry_imp.reset_wifi_connected.borrow().set_text("Connected"); } { let mut wifi_name = entry_imp.wifi_name.borrow_mut(); @@ -79,7 +97,7 @@ impl WifiEntry { pub fn setup_callbacks(&self, wifi_box: &WifiBox) { let self_imp = self.imp(); - self_imp.reset_wifi_edit_button.connect_clicked(clone!(@ weak self_imp, @ weak wifi_box => move |_| { + self_imp.reset_wifi_edit_button.borrow().connect_clicked(clone!(@ weak self_imp, @ weak wifi_box => move |_| { let _option = get_connection_settings(self_imp.access_point.borrow().associated_connection.clone()); wifi_box.reset_wifi_navigation.push(&*WifiOptions::new(_option, self_imp.access_point.borrow().dbus_path.clone())); })); @@ -106,7 +124,7 @@ pub fn click_disconnect(entry: Arc) { imp.connected.replace(false); return; } - imp.reset_wifi_connected.set_text(""); + imp.reset_wifi_connected.borrow().set_text(""); imp.connected.replace(false); glib::spawn_future(async move { glib::idle_add_once(move || { @@ -146,7 +164,7 @@ pub fn click_stored_network(entry: Arc) { return; } let imp = entry_ref.imp(); - imp.reset_wifi_connected.set_text("Connected"); + imp.reset_wifi_connected.borrow().set_text("Connected"); imp.connected.replace(true); }); }); @@ -198,8 +216,8 @@ pub fn click_new_network(entry: Arc) { } let imp = entry_ref.imp(); imp.reset_wifi_popup.popdown(); - imp.reset_wifi_edit_button.set_sensitive(true); - imp.reset_wifi_connected.set_text("Connected"); + imp.reset_wifi_edit_button.borrow().set_sensitive(true); + imp.reset_wifi_connected.borrow().set_text("Connected"); imp.connected.replace(true); }); }); diff --git a/src/components/wifi/wifi_entry_impl.rs b/src/components/wifi/wifi_entry_impl.rs index 61748c1..4f97518 100644 --- a/src/components/wifi/wifi_entry_impl.rs +++ b/src/components/wifi/wifi_entry_impl.rs @@ -11,18 +11,12 @@ use std::cell::RefCell; #[derive(Default, CompositeTemplate)] #[template(resource = "/org/Xetibo/ReSet/resetWifiEntry.ui")] pub struct WifiEntry { - #[template_child] - pub reset_wifi_strength: TemplateChild, - #[template_child] - pub reset_wifi_encrypted: TemplateChild, - #[template_child] - pub reset_wifi_label: TemplateChild