Skip to content

Commit

Permalink
Replace dconf by built in gio settings
Browse files Browse the repository at this point in the history
Add back button in add keyboard layout screen
  • Loading branch information
takotori committed Jun 4, 2024
1 parent 6d8e2c7 commit 68ed49c
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 43 deletions.
27 changes: 10 additions & 17 deletions keyboard_plugin/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions keyboard_plugin/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"] }
Expand All @@ -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"
31 changes: 12 additions & 19 deletions keyboard_plugin/src/backend/gnome.rs
Original file line number Diff line number Diff line change
@@ -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<KeyboardLayout>) -> Vec<KeyboardLayout> {
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];
Expand Down Expand Up @@ -36,22 +37,14 @@ pub fn get_saved_layouts_gnome(all_keyboards: &Vec<KeyboardLayout>) -> Vec<Keybo
pub fn write_to_config_gnome(layouts: Vec<KeyboardLayout>) {
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");
}
20 changes: 17 additions & 3 deletions keyboard_plugin/src/frontend/add_layout_page.rs
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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);

Expand Down
2 changes: 0 additions & 2 deletions keyboard_plugin/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
use std::any::Any;

use adw::{NavigationPage, NavigationView};
use gtk::{Box, ListBox, Orientation};
use gtk::prelude::*;
Expand Down

0 comments on commit 68ed49c

Please sign in to comment.