diff --git a/keyboard_plugin/Cargo.lock b/keyboard_plugin/Cargo.lock index 3af9a27..3dfbc33 100644 --- a/keyboard_plugin/Cargo.lock +++ b/keyboard_plugin/Cargo.lock @@ -131,12 +131,6 @@ dependencies = [ "dbus", ] -[[package]] -name = "dconf_rs" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b" - [[package]] name = "directories-next" version = "2.0.0" @@ -862,9 +856,9 @@ dependencies = [ [[package]] name = "re_set-lib" -version = "5.2.1" +version = "5.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fb110dc5087cdb0d8df799c3855c13e4ecb41f987e9691bf3d101c2dad1b3a" +checksum = "77b4e5846cc4e5f6c51b60b16c2d51f282b5c407238b2e7077f6a0352b65d6cf" dependencies = [ "dbus", "dbus-crossroads", @@ -932,7 +926,6 @@ version = "1.0.0" dependencies = [ "dbus", "dbus-crossroads", - "dconf_rs", "directories-next", "gdk4", "glib", @@ -1137,14 +1130,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.13" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" +checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.13", + "toml_edit 0.22.14", ] [[package]] @@ -1169,15 +1162,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.13" +version = "0.22.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" +checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.9", + "winnow 0.6.10", ] [[package]] @@ -1316,9 +1309,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.9" +version = "0.6.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86c949fede1d13936a99f14fafd3e76fd642b556dd2ce96287fbe2e0151bfac6" +checksum = "f217b6745021054125ef5741032a021a9c65f82bee2a8017cca928f1e3179991" dependencies = [ "memchr", ] diff --git a/keyboard_plugin/Cargo.toml b/keyboard_plugin/Cargo.toml index 55422b1..74f61a1 100644 --- a/keyboard_plugin/Cargo.toml +++ b/keyboard_plugin/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" crate-type = ["dylib"] [dependencies] -re_set-lib = "5.2.1" +re_set-lib = "5.2.2" # re_set-lib = { git = "https://github.com/Xetibo/ReSet-Lib" } gtk = { version = "0.8.1", package = "gtk4", features = ["v4_12"] } adw = { version = "0.6.0", package = "libadwaita", features = ["v1_4"] } @@ -18,5 +18,4 @@ dbus-crossroads = "0.5.2" directories-next = "2.0.0" toml = "0.8.12" xkbregistry = "0.1.1" -dconf_rs = "0.3.0" regex = "1.10.4" diff --git a/keyboard_plugin/src/backend/gnome.rs b/keyboard_plugin/src/backend/gnome.rs index 4ce32fc..5a8ed16 100644 --- a/keyboard_plugin/src/backend/gnome.rs +++ b/keyboard_plugin/src/backend/gnome.rs @@ -1,14 +1,15 @@ -use std::process::Command; - +use glib::Variant; +use gtk::prelude::{SettingsExt, SettingsExtManual}; use regex::Regex; use crate::keyboard_layout::KeyboardLayout; pub fn get_saved_layouts_gnome(all_keyboards: &Vec) -> Vec { let mut kb = vec![]; - let result = dconf_rs::get_string("/org/gnome/desktop/input-sources/sources"); + let input_sources = gtk::gio::Settings::new("org.gnome.desktop.input-sources"); + let layouts = input_sources.value("sources").to_string(); - if let Ok(layouts) = result { + if !layouts.is_empty() { let pattern = Regex::new(r"[a-zA-Z0-9_+-]+").unwrap(); for layout in pattern.captures_iter(layouts.as_str()) { let layout = &layout[0]; @@ -36,22 +37,14 @@ pub fn get_saved_layouts_gnome(all_keyboards: &Vec) -> Vec) { let mut all_layouts = vec![]; for x in layouts { - let mut layout_string = format!("('xkb', '{}", x.name.clone()); - if let Some(var) = x.variant { - layout_string += &format!("+{}", var); + let mut option = x.variant.unwrap_or(String::new()); + if !option.is_empty() { + option = "+".to_string() + &option; } - layout_string += "')"; - all_layouts.push(layout_string); + all_layouts.push(("xkb", x.name.clone() + &option)); } - let mut all_layouts = all_layouts.join(", "); - all_layouts.insert_str(0, "["); - all_layouts.push_str("]"); - - Command::new("dconf") - .arg("write") - .arg("/org/gnome/desktop/input-sources/sources") - .arg(all_layouts) - .status() - .expect("failed to execute command"); + let variant = Variant::from(all_layouts); + let input_sources = gtk::gio::Settings::new("org.gnome.desktop.input-sources"); + input_sources.set("sources", variant).expect("failed to write layouts"); } diff --git a/keyboard_plugin/src/frontend/add_layout_page.rs b/keyboard_plugin/src/frontend/add_layout_page.rs index 72e326f..4890f10 100644 --- a/keyboard_plugin/src/frontend/add_layout_page.rs +++ b/keyboard_plugin/src/frontend/add_layout_page.rs @@ -1,10 +1,10 @@ use std::collections::HashMap; -use adw::{ActionRow, NavigationPage, NavigationView}; -use adw::prelude::{ActionRowExt, PreferencesRowExt}; +use adw::{ActionRow, NavigationPage, NavigationView, PreferencesGroup}; +use adw::prelude::{ActionRowExt, PreferencesGroupExt, PreferencesRowExt}; use glib::{clone, SignalHandlerId, Variant}; use glib::translate::FromGlib; -use gtk::{Button, GestureClick, Image, Label, ListBox, Orientation, ScrolledWindow, SearchEntry}; +use gtk::{Button, GestureClick, Image, ListBox, Orientation, ScrolledWindow, SearchEntry}; use gtk::prelude::*; use crate::frontend::get_keyboard_list_frontend; @@ -20,6 +20,20 @@ pub fn create_add_keyboard_page(nav_view: &NavigationView) { .build(); nav_view.add(&add_keyboard_page); + let back_group = PreferencesGroup::builder() + .margin_bottom(10) + .build(); + + let back_button = ActionRow::builder() + .title("Back") + .activatable(true) + .action_name("navigation.pop") + + .build(); + back_button.add_suffix(&Image::from_icon_name("go-previous-symbolic")); + back_group.add(&back_button); + add_keyboard_page_box.append(&back_group); + let search_box = gtk::Box::new(Orientation::Horizontal, 5); add_keyboard_page_box.append(&search_box); diff --git a/keyboard_plugin/src/lib.rs b/keyboard_plugin/src/lib.rs index b4636cb..257a54f 100644 --- a/keyboard_plugin/src/lib.rs +++ b/keyboard_plugin/src/lib.rs @@ -1,5 +1,3 @@ -use std::any::Any; - use adw::{NavigationPage, NavigationView}; use gtk::{Box, ListBox, Orientation}; use gtk::prelude::*;