Improve UI

This commit is contained in:
takotori 2023-11-26 11:25:31 +01:00
parent 02e63f5984
commit c6efced326
28 changed files with 609 additions and 1035 deletions

View file

@ -3,7 +3,7 @@ use std::time::{Duration, SystemTime};
use adw::glib;
use adw::glib::Object;
use adw::prelude::{ButtonExt, RangeExt};
use adw::prelude::{ButtonExt, ComboRowExt, PreferencesRowExt, RangeExt};
use dbus::blocking::Connection;
use dbus::Error;
use glib::subclass::types::ObjectSubclassIsExt;
@ -16,7 +16,7 @@ use super::sourceBox::SourceBox;
glib::wrapper! {
pub struct OutputStreamEntry(ObjectSubclass<outputStreamEntryImpl::OutputStreamEntry>)
@extends gtk::Box, gtk::Widget,
@extends adw::PreferencesGroup, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
@ -31,7 +31,7 @@ impl OutputStreamEntry {
let box_imp = source_box.imp();
let imp = obj.imp();
let name = stream.application_name.clone() + ": " + stream.name.as_str();
imp.resetSourceName.set_text(name.as_str());
imp.resetSourceSelection.set_title(name.as_str());
let volume = stream.volume.first().unwrap_or(&0_u32);
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
@ -69,7 +69,7 @@ impl OutputStreamEntry {
// list = box_imp.resetModelList.try_borrow();
// }
// let list = list.unwrap();
imp.resetSelectedSource.set_model(Some(&*list));
imp.resetSourceSelection.set_model(Some(&*list));
let map = box_imp.resetSourceMap.write().unwrap();
// while map.is_err() {
// map = box_imp.resetSourceMap.try_borrow();
@ -83,10 +83,10 @@ impl OutputStreamEntry {
let name = &name.alias;
let index = map.get(name);
if index.is_some() {
imp.resetSelectedSource.set_selected(index.unwrap().1);
imp.resetSourceSelection.set_selected(index.unwrap().1);
}
}
imp.resetSelectedSource.connect_selected_notify(
imp.resetSourceSelection.connect_selected_notify(
clone!(@weak imp, @weak box_imp => move |dropdown| {
let selected = dropdown.selected_item();
if selected.is_none() {

View file

@ -1,6 +1,8 @@
use std::cell::RefCell;
use std::sync::Arc;
use std::time::SystemTime;
use adw::{ComboRow, PreferencesGroup};
use adw::subclass::prelude::PreferencesGroupImpl;
use crate::components::input::outputStreamEntry;
use gtk::subclass::prelude::*;
@ -12,9 +14,7 @@ use ReSet_Lib::audio::audio::OutputStream;
#[template(resource = "/org/Xetibo/ReSet/resetOutputStreamEntry.ui")]
pub struct OutputStreamEntry {
#[template_child]
pub resetSourceName: TemplateChild<Label>,
#[template_child]
pub resetSelectedSource: TemplateChild<DropDown>,
pub resetSourceSelection: TemplateChild<ComboRow>,
#[template_child]
pub resetSourceMute: TemplateChild<Button>,
#[template_child]
@ -33,7 +33,7 @@ impl ObjectSubclass for OutputStreamEntry {
const ABSTRACT: bool = false;
const NAME: &'static str = "resetOutputStreamEntry";
type Type = outputStreamEntry::OutputStreamEntry;
type ParentType = gtk::Box;
type ParentType = PreferencesGroup;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
@ -44,7 +44,7 @@ impl ObjectSubclass for OutputStreamEntry {
}
}
impl BoxImpl for OutputStreamEntry {}
impl PreferencesGroupImpl for OutputStreamEntry {}
impl ObjectImpl for OutputStreamEntry {}

View file

@ -1,3 +1,4 @@
use adw::prelude::PreferencesRowExt;
use std::sync::Arc;
use std::time::{Duration, SystemTime};
@ -55,12 +56,12 @@ impl SourceBox {
selfImp
.resetCardsRow
.set_action_target_value(Some(&Variant::from("profileConfiguration")));
selfImp
.resetOutputStreamButton
.set_action_name(Some("navigation.pop"));
selfImp
.resetInputCardsBackButton
.set_action_name(Some("navigation.pop"));
selfImp.resetOutputStreamButton.set_activatable(true);
selfImp.resetOutputStreamButton.set_action_name(Some("navigation.pop"));
selfImp.resetInputCardsBackButton.set_activatable(true);
selfImp.resetInputCardsBackButton.set_action_name(Some("navigation.pop"));
let factory = &SignalListItemFactory::new();
factory.connect_setup(|_, item| {
@ -457,7 +458,7 @@ pub fn start_input_box_listener(conn: Connection, source_box: Arc<SourceBox>) ->
} else {
imp.resetSelectedSource.set_active(false);
}
imp.resetSourceName.set_text(ir.source.alias.clone().as_str());
imp.resetSourceName.set_title(ir.source.alias.clone().as_str());
imp.resetVolumePercentage.set_text(&percentage);
imp.resetVolumeSlider.set_value(*volume as f64);
@ -530,7 +531,7 @@ pub fn start_input_box_listener(conn: Connection, source_box: Arc<SourceBox>) ->
.set_icon_name("audio-input-microphone-symbolic");
}
let name = ir.stream.application_name.clone() + ": " + ir.stream.name.as_str();
imp.resetSourceName.set_text(name.as_str());
imp.resetSourceSelection.set_title(name.as_str());
let volume = ir.stream.volume.first().unwrap_or(&0_u32);
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
@ -539,7 +540,7 @@ pub fn start_input_box_listener(conn: Connection, source_box: Arc<SourceBox>) ->
let map = output_box_imp.resetSourceMap.read().unwrap();
let index = map.get(&alias);
if index.is_some() {
imp.resetSelectedSource.set_selected(index.unwrap().1);
imp.resetSourceSelection.set_selected(index.unwrap().1);
}
});
});

View file

@ -35,11 +35,11 @@ pub struct SourceBox {
#[template_child]
pub resetSources: TemplateChild<gtk::Box>,
#[template_child]
pub resetOutputStreamButton: TemplateChild<ListEntry>,
pub resetOutputStreamButton: TemplateChild<ActionRow>,
#[template_child]
pub resetOutputStreams: TemplateChild<gtk::Box>,
#[template_child]
pub resetInputCardsBackButton: TemplateChild<ListEntry>,
pub resetInputCardsBackButton: TemplateChild<ActionRow>,
#[template_child]
pub resetCards: TemplateChild<PreferencesGroup>,
pub resetDefaultCheckButton: Arc<CheckButton>,

View file

@ -3,7 +3,7 @@ use std::time::{Duration, SystemTime};
use adw::glib;
use adw::glib::Object;
use adw::prelude::{ButtonExt, CheckButtonExt, RangeExt};
use adw::prelude::{ButtonExt, CheckButtonExt, PreferencesRowExt, RangeExt};
use dbus::blocking::Connection;
use dbus::Error;
use glib::subclass::types::ObjectSubclassIsExt;
@ -15,7 +15,7 @@ use super::sourceEntryImpl;
glib::wrapper! {
pub struct SourceEntry(ObjectSubclass<sourceEntryImpl::SourceEntry>)
@extends gtk::Box, gtk::Widget,
@extends adw::PreferencesGroup, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
@ -28,7 +28,7 @@ impl SourceEntry {
// TODO use event callback for progress bar -> this is the "im speaking" indicator
{
let imp = obj.imp();
imp.resetSourceName.set_text(stream.alias.clone().as_str());
imp.resetSourceName.set_title(stream.alias.clone().as_str());
let name = Arc::new(stream.name.clone());
let volume = stream.volume.first().unwrap_or(&0_u32);
let fraction = (*volume as f64 / 655.36).round();

View file

@ -1,6 +1,8 @@
use std::cell::RefCell;
use std::sync::Arc;
use std::time::SystemTime;
use adw::{ActionRow, PreferencesGroup};
use adw::subclass::prelude::PreferencesGroupImpl;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CheckButton, CompositeTemplate, Label, ProgressBar, Scale};
@ -13,7 +15,7 @@ use super::sourceEntry;
#[template(resource = "/org/Xetibo/ReSet/resetSourceEntry.ui")]
pub struct SourceEntry {
#[template_child]
pub resetSourceName: TemplateChild<Label>,
pub resetSourceName: TemplateChild<ActionRow>,
#[template_child]
pub resetSelectedSource: TemplateChild<CheckButton>,
#[template_child]
@ -33,7 +35,7 @@ impl ObjectSubclass for SourceEntry {
const ABSTRACT: bool = false;
const NAME: &'static str = "resetSourceEntry";
type Type = sourceEntry::SourceEntry;
type ParentType = gtk::Box;
type ParentType = PreferencesGroup;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
@ -44,7 +46,7 @@ impl ObjectSubclass for SourceEntry {
}
}
impl BoxImpl for SourceEntry {}
impl PreferencesGroupImpl for SourceEntry {}
impl ObjectImpl for SourceEntry {}

View file

@ -3,7 +3,7 @@ use std::time::{Duration, SystemTime};
use adw::glib;
use adw::glib::Object;
use adw::prelude::{ButtonExt, RangeExt};
use adw::prelude::{ButtonExt, ComboRowExt, PreferencesRowExt, RangeExt};
use dbus::blocking::Connection;
use dbus::Error;
use glib::subclass::types::ObjectSubclassIsExt;
@ -16,7 +16,7 @@ use super::sinkBox::SinkBox;
glib::wrapper! {
pub struct InputStreamEntry(ObjectSubclass<inputStreamEntryImpl::InputStreamEntry>)
@extends gtk::Box, gtk::Widget,
@extends adw::PreferencesGroup, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
@ -36,7 +36,7 @@ impl InputStreamEntry {
.set_icon_name("audio-volume-high-symbolic");
}
let name = stream.application_name.clone() + ": " + stream.name.as_str();
imp.resetSinkName.set_text(name.as_str());
imp.resetSinkSelection.set_title(name.as_str());
let volume = stream.volume.first().unwrap_or(&0_u32);
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
@ -76,7 +76,7 @@ impl InputStreamEntry {
// list = box_imp.resetModelList.try_borrow();
// }
// let list = list.unwrap();
imp.resetSelectedSink.set_model(Some(&*list));
imp.resetSinkSelection.set_model(Some(&*list));
let map = box_imp.resetSinkMap.read().unwrap();
let sink_list = box_imp.resetSinkList.read().unwrap();
let name = sink_list.get(&index);
@ -84,7 +84,7 @@ impl InputStreamEntry {
let name = &name.unwrap().2;
let index = map.get(name);
if index.is_some() {
imp.resetSelectedSink.set_selected(index.unwrap().1);
imp.resetSinkSelection.set_selected(index.unwrap().1);
}
} else {
let mut name = box_imp.resetDefaultSink.try_borrow();
@ -94,11 +94,11 @@ impl InputStreamEntry {
let name = &name.unwrap().alias;
let index = map.get(name);
if index.is_some() {
imp.resetSelectedSink.set_selected(index.unwrap().1);
imp.resetSinkSelection.set_selected(index.unwrap().1);
}
}
}
imp.resetSelectedSink.connect_selected_notify(
imp.resetSinkSelection.connect_selected_notify(
clone!(@weak imp, @weak box_imp => move |dropdown| {
let selected = dropdown.selected_item();
if selected.is_none() {

View file

@ -1,9 +1,11 @@
use std::cell::RefCell;
use std::sync::Arc;
use std::time::SystemTime;
use adw::{ComboRow, PreferencesGroup};
use adw::subclass::prelude::PreferencesGroupImpl;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate, DropDown, Label, ProgressBar, Scale};
use gtk::{glib, Button, CompositeTemplate, Label, ProgressBar, Scale};
use ReSet_Lib::audio::audio::InputStream;
use super::inputStreamEntry;
@ -13,9 +15,7 @@ use super::inputStreamEntry;
#[template(resource = "/org/Xetibo/ReSet/resetInputStreamEntry.ui")]
pub struct InputStreamEntry {
#[template_child]
pub resetSinkName: TemplateChild<Label>,
#[template_child]
pub resetSelectedSink: TemplateChild<DropDown>,
pub resetSinkSelection: TemplateChild<ComboRow>,
#[template_child]
pub resetSinkMute: TemplateChild<Button>,
#[template_child]
@ -34,7 +34,7 @@ impl ObjectSubclass for InputStreamEntry {
const ABSTRACT: bool = false;
const NAME: &'static str = "resetInputStreamEntry";
type Type = inputStreamEntry::InputStreamEntry;
type ParentType = gtk::Box;
type ParentType = PreferencesGroup;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
@ -45,7 +45,7 @@ impl ObjectSubclass for InputStreamEntry {
}
}
impl BoxImpl for InputStreamEntry {}
impl PreferencesGroupImpl for InputStreamEntry {}
impl ObjectImpl for InputStreamEntry {}

View file

@ -1,3 +1,4 @@
use adw::prelude::PreferencesRowExt;
use adw::prelude::PreferencesGroupExt;
use std::sync::Arc;
use std::time::{Duration, SystemTime};
@ -64,12 +65,11 @@ impl SinkBox {
.set_action_target_value(Some(&Variant::from("profileConfiguration")));
selfImp.resetCardsRow.connect_action_name_notify(|_| {});
selfImp
.resetInputStreamButton
.set_action_name(Some("navigation.pop"));
selfImp
.resetInputCardsBackButton
.set_action_name(Some("navigation.pop"));
selfImp.resetInputStreamButton.set_activatable(true);
selfImp.resetInputStreamButton.set_action_name(Some("navigation.pop"));
selfImp.resetInputCardsBackButton.set_activatable(true);
selfImp.resetInputCardsBackButton.set_action_name(Some("navigation.pop"));
let factory = &SignalListItemFactory::new();
factory.connect_setup(|_, item| {
@ -462,7 +462,7 @@ pub fn start_output_box_listener(conn: Connection, sink_box: Arc<SinkBox>) -> Co
} else {
imp.resetSelectedSink.set_active(false);
}
imp.resetSinkName.set_text(ir.sink.alias.clone().as_str());
imp.resetSinkName.set_title(ir.sink.alias.clone().as_str());
imp.resetVolumePercentage.set_text(&percentage);
imp.resetVolumeSlider.set_value(*volume as f64);
});
@ -531,7 +531,7 @@ pub fn start_output_box_listener(conn: Connection, sink_box: Arc<SinkBox>) -> Co
.set_icon_name("audio-volume-high-symbolic");
}
let name = ir.stream.application_name.clone() + ": " + ir.stream.name.as_str();
imp.resetSinkName.set_text(name.as_str());
imp.resetSinkSelection.set_title(name.as_str());
let volume = ir.stream.volume.first().unwrap_or(&0_u32);
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";
@ -540,7 +540,7 @@ pub fn start_output_box_listener(conn: Connection, sink_box: Arc<SinkBox>) -> Co
let map = output_box_imp.resetSinkMap.read().unwrap();
let index = map.get(&alias);
if index.is_some() {
imp.resetSelectedSink.set_selected(index.unwrap().1);
imp.resetSinkSelection.set_selected(index.unwrap().1);
}
});
});

View file

@ -37,11 +37,11 @@ pub struct SinkBox {
#[template_child]
pub resetSinks: TemplateChild<Box>,
#[template_child]
pub resetInputStreamButton: TemplateChild<ListEntry>,
pub resetInputStreamButton: TemplateChild<ActionRow>,
#[template_child]
pub resetInputStreams: TemplateChild<Box>,
#[template_child]
pub resetInputCardsBackButton: TemplateChild<ListEntry>,
pub resetInputCardsBackButton: TemplateChild<ActionRow>,
#[template_child]
pub resetCards: TemplateChild<PreferencesGroup>,
pub resetDefaultCheckButton: Arc<CheckButton>,

View file

@ -3,7 +3,7 @@ use std::time::{Duration, SystemTime};
use adw::glib;
use adw::glib::Object;
use adw::prelude::{ButtonExt, CheckButtonExt, RangeExt};
use adw::prelude::{ButtonExt, CheckButtonExt, PreferencesRowExt, RangeExt};
use dbus::blocking::Connection;
use dbus::Error;
use glib::subclass::types::ObjectSubclassIsExt;
@ -15,7 +15,7 @@ use super::sinkEntryImpl;
glib::wrapper! {
pub struct SinkEntry(ObjectSubclass<sinkEntryImpl::SinkEntry>)
@extends gtk::Box, gtk::Widget,
@extends adw::PreferencesGroup, gtk::Widget,
@implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Orientable;
}
@ -26,7 +26,7 @@ impl SinkEntry {
// TODO handle events
{
let imp = obj.imp();
imp.resetSinkName.set_text(stream.alias.clone().as_str());
imp.resetSinkName.set_title(stream.alias.clone().as_str());
let name = Arc::new(stream.name.clone());
let volume = stream.volume.first().unwrap_or(&0_u32);
let fraction = (*volume as f64 / 655.36).round();

View file

@ -1,6 +1,8 @@
use std::cell::RefCell;
use std::sync::Arc;
use std::time::SystemTime;
use adw::{ActionRow, PreferencesGroup};
use adw::subclass::prelude::PreferencesGroupImpl;
use crate::components::output::sinkEntry;
use gtk::subclass::prelude::*;
@ -12,7 +14,7 @@ use ReSet_Lib::audio::audio::Sink;
#[template(resource = "/org/Xetibo/ReSet/resetSinkEntry.ui")]
pub struct SinkEntry {
#[template_child]
pub resetSinkName: TemplateChild<Label>,
pub resetSinkName: TemplateChild<ActionRow>,
#[template_child]
pub resetSelectedSink: TemplateChild<CheckButton>,
#[template_child]
@ -32,7 +34,7 @@ impl ObjectSubclass for SinkEntry {
const ABSTRACT: bool = false;
const NAME: &'static str = "resetSinkEntry";
type Type = sinkEntry::SinkEntry;
type ParentType = gtk::Box;
type ParentType = PreferencesGroup;
fn class_init(klass: &mut Self::Class) {
klass.bind_template();
@ -43,7 +45,7 @@ impl ObjectSubclass for SinkEntry {
}
}
impl BoxImpl for SinkEntry {}
impl PreferencesGroupImpl for SinkEntry {}
impl ObjectImpl for SinkEntry {}

View file

@ -10,4 +10,5 @@ pub mod wifiOptionsImpl;
pub mod wifiAddressEntry;
pub mod wifiAddressEntryImpl;
pub mod wifiRouteEntry;
pub mod wifiRouteEntryImpl;
pub mod wifiRouteEntryImpl;
pub mod utils;

View file

@ -10,6 +10,7 @@ use glib::subclass::types::ObjectSubclassIsExt;
use glib::{clone, PropertySet};
use gtk::gio;
use gtk::prelude::ListBoxRowExt;
use crate::components::wifi::wifiBoxImpl::WifiBox;
glib::wrapper! {
pub struct SavedWifiEntry(ObjectSubclass<savedWifiEntryImpl::SavedWifiEntry>)
@ -18,11 +19,17 @@ glib::wrapper! {
}
impl SavedWifiEntry {
pub fn new(name: &String, path: Path<'static>) -> Self {
pub fn new(name: &String, path: Path<'static>, wifiBox: &WifiBox) -> Self {
let entry: SavedWifiEntry = Object::builder().build();
entry.set_activatable(false);
let entryImp = entry.imp();
// TODO handle edit
entryImp.resetEditSavedWifiButton.connect_clicked(clone!(@ weak entryImp, @ weak wifiBox => move |_| {
// TODO accesspoint has to be saved somewhere i guess
// let _option = getConnectionSettings(entryImp.accessPoint.borrow().associated_connection.clone());
// wifiBox.resetWifiNavigation.push(&*WifiOptions::new(_option));
}));
entryImp.resetSavedWifiLabel.set_text(name);
entryImp.resetConnectionPath.set(path);
entryImp.resetDeleteSavedWifiButton.connect_clicked(

View file

@ -6,6 +6,7 @@ use adw::subclass::prelude::ActionRowImpl;
use dbus::Path;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate, Label};
use ReSet_Lib::network::network::AccessPoint;
use super::savedWifiEntry;
@ -20,6 +21,7 @@ pub struct SavedWifiEntry {
#[template_child]
pub resetSavedWifiLabel: TemplateChild<Label>,
pub resetConnectionPath: RefCell<Path<'static>>,
pub accessPoint: RefCell<AccessPoint>,
}
unsafe impl Send for SavedWifiEntry {}

View file

@ -0,0 +1,29 @@
use std::collections::HashMap;
use std::time::Duration;
use dbus::arg::{RefArg};
use dbus::blocking::Connection;
use dbus::Error;
use dbus::Path;
use ReSet_Lib::network::connection::Connection as ResetConnection;
pub fn getConnectionSettings(path: Path<'static>) -> ResetConnection {
let conn = Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(1000),
);
let res: Result<
(HashMap<String, HashMap<String, dbus::arg::Variant<Box<dyn RefArg>>>>,),
Error,
> = proxy.method_call("org.xetibo.ReSet", "GetConnectionSettings", (path,));
if res.is_err() {
ResetConnection::default();
}
let (res,) = res.unwrap();
let res = ResetConnection::convert_from_propmap(res);
if res.is_err() {
ResetConnection::default();
}
res.unwrap()
}

View file

@ -1,5 +1,3 @@
use std::collections::HashMap;
use std::sync::atomic::Ordering;
use std::sync::Arc;
@ -31,7 +29,6 @@ use crate::components::wifi::wifiEntry::WifiEntry;
use super::savedWifiEntry::SavedWifiEntry;
use ReSet_Lib::network::connection::Connection as ResetConnection;
glib::wrapper! {
pub struct WifiBox(ObjectSubclass<wifiBoxImpl::WifiBox>)
@ -57,9 +54,8 @@ impl WifiBox {
.resetSavedNetworks
.set_action_target_value(Some(&Variant::from("saved")));
selfImp
.resetAvailableNetworks
.set_action_name(Some("navigation.pop"));
selfImp.resetAvailableNetworks.set_activatable(true);
selfImp.resetAvailableNetworks.set_action_name(Some("navigation.pop"));
}
}
@ -103,7 +99,7 @@ pub fn show_stored_connections(wifiBox: Arc<WifiBox>) {
// TODO include button for settings
let name =
&String::from_utf8(connection.1).unwrap_or_else(|_| String::from(""));
let entry = SavedWifiEntry::new(name, connection.0);
let entry = SavedWifiEntry::new(name, connection.0, selfImp);
selfImp.resetStoredWifiList.add(&entry);
}
});
@ -154,28 +150,6 @@ pub fn get_stored_connections() -> Vec<(Path<'static>, Vec<u8>)> {
connections
}
pub fn getConnectionSettings(path: Path<'static>) -> ResetConnection {
let conn = Connection::new_session().unwrap();
let proxy = conn.with_proxy(
"org.xetibo.ReSet",
"/org/xetibo/ReSet",
Duration::from_millis(1000),
);
let res: Result<
(HashMap<String, HashMap<String, dbus::arg::Variant<Box<dyn RefArg>>>>,),
Error,
> = proxy.method_call("org.xetibo.ReSet", "GetConnectionSettings", (path,));
if res.is_err() {
ResetConnection::default();
}
let (res,) = res.unwrap();
let res = ResetConnection::convert_from_propmap(res);
if res.is_err() {
ResetConnection::default();
}
res.unwrap()
}
pub fn start_event_listener(listeners: Arc<Listeners>, wifi_box: Arc<WifiBox>) {
gio::spawn_blocking(move || {
if listeners.network_listener.load(Ordering::SeqCst) {

View file

@ -29,7 +29,7 @@ pub struct WifiBox {
#[template_child]
pub resetStoredWifiList: TemplateChild<PreferencesGroup>,
#[template_child]
pub resetAvailableNetworks: TemplateChild<ListEntry>,
pub resetAvailableNetworks: TemplateChild<ActionRow>,
pub wifiEntries: Arc<Mutex<HashMap<Vec<u8>, Arc<WifiEntry>>>>,
pub wifiEntriesPath: Arc<Mutex<HashMap<Path<'static>, Arc<WifiEntry>>>>,
pub savedWifiEntries: Arc<Mutex<Vec<ListEntry>>>,

View file

@ -12,8 +12,8 @@ use glib::clone;
use gtk::gio;
use gtk::prelude::{ListBoxRowExt, WidgetExt};
use ReSet_Lib::network::network::{AccessPoint, WifiStrength};
use crate::components::wifi::utils::getConnectionSettings;
use crate::components::wifi::wifiBox::getConnectionSettings;
use crate::components::wifi::wifiBoxImpl::WifiBox;
use crate::components::wifi::wifiEntryImpl;
use crate::components::wifi::wifiOptions::WifiOptions;