Merge pull request #78 from Xetibo/ina

make wifi options a little bit better
This commit is contained in:
takotori 2023-12-11 22:16:39 +01:00 committed by GitHub
commit b422a50efd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 121 additions and 246 deletions

View file

@ -6,7 +6,7 @@ description = "A wip universal Linux settings application."
[dependencies]
reset_daemon = "0.4.6"
re_set-lib = "0.6.6"
re_set-lib = { git = "https://github.com/Xetibo/ReSet-Lib", branch = "main" }
adw = { version = "0.5.3", package = "libadwaita", features = ["v1_4"] }
dbus = "0.9.7"
gtk = { version = "0.7.3", package = "gtk4", features = ["v4_12"] }

View file

@ -54,6 +54,7 @@ fn setup_callbacks(
imp.reset_visibility
.set_action_target_value(Some(&Variant::from("visibility")));
imp.reset_bluetooth_main_tab.set_activatable(true);
imp.reset_bluetooth_main_tab
.set_action_name(Some("navigation.pop"));
@ -67,15 +68,13 @@ fn setup_callbacks(
});
imp.reset_bluetooth_discoverable_switch
.connect_state_set(clone!(@weak imp => @default-return glib::Propagation::Proceed,move |_, state| {
set_bluetooth_adapter_visibility(imp.reset_current_bluetooth_adapter.borrow().path.clone(), state);
glib::Propagation::Proceed
.connect_active_notify(clone!(@weak imp => move |state| {
set_bluetooth_adapter_visibility(imp.reset_current_bluetooth_adapter.borrow().path.clone(), state.is_active());
}));
imp.reset_bluetooth_pairable_switch
.connect_state_set(clone!(@weak imp => @default-return glib::Propagation::Proceed,move |_, state| {
set_bluetooth_adapter_pairability(imp.reset_current_bluetooth_adapter.borrow().path.clone(), state);
glib::Propagation::Proceed
.connect_active_notify(clone!(@weak imp => move |state| {
set_bluetooth_adapter_pairability(imp.reset_current_bluetooth_adapter.borrow().path.clone(), state.is_active());
}));
imp.reset_bluetooth_switch
@ -151,11 +150,11 @@ pub fn populate_conntected_bluetooth_devices(bluetooth_box: Arc<BluetoothBox>) {
imp.reset_bluetooth_switch
.set_active(current_adapter.powered);
imp.reset_bluetooth_discoverable_switch
.set_state(current_adapter.discoverable);
.set_active(current_adapter.discoverable);
imp.reset_bluetooth_discoverable_switch
.set_active(current_adapter.discoverable);
imp.reset_bluetooth_pairable_switch
.set_state(current_adapter.pairable);
.set_active(current_adapter.pairable);
imp.reset_bluetooth_pairable_switch
.set_active(current_adapter.pairable);
}

View file

@ -1,4 +1,4 @@
use adw::{ActionRow, ComboRow, PreferencesGroup};
use adw::{ActionRow, ComboRow, PreferencesGroup, SwitchRow};
use dbus::Path;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate, Switch};
@ -30,11 +30,11 @@ pub struct BluetoothBox {
#[template_child]
pub reset_visibility: TemplateChild<ActionRow>,
#[template_child]
pub reset_bluetooth_main_tab: TemplateChild<ListEntry>,
pub reset_bluetooth_main_tab: TemplateChild<ActionRow>,
#[template_child]
pub reset_bluetooth_discoverable_switch: TemplateChild<Switch>,
pub reset_bluetooth_discoverable_switch: TemplateChild<SwitchRow>,
#[template_child]
pub reset_bluetooth_pairable_switch: TemplateChild<Switch>,
pub reset_bluetooth_pairable_switch: TemplateChild<SwitchRow>,
pub available_devices: BluetoothMap,
pub connected_devices: BluetoothMap,
pub reset_bluetooth_adapters: Arc<RwLock<HashMap<String, (BluetoothAdapter, u32)>>>,

View file

@ -7,7 +7,7 @@ use std::time::SystemTime;
use crate::components::input::output_stream_entry;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate, Label, ProgressBar, Scale};
use gtk::{glib, Button, CompositeTemplate, Label, Scale};
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetOutputStreamEntry.ui")]
@ -20,8 +20,6 @@ pub struct OutputStreamEntry {
pub reset_volume_slider: TemplateChild<Scale>,
#[template_child]
pub reset_volume_percentage: TemplateChild<Label>,
#[template_child]
pub reset_volume_meter: TemplateChild<ProgressBar>,
pub stream: Arc<RefCell<OutputStream>>,
pub associated_source: Arc<RefCell<(u32, String)>>,
pub volume_time_stamp: RefCell<Option<SystemTime>>,

View file

@ -120,6 +120,16 @@ pub fn populate_sources(input_box: Arc<SourceBox>) {
let default_sink = input_box_imp.reset_default_source.clone();
let source = default_sink.borrow();
if source.muted {
input_box_imp
.reset_source_mute
.set_icon_name("microphone-disabled-symbolic");
} else {
input_box_imp
.reset_source_mute
.set_icon_name("audio-input-microphone-symbolic");
}
let volume = source.volume.first().unwrap_or(&0_u32);
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";

View file

@ -9,7 +9,7 @@ use crate::components::base::list_entry::ListEntry;
use crate::components::input::source_box;
use gtk::subclass::prelude::*;
use gtk::{glib, CheckButton, CompositeTemplate, StringList, TemplateChild};
use gtk::{prelude::*, Button, Label, ProgressBar, Scale};
use gtk::{prelude::*, Button, Label, Scale};
use super::output_stream_entry::OutputStreamEntry;
use super::source_entry::SourceEntry;
@ -33,8 +33,7 @@ pub struct SourceBox {
pub reset_volume_slider: TemplateChild<Scale>,
#[template_child]
pub reset_volume_percentage: TemplateChild<Label>,
#[template_child]
pub reset_volume_meter: TemplateChild<ProgressBar>,
#[template_child]
pub reset_sources: TemplateChild<gtk::Box>,
#[template_child]

View file

@ -6,7 +6,7 @@ use std::sync::Arc;
use std::time::SystemTime;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate, Label, ProgressBar, Scale};
use gtk::{glib, Button, CompositeTemplate, Label, Scale};
use super::input_stream_entry;
@ -21,8 +21,6 @@ pub struct InputStreamEntry {
pub reset_volume_slider: TemplateChild<Scale>,
#[template_child]
pub reset_volume_percentage: TemplateChild<Label>,
#[template_child]
pub reset_volume_meter: TemplateChild<ProgressBar>,
pub stream: Arc<RefCell<InputStream>>,
pub associated_sink: Arc<RefCell<(u32, String)>>,
pub volume_time_stamp: RefCell<Option<SystemTime>>,

View file

@ -119,6 +119,16 @@ pub fn populate_sinks(output_box: Arc<SinkBox>) {
let default_sink = output_box_imp.reset_default_sink.clone();
let sink = default_sink.borrow();
if sink.muted {
output_box_imp
.reset_sink_mute
.set_icon_name("audio-volume-muted-symbolic");
} else {
output_box_imp
.reset_sink_mute
.set_icon_name("audio-volume-high-symbolic");
}
let volume = sink.volume.first().unwrap_or(&0);
let fraction = (*volume as f64 / 655.36).round();
let percentage = (fraction).to_string() + "%";

View file

@ -9,7 +9,7 @@ use crate::components::base::list_entry::ListEntry;
use crate::components::output::input_stream_entry::InputStreamEntry;
use gtk::subclass::prelude::*;
use gtk::{glib, Box, Button, CheckButton, CompositeTemplate, Label, StringList, TemplateChild};
use gtk::{prelude::*, ProgressBar, Scale};
use gtk::{prelude::*, Scale};
use super::sink_box;
use super::sink_entry::SinkEntry;
@ -36,8 +36,6 @@ pub struct SinkBox {
#[template_child]
pub reset_volume_percentage: TemplateChild<Label>,
#[template_child]
pub reset_volume_meter: TemplateChild<ProgressBar>,
#[template_child]
pub reset_sinks: TemplateChild<Box>,
#[template_child]
pub reset_input_stream_button: TemplateChild<ActionRow>,

View file

@ -7,7 +7,7 @@ use std::time::SystemTime;
use crate::components::output::sink_entry;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CheckButton, CompositeTemplate, Label, ProgressBar, Scale};
use gtk::{glib, Button, CheckButton, CompositeTemplate, Label, Scale};
#[derive(Default, CompositeTemplate)]
#[template(resource = "/org/Xetibo/ReSet/resetSinkEntry.ui")]
@ -22,8 +22,6 @@ pub struct SinkEntry {
pub reset_volume_slider: TemplateChild<Scale>,
#[template_child]
pub reset_volume_percentage: TemplateChild<Label>,
#[template_child]
pub reset_volume_meter: TemplateChild<ProgressBar>,
pub stream: Arc<RefCell<Sink>>,
pub volume_time_stamp: RefCell<Option<SystemTime>>,
}

View file

@ -1,16 +1,19 @@
use std::rc::Rc;
use std::time::Duration;
use crate::components::wifi::saved_wifi_entry_impl;
use crate::components::wifi::wifi_box_impl::WifiBox;
use adw::glib;
use adw::glib::Object;
use adw::prelude::{ActionRowExt, ButtonExt, PreferencesRowExt, WidgetExt};
use adw::prelude::{ActionRowExt, ButtonExt, PreferencesRowExt, PreferencesGroupExt};
use dbus::blocking::Connection;
use dbus::{Error, Path};
use glib::subclass::types::ObjectSubclassIsExt;
use glib::{clone, PropertySet};
use gtk::{Align, Button, gio, Orientation};
use gtk::prelude::{BoxExt, ListBoxRowExt};
use crate::components::wifi::utils::get_connection_settings;
use crate::components::wifi::wifi_options::WifiOptions;
glib::wrapper! {
pub struct SavedWifiEntry(ObjectSubclass<saved_wifi_entry_impl::SavedWifiEntry>)
@ -19,8 +22,8 @@ glib::wrapper! {
}
impl SavedWifiEntry {
pub fn new(name: &str, path: Path<'static>, wifi_box: &WifiBox) -> Self {
let entry: SavedWifiEntry = Object::builder().build();
pub fn new(name: &str, path: Path<'static>, wifi_box: &WifiBox) -> Rc<Self> {
let entry: Rc<SavedWifiEntry> = Rc::new(Object::builder().build());
entry.set_activatable(false);
let entry_imp = entry.imp();
@ -43,21 +46,18 @@ impl SavedWifiEntry {
edit_button.connect_clicked(
clone!(@ weak entry_imp, @ weak wifi_box => 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));
let _option = get_connection_settings(entry_imp.reset_connection_path.borrow().clone());
wifi_box.reset_wifi_navigation.push(&*WifiOptions::new(_option, entry_imp.reset_connection_path.borrow().clone()));
}),
);
delete_button.connect_clicked(
clone!(@weak entry as entry => move |_| {
delete_connection(entry.imp().reset_connection_path.take());
let entry_ref = entry.clone();
delete_button.connect_clicked(clone!(@weak wifi_box => move |_| {
delete_connection(entry_ref.imp().reset_connection_path.take());
// TODO handle error
let parent = entry.parent().unwrap();
parent.set_visible(false);
parent.unparent();
}),
);
wifi_box.reset_stored_wifi_list.remove(&*entry_ref);
}));
entry
}
}

View file

@ -6,7 +6,7 @@ use std::cell::RefCell;
use dbus::Path;
use gtk::subclass::prelude::*;
use gtk::{glib, Button, CompositeTemplate, Label};
use gtk::{glib, CompositeTemplate};
use super::saved_wifi_entry;

View file

@ -178,7 +178,7 @@ pub fn show_stored_connections(wifi_box: Arc<WifiBox>) {
let name =
&String::from_utf8(connection.1).unwrap_or_else(|_| String::from(""));
let entry = SavedWifiEntry::new(name, connection.0, self_imp);
self_imp.reset_stored_wifi_list.add(&entry);
self_imp.reset_stored_wifi_list.add(&*entry);
}
});
});

View file

@ -99,7 +99,7 @@ impl WifiEntry {
let self_imp = self.imp();
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()));
wifi_box.reset_wifi_navigation.push(&*WifiOptions::new(_option, self_imp.access_point.borrow().associated_connection.clone()));
}));
}
}

