Skip to content

Commit

Permalink
Remove regex for keyboard layout matching with variant matching
Browse files Browse the repository at this point in the history
  • Loading branch information
takotori committed Jun 5, 2024
1 parent e93ae61 commit 161cd2c
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 26 deletions.
1 change: 0 additions & 1 deletion 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 @@ -17,5 +17,4 @@ gdk4 = "0.8.1"
dbus-crossroads = "0.5.2"
directories-next = "2.0.0"
toml = "0.8.12"
xkbregistry = "0.1.1"
regex = "1.10.4"
xkbregistry = "0.1.1"
45 changes: 22 additions & 23 deletions keyboard_plugin/src/backend/gnome.rs
Original file line number Diff line number Diff line change
@@ -1,34 +1,33 @@
use glib::Variant;
use glib::{Variant, VariantType};
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 input_sources = gtk::gio::Settings::new("org.gnome.desktop.input-sources");
let layouts = input_sources.value("sources").to_string();
let layout_variant = input_sources.value("sources");
if layout_variant.type_() != VariantType::new("a(ss)").unwrap() {
return kb;
}

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];
let kb_layout: Vec<&KeyboardLayout>;
if layout.contains("+") {
let kb_data: Vec<&str> = layout.split("+").collect();
kb_layout = all_keyboards.iter()
.filter(|x| x.name == kb_data[0].trim())
.filter(|x| x.variant.as_ref().unwrap_or(&String::new()) == kb_data[1].trim())
.collect();
} else {
kb_layout = all_keyboards.iter()
.filter(|x| x.name == layout.trim())
.filter(|x| x.variant.is_none())
.collect();
}
if let Some(option) = kb_layout.first() {
kb.push((*option).clone());
}
let layouts = layout_variant.get::<Vec<(String, String)>>().unwrap();
for layout in layouts {
let kb_layout: Vec<&KeyboardLayout>;
if layout.1.contains("+") {
let kb_data: Vec<&str> = layout.1.split("+").collect();
kb_layout = all_keyboards.iter()
.filter(|x| x.name == kb_data[0])
.filter(|x| x.variant.as_ref().unwrap_or(&String::new()) == kb_data[1].trim())
.collect();
} else {
kb_layout = all_keyboards.iter()
.filter(|x| x.name == layout.1.trim())
.filter(|x| x.variant.is_none())
.collect();
}
if let Some(option) = kb_layout.first() {
kb.push((*option).clone());
}
}
kb
Expand Down

0 comments on commit 161cd2c

Please sign in to comment.