From 161cd2c9da22ba541768531c6a58f6b572c09de9 Mon Sep 17 00:00:00 2001 From: takotori Date: Wed, 5 Jun 2024 16:47:58 +0200 Subject: [PATCH] Remove regex for keyboard layout matching with variant matching --- keyboard_plugin/Cargo.lock | 1 - keyboard_plugin/Cargo.toml | 3 +- keyboard_plugin/src/backend/gnome.rs | 45 ++++++++++++++-------------- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/keyboard_plugin/Cargo.lock b/keyboard_plugin/Cargo.lock index 3dfbc33..76ab0a9 100644 --- a/keyboard_plugin/Cargo.lock +++ b/keyboard_plugin/Cargo.lock @@ -932,7 +932,6 @@ dependencies = [ "gtk4", "libadwaita", "re_set-lib", - "regex", "toml", "xkbregistry", ] diff --git a/keyboard_plugin/Cargo.toml b/keyboard_plugin/Cargo.toml index 74f61a1..b7a784e 100644 --- a/keyboard_plugin/Cargo.toml +++ b/keyboard_plugin/Cargo.toml @@ -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" \ No newline at end of file diff --git a/keyboard_plugin/src/backend/gnome.rs b/keyboard_plugin/src/backend/gnome.rs index 5a8ed16..2e12777 100644 --- a/keyboard_plugin/src/backend/gnome.rs +++ b/keyboard_plugin/src/backend/gnome.rs @@ -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) -> Vec { 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::>().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