View file

@ -12,7 +12,7 @@ use dbus::arg::PropMap;
use dbus::{Error, Path};
use glib::{clone, PropertySet};
use gtk::prelude::{ButtonExt, EditableExt, WidgetExt};
use re_set_lib::network::connection::{Connection, DNSMethod4, DNSMethod6, Enum, TypeSettings};
use re_set_lib::network::connection::{Connection, DNSMethod4, DNSMethod6, Enum, KeyManagement, TypeSettings};
use IpProtocol::{IPv4, IPv6};
use crate::components::wifi::utils::IpProtocol;
@ -30,11 +30,11 @@ unsafe impl Send for WifiOptions {}
unsafe impl Sync for WifiOptions {}
impl WifiOptions {
pub fn new(connection: Connection, access_point: Path<'static>) -> Arc<Self> {
pub fn new(connection: Connection, connection_path: Path<'static>) -> Arc<Self> {
let wifi_option: Arc<WifiOptions> = Arc::new(Object::builder().build());
wifi_option.imp().connection.set(connection);
wifi_option.initialize_ui();
setup_callbacks(&wifi_option, access_point);
setup_callbacks(&wifi_option, connection_path);
wifi_option
}
@ -59,7 +59,7 @@ impl WifiOptions {
.reset_wifi_metered
.set_active(conn.settings.metered != -1);
match &conn.device {
TypeSettings::WIFI(wifi) => {
TypeSettings::WIFI(wifi, _) => {
self_imp.reset_wifi_link_speed.set_visible(false);
self_imp.reset_wifi_ip4_addr.set_visible(false);
self_imp.reset_wifi_ip6_addr.set_visible(false);
@ -93,27 +93,26 @@ impl WifiOptions {
// IPv4
self_imp
.reset_ip4_method
.set_selected(conn.ipv4.dns_method.to_i32() as u32);
self.set_ip4_visibility(conn.ipv4.dns_method.to_i32() as u32);
.set_selected(conn.ipv4.method.to_i32() as u32);
self.set_ip4_visibility(conn.ipv4.method.to_i32() as u32);
let ipv4_dns: Vec<String> = conn
let ipv4_dns: Vec<Ipv4Addr> = conn
.ipv4
.dns
.iter()
.map(|addr| {
addr.iter()
.map(|octet| octet.to_string())
.collect::<Vec<String>>()
.join(".")
})
.map(|addr| Ipv4Addr::from(*addr))
.collect();
self_imp.reset_ip4_dns.set_text(&ipv4_dns.join(", "));
self_imp.reset_ip4_dns.set_text(&ipv4_dns.iter()
.map(|ip| ip.to_string())
.collect::<Vec<String>>()
.join(", "));
self_imp.reset_ip4_gateway.set_text(&conn.ipv4.gateway);
// IPv6
self_imp
.reset_ip6_method
.set_selected(conn.ipv6.dns_method.to_i32() as u32);
self.set_ip6_visibility(conn.ipv6.dns_method.to_i32() as u32);
.set_selected(conn.ipv6.method.to_i32() as u32);
self.set_ip6_visibility(conn.ipv6.method.to_i32() as u32);
let ipv6_dns: Vec<String> = conn
.ipv6
@ -126,23 +125,24 @@ impl WifiOptions {
.join(":")
})
.collect();
self_imp.reset_ip6_dns.set_text(&ipv6_dns.join(", "));
self_imp.reset_ip6_gateway.set_text(&conn.ipv6.gateway);
// Security
if let TypeSettings::WIFI(wifi) = &conn.device {
match wifi.security_settings.key_management.as_str() {
"none" => {
if let TypeSettings::WIFI(_, wifi_security) = &conn.device {
match wifi_security.key_management {
KeyManagement::NONE => {
self_imp.reset_wifi_security_dropdown.set_selected(0);
self_imp.reset_wifi_password.set_visible(false);
self_imp.reset_wifi_password.set_text("");
}
"wpa-psk" => {
KeyManagement::WPAPSK => {
self_imp.reset_wifi_security_dropdown.set_selected(1);
self_imp.reset_wifi_password.set_visible(true);
self_imp
.reset_wifi_password
.set_text(&wifi.security_settings.psk);
.set_text(&wifi_security.psk);
}
_ => {}
}
@ -242,6 +242,7 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
imp.wifi_options_apply_button
.connect_clicked(clone!(@weak imp => move |_| {
let prop = imp.connection.borrow().convert_to_propmap();
dbg!(&prop);
set_connection_settings(path.clone(), prop);
}));
// IPv4
@ -250,7 +251,7 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
.connect_selected_notify(clone!(@weak imp => move |dropdown| {
let selected = dropdown.selected();
let mut conn = imp.connection.borrow_mut();
conn.ipv4.dns_method = DNSMethod4::from_i32(selected as i32);
conn.ipv4.method = DNSMethod4::from_i32(selected as i32);
wifi_options_ip4.set_ip4_visibility(selected);
}));
@ -266,7 +267,7 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
for dns_entry in dns_input.as_str().split(',').map(|s| s.trim()) {
if let Ok(addr) = Ipv4Addr::from_str(dns_entry) {
imp.reset_ip4_dns.remove_css_class("error");
conn.ipv4.dns.push(addr.octets().to_vec());
conn.ipv4.dns.push(u32::from_be_bytes(addr.octets()));
} else {
imp.reset_ip4_dns.add_css_class("error");
}
@ -274,7 +275,7 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
}));
imp.reset_ip4_address_add_button
.connect_clicked(clone!(@weak imp => move |_| {
let address = &WifiAddressEntry::new(None, imp.connection.clone(), IpProtocol::IPv4);
let address = &WifiAddressEntry::new(None, imp.connection.clone(), IPv4);
imp.reset_ip4_address_group.add(address);
}));
@ -300,7 +301,7 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
.connect_selected_notify(clone!(@weak imp => move |dropdown| {
let selected = dropdown.selected();
let mut conn = imp.connection.borrow_mut();
conn.ipv6.dns_method = DNSMethod6::from_i32(selected as i32);
conn.ipv6.method = DNSMethod6::from_i32(selected as i32);
wifi_options_ip6.set_ip6_visibility(selected);
}));
@ -324,7 +325,7 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
}));
imp.reset_ip6_address_add_button
.connect_clicked(clone!(@weak imp => move |_| {
let address = &WifiAddressEntry::new(None, imp.connection.clone(), IpProtocol::IPv4);
let address = &WifiAddressEntry::new(None, imp.connection.clone(), IPv4);
imp.reset_ip6_address_group.add(address);
}));
@ -352,15 +353,15 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
let mut conn = imp.connection.borrow_mut();
match (selected, &mut conn.device) {
(0 , TypeSettings::WIFI(wifi)) => { // None
(0 , TypeSettings::WIFI(_, wifi_security)) => { // None
imp.reset_wifi_password.set_visible(false);
wifi.security_settings.key_management = String::from("none");
wifi.security_settings.authentication_algorithm = String::from("open");
wifi_security.key_management = KeyManagement::NONE;
wifi_security.authentication_algorithm = String::from("none");
},
(1 , TypeSettings::WIFI(wifi)) => { // WPA/WPA2 Personal
(1 , TypeSettings::WIFI(_, wifi_security)) => { // WPA/WPA2 Personal
imp.reset_wifi_password.set_visible(true);
wifi.security_settings.key_management = String::from("wpa-psk");
wifi.security_settings.authentication_algorithm = String::from("");
wifi_security.key_management = KeyManagement::WPAPSK;
wifi_security.authentication_algorithm = String::from("none");
},
(_, _) => {}
}
@ -370,8 +371,8 @@ fn setup_callbacks(wifi_options: &Arc<WifiOptions>, path: Path<'static>) {
.connect_changed(clone!(@weak imp => move |entry| {
let password_input = entry.text();
let mut conn = imp.connection.borrow_mut();
if let TypeSettings::WIFI(wifi) = &mut conn.device {
wifi.security_settings.psk = password_input.to_string();
if let TypeSettings::WIFI(_, wifi_security) = &mut conn.device {
wifi_security.psk = password_input.to_string();
}
}));
}

View file

@ -97,11 +97,6 @@
</child>
</object>
</child>
<child>
<object class="GtkProgressBar" id="reset_volume_meter">
<property name="margin-top">5</property>
</object>
</child>
</object>
</child>
<child>

View file

@ -97,11 +97,6 @@
</child>
</object>
</child>
<child>
<object class="GtkProgressBar" id="reset_volume_meter">
<property name="margin-top">5</property>
</object>
</child>
</object>
</child>
<child>

View file

@ -91,33 +91,16 @@
<object class="GtkBox">
<property name="orientation">vertical</property>
<child>
<object class="GtkListBox">
<property name="css-classes">boxed-list</property>
<property name="margin-bottom">10</property>
<property name="margin-end">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<property name="show-separators">True</property>
<property name="valign">start</property>
<object class="AdwPreferencesGroup">
<child>
<object class="resetListBoxRow" id="reset_bluetooth_main_tab">
<object class="AdwActionRow" id="reset_bluetooth_main_tab">
<property name="title">Available Networks</property>
<child>
<object class="GtkBox">
<property name="height-request">40</property>
<child>
<object class="GtkLabel">
<property name="label">Main</property>
<property name="margin-start">5</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">go-previous-symbolic</property>
<property name="margin-end">5</property>
</object>
</child>
<object class="GtkImage">
<property name="halign">end</property>
<property name="hexpand">True</property>
<property name="icon-name">go-previous-symbolic</property>
<property name="margin-end">5</property>
</object>
</child>
</object>
@ -125,46 +108,18 @@
</object>
</child>
<child>
<object class="GtkLabel">
<property name="halign">start</property>
<property name="label">Visibility Settings</property>
<property name="margin-start">5</property>
</object>
</child>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<object class="AdwPreferencesGroup">
<property name="title">Visibility Settings</property>
<child>
<object class="GtkLabel">
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="hexpand-set">True</property>
<property name="label">Pairable</property>
<object class="AdwSwitchRow" id="reset_bluetooth_pairable_switch">
<property name="title">Pairable</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="reset_bluetooth_pairable_switch"/>
</child>
</object>
</child>
<child>
<object class="GtkBox">
<property name="margin-bottom">5</property>
<property name="margin-start">5</property>
<property name="margin-top">5</property>
<child>
<object class="GtkLabel">
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="hexpand-set">True</property>
<property name="label">Discoverable</property>
<object class="AdwSwitchRow" id="reset_bluetooth_discoverable_switch">
<property name="title">Discoverable</property>
</object>
</child>
<child>
<object class="GtkSwitch" id="reset_bluetooth_discoverable_switch"/>
</child>
</object>
</child>
</object>

View file

@ -59,11 +59,6 @@
</child>
</object>
</child>
<child>
<object class="GtkProgressBar" id="reset_volume_meter">
<property name="margin-top">5</property>
</object>
</child>
</object>
</property>
<property name="css-classes">audioRow

View file

@ -58,11 +58,6 @@
</child>
</object>
</child>
<child>
<object class="GtkProgressBar" id="reset_volume_meter">
<property name="margin-top">5</property>
</object>
</child>
</object>
</property>
<property name="css-classes">audioRow

View file

@ -60,11 +60,6 @@
</child>
</object>
</child>
<child>
<object class="GtkProgressBar" id="reset_volume_meter">
<property name="margin-top">5</property>
</object>
</child>
</object>
</property>
<property name="css-classes">audioRow

View file

@ -60,11 +60,6 @@
</child>
</object>
</child>
<child>
<object class="GtkProgressBar" id="reset_volume_meter">
<property name="margin-top">5</property>
</object>
</child>
</object>
</property>
<property name="css-classes">audioRow

View file

@ -21,8 +21,7 @@
(20,None,None,"resetCardEntry.ui",None,None,None,None,None,None,None),
(21,1,None,"resetWifiOptions.ui",None,None,None,None,None,None,None),
(22,1,None,"resetWifiAddressEntry.ui",None,None,None,None,None,None,None),
(23,1,None,"resetWifiRouteEntry.ui",None,None,None,None,None,None,None),
(25,None,None,None,None,None,None,None,None,None,None)
(23,1,None,"resetWifiRouteEntry.ui",None,None,None,None,None,None,None)
</ui>
<ui_library>
(21,"gtk","4.12",None),
@ -85,7 +84,6 @@
(7,20,"GtkScale","reset_volume_slider",18,None,None,None,1,None),
(7,21,"GtkAdjustment",None,20,None,None,None,None,None),
(7,22,"GtkLabel","reset_volume_percentage",18,None,None,None,2,None),
(7,23,"GtkProgressBar","reset_volume_meter",17,None,None,None,1,None),
(7,24,"GtkSeparator",None,14,None,None,None,-1,None),
(8,1,"GtkBox","resetAudioOutput",None,None,None,None,None,None),
(8,53,"GtkLabel",None,1,None,None,None,None,None),
@ -104,7 +102,6 @@
(8,98,"GtkButton","reset_sink_mute",97,None,None,None,None,None),
(8,99,"GtkScale","reset_volume_slider",97,None,None,None,1,None),
(8,101,"GtkLabel","reset_volume_percentage",97,None,None,None,2,None),
(8,102,"GtkProgressBar","reset_volume_meter",93,None,None,None,1,None),
(8,103,"GtkSeparator",None,56,None,None,None,3,None),
(8,115,"GtkAdjustment",None,99,None,None,None,-1,None),
(8,116,"AdwNavigationPage",None,54,None,None,None,2,None),
@ -132,25 +129,19 @@
(10,143,"GtkLabel",None,142,None,None,None,None,None),
(10,144,"GtkSwitch","reset_bluetooth_switch",142,None,None,None,1,None),
(10,153,"GtkBox",None,138,None,None,None,None,None),
(10,154,"GtkListBox",None,153,None,None,None,None,None),
(10,155,"resetListBoxRow","reset_bluetooth_main_tab",154,None,None,None,1,None),
(10,156,"GtkBox",None,155,None,None,None,None,None),
(10,157,"GtkLabel",None,156,None,None,None,None,None),
(10,158,"GtkImage",None,156,None,None,None,1,None),
(10,159,"GtkLabel",None,153,None,None,None,1,None),
(10,172,"AdwPreferencesGroup","reset_bluetooth_details",121,None,None,None,None,None),
(10,173,"AdwComboRow","reset_bluetooth_adapter",172,None,None,None,None,None),
(10,174,"AdwActionRow","reset_visibility",172,None,None,None,1,None),
(10,175,"GtkImage",None,174,None,None,None,None,None),
(10,188,"GtkBox",None,153,None,None,None,4,None),
(10,193,"GtkLabel",None,188,None,None,None,None,None),
(10,196,"GtkSwitch","reset_bluetooth_discoverable_switch",188,None,None,None,1,None),
(10,197,"GtkBox",None,153,None,None,None,3,None),
(10,198,"GtkLabel",None,197,None,None,None,None,None),
(10,199,"GtkSwitch","reset_bluetooth_pairable_switch",197,None,None,None,1,None),
(10,204,"AdwPreferencesGroup","reset_bluetooth_available_devices",121,None,None,None,1,None),
(10,206,"AdwPreferencesGroup","reset_bluetooth_connected_devices",121,None,None,None,2,None),
(10,207,"GtkButton","reset_bluetooth_refresh_button",204,None,None,None,-1,None),
(10,208,"AdwPreferencesGroup",None,153,None,None,None,None,None),
(10,209,"AdwPreferencesGroup",None,153,None,None,None,1,None),
(10,210,"AdwSwitchRow","reset_bluetooth_pairable_switch",209,None,None,None,-1,None),
(10,211,"AdwSwitchRow","reset_bluetooth_discoverable_switch",209,None,None,None,-1,None),
(10,212,"AdwActionRow","reset_bluetooth_main_tab",208,None,None,None,None,None),
(10,213,"GtkImage",None,212,None,None,None,None,None),
(11,1,"AdwActionRow","resetBluetoothEntry",None,None,None,None,None,None),
(12,11,"GtkBox","resetAudioInput",None,None,None,None,None,None),
(12,12,"GtkLabel",None,11,None,None,None,None,None),
@ -162,7 +153,6 @@
(12,24,"GtkButton","reset_source_mute",23,None,None,None,None,None),
(12,25,"GtkScale","reset_volume_slider",23,None,None,None,1,None),
(12,27,"GtkLabel","reset_volume_percentage",23,None,None,None,2,None),
(12,28,"GtkProgressBar","reset_volume_meter",22,None,None,None,1,None),
(12,29,"GtkSeparator",None,15,None,None,None,3,None),
(12,30,"GtkBox","reset_output_streams",15,None,None,None,4,None),
(12,31,"GtkLabel",None,30,None,None,None,None,None),
@ -196,7 +186,6 @@
(13,38,"GtkScale","reset_volume_slider",36,None,None,None,1,None),
(13,39,"GtkAdjustment",None,38,None,None,None,None,None),
(13,40,"GtkLabel","reset_volume_percentage",36,None,None,None,2,None),
(13,41,"GtkProgressBar","reset_volume_meter",27,None,None,None,1,None),
(13,42,"GtkSeparator",None,22,None,None,None,-1,None),
(14,3,"GtkBox","resetSettingBox",None,None,None,None,-1,None),
(15,1,"GtkListBoxRow","resetListBoxRow",None,None,None,None,None,None),
@ -217,7 +206,6 @@
(18,20,"GtkScale","reset_volume_slider",18,None,None,None,1,None),
(18,21,"GtkAdjustment",None,20,None,None,None,None,None),
(18,22,"GtkLabel","reset_volume_percentage",18,None,None,None,2,None),
(18,23,"GtkProgressBar","reset_volume_meter",17,None,None,None,1,None),
(18,24,"GtkSeparator",None,13,None,None,None,2,None),
(19,13,"AdwPreferencesGroup","resetSourceEntry",None,None,None,None,None,None),
(19,14,"AdwActionRow","reset_source_name",13,None,None,None,None,None),
@ -229,7 +217,6 @@
(19,20,"GtkScale","reset_volume_slider",18,None,None,None,1,None),
(19,21,"GtkAdjustment",None,20,None,None,None,None,None),
(19,22,"GtkLabel","reset_volume_percentage",18,None,None,None,2,None),
(19,23,"GtkProgressBar","reset_volume_meter",17,None,None,None,1,None),
(19,24,"GtkSeparator",None,13,None,None,None,2,None),
(20,2,"AdwComboRow","reset_card_entry",None,None,None,None,None,None),
(21,1,"AdwNavigationPage","resetWifiOptions",None,None,None,None,-1,None),
@ -297,11 +284,7 @@
(23,8,"AdwEntryRow","reset_route_metric",6,None,None,None,1,None),
(23,9,"GtkBox",None,2,None,None,None,None,None),
(23,10,"AdwEntryRow","reset_route_address",9,None,None,None,None,None),
(23,11,"AdwEntryRow","reset_route_prefix",9,None,None,None,1,None),
(25,1,"GtkBox",None,None,None,None,None,None,None),
(25,2,"GtkLabel","reset_saved_wifi_label",1,None,None,None,None,None),
(25,3,"GtkButton","reset_edit_saved_wifi_button",1,None,None,None,1,None),
(25,4,"GtkButton","reset_delete_saved_wifi_button",1,None,None,None,2,None)
(23,11,"AdwEntryRow","reset_route_prefix",9,None,None,None,1,None)
</object>
<object_property>
(3,1,"GtkWidget","height-request","200",None,None,None,None,None,None,None,None,None),
@ -422,7 +405,6 @@
(7,22,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(7,22,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(7,22,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(7,23,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(7,24,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(8,1,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(8,1,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
@ -463,7 +445,6 @@
(8,101,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(8,101,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(8,101,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(8,102,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(8,115,"GtkAdjustment","page-increment","2005.4016",None,None,None,None,None,None,None,None,None),
(8,115,"GtkAdjustment","step-increment","2005.4016",None,None,None,None,None,None,None,None,None),
(8,115,"GtkAdjustment","upper","100270.08",None,None,None,None,None,None,None,None,None),
@ -504,43 +485,12 @@
(10,144,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(10,144,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(10,153,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(10,154,"GtkListBox","show-separators","True",None,None,None,None,None,None,None,None,None),
(10,154,"GtkWidget","css-classes","boxed-list",None,None,None,None,None,None,None,None,None),
(10,154,"GtkWidget","margin-bottom","10",None,None,None,None,None,None,None,None,None),
(10,154,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(10,154,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,154,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(10,154,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
(10,156,"GtkWidget","height-request","40",None,None,None,None,None,None,None,None,None),
(10,157,"GtkLabel","label","Main",None,None,None,None,None,None,None,None,None),
(10,157,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,158,"GtkImage","icon-name","go-previous-symbolic",None,None,None,None,None,None,None,None,None),
(10,158,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(10,158,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(10,158,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(10,159,"GtkLabel","label","Visibility Settings",None,None,None,None,None,None,None,None,None),
(10,159,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(10,159,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,173,"AdwPreferencesRow","title","Bluetooth Adapter",None,None,None,None,None,None,None,None,None),
(10,174,"AdwPreferencesRow","title","Visibility Settings",None,None,None,None,None,None,None,None,None),
(10,175,"GtkImage","icon-name","go-previous-symbolic-rtl",None,None,None,None,None,None,None,None,None),
(10,175,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(10,175,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(10,175,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(10,188,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(10,188,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,188,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(10,193,"GtkLabel","label","Discoverable",None,None,None,None,None,None,None,None,None),
(10,193,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(10,193,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(10,193,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None),
(10,197,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(10,197,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,197,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(10,198,"GtkLabel","label","Pairable",None,None,None,None,None,None,None,None,None),
(10,198,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(10,198,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(10,198,"GtkWidget","hexpand-set","True",None,None,None,None,None,None,None,None,None),
(10,204,"AdwPreferencesGroup","header-suffix",None,None,None,None,None,207,None,None,None,None),
(10,204,"AdwPreferencesGroup","title","Available Devices",None,None,None,None,None,None,None,None,None),
(10,204,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
@ -551,6 +501,14 @@
(10,206,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(10,206,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(10,207,"GtkButton","icon-name","view-refresh-symbolic",None,None,None,None,None,None,None,None,None),
(10,209,"AdwPreferencesGroup","title","Visibility Settings",None,None,None,None,None,None,None,None,None),
(10,210,"AdwPreferencesRow","title","Pairable",None,None,None,None,None,None,None,None,None),
(10,211,"AdwPreferencesRow","title","Discoverable",None,None,None,None,None,None,None,None,None),
(10,212,"AdwPreferencesRow","title","Available Networks",None,None,None,None,None,None,None,None,None),
(10,213,"GtkImage","icon-name","go-previous-symbolic",None,None,None,None,None,None,None,None,None),
(10,213,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(10,213,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(10,213,"GtkWidget","margin-end","5",None,None,None,None,None,None,None,None,None),
(11,1,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
(11,32,"GtkListBoxRow","child",None,None,None,None,None,39,None,None,None,None),
(11,32,"GtkWidget","margin-start","5",None,None,None,None,None,None,None,None,None),
@ -620,7 +578,6 @@
(12,27,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(12,27,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(12,27,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(12,28,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(12,30,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(12,30,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(12,31,"GtkLabel","label","Input Streams",None,None,None,None,None,None,None,None,None),
@ -678,7 +635,6 @@
(13,40,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(13,40,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(13,40,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(13,41,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(13,42,"GtkWidget","margin-top","10",None,None,None,None,None,None,None,None,None),
(14,3,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None),
(14,3,"GtkWidget","css-classes","settings-box",None,None,None,None,None,None,None,None,None),
@ -725,7 +681,6 @@
(18,22,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(18,22,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(18,22,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(18,23,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(18,24,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(18,24,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(19,14,"AdwActionRow","title-lines","3",None,None,None,None,None,None,None,None,None),
@ -752,7 +707,6 @@
(19,22,"GtkLabel","label","100%",None,None,None,None,None,None,None,None,None),
(19,22,"GtkLabel","lines","1",None,None,None,None,None,None,None,None,None),
(19,22,"GtkWidget","width-request","40",None,None,None,None,None,None,None,None,None),
(19,23,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(19,24,"GtkWidget","margin-bottom","5",None,None,None,None,None,None,None,None,None),
(19,24,"GtkWidget","margin-top","5",None,None,None,None,None,None,None,None,None),
(20,2,"AdwComboRow","use-subtitle","True",None,None,None,None,None,None,None,None,None),
@ -850,22 +804,7 @@
(23,10,"AdwPreferencesRow","title","Address",None,None,None,None,None,None,None,None,None),
(23,10,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(23,11,"AdwPreferencesRow","title","Prefix",None,None,None,None,None,None,None,None,None),
(23,11,"GtkEditable","max-width-chars","5",None,None,None,None,None,None,None,None,None),
(25,2,"GtkLabel","ellipsize","end",None,None,None,None,None,None,None,None,None),
(25,2,"GtkLabel","label","LoremIpsumInternet",None,None,None,None,None,None,None,None,None),
(25,2,"GtkLabel","single-line-mode","True",None,None,None,None,None,None,None,None,None),
(25,2,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None),
(25,2,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(25,2,"GtkWidget","margin-end","10",None,None,None,None,None,None,None,None,None),
(25,2,"GtkWidget","width-request","200",None,None,None,None,None,None,None,None,None),
(25,3,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(25,3,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None),
(25,3,"GtkWidget","halign","end",None,None,None,None,None,None,None,None,None),
(25,3,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
(25,4,"GtkButton","has-frame","False",None,None,None,None,None,None,None,None,None),
(25,4,"GtkButton","icon-name","user-trash-symbolic",None,None,None,None,None,None,None,None,None),
(25,4,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None),
(25,4,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None)
(23,11,"GtkEditable","max-width-chars","5",None,None,None,None,None,None,None,None,None)
</object_property>
<object_data>
(3,42,"GtkWidget",1,1,None,None,None,None,None,None),