From a44ec9440b79ef82b81f4c82ac8e1fc18e86731d Mon Sep 17 00:00:00 2001 From: takotori Date: Tue, 11 Jun 2024 12:25:32 +0200 Subject: [PATCH] use getenv to check if flatpak --- keyboard_plugin/src/backend/gnome.rs | 62 +++++++++++-------------- keyboard_plugin/src/backend/hyprland.rs | 2 +- keyboard_plugin/src/backend/kde.rs | 2 +- keyboard_plugin/src/backend/mod.rs | 20 ++++++-- 4 files changed, 45 insertions(+), 41 deletions(-) diff --git a/keyboard_plugin/src/backend/gnome.rs b/keyboard_plugin/src/backend/gnome.rs index 3615baf..19f391d 100644 --- a/keyboard_plugin/src/backend/gnome.rs +++ b/keyboard_plugin/src/backend/gnome.rs @@ -1,7 +1,6 @@ use std::process::Command; -use glib::{Variant, VariantTy}; -use gtk::prelude::SettingsExtManual; +use glib::{getenv, Variant, VariantTy}; #[cfg(debug_assertions)] use re_set_lib::{utils::macros::ErrorLevel, write_log_to_file}; use re_set_lib::ERROR; @@ -11,31 +10,32 @@ use crate::keyboard_layout::KeyboardLayout; pub fn get_saved_layouts_gnome(all_keyboards: &[KeyboardLayout]) -> Vec { let mut kb = vec![]; - let mut result = Command::new("dconf") - .args(&["read", "/org/gnome/desktop/input-sources/sources"]) - .output(); - if result.is_err() { - return kb; - } - let mut output = result.unwrap(); - let mut layout_variant = String::from_utf8(output.stdout).unwrap(); - - if layout_variant.contains("@a(ss)") { + let result; + if getenv("container").is_none() { + dbg!("not flatpak"); + result = Command::new("dconf") + .args(&["read", "/org/gnome/desktop/input-sources/sources"]) + .output(); + } else { + dbg!("flatpak"); result = Command::new("flatpak-spawn") .args(&["--host", "dconf", "read", "/org/gnome/desktop/input-sources/sources"]) .output(); - if result.is_err() { - return kb; - } - output = result.unwrap(); - layout_variant = String::from_utf8(output.stdout).unwrap(); } + if result.is_err() { + dbg!("result error"); + return kb; + } + let output = result.unwrap(); + let layout_variant = String::from_utf8(output.stdout).unwrap(); let layout_variant = Variant::parse(Some(&VariantTy::new("a(ss)").unwrap()), &layout_variant); if layout_variant.is_err() { + dbg!("couldnt parse layout variant"); return kb; } let layout_variant = layout_variant.unwrap(); + dbg!(&layout_variant); let layouts = layout_variant.get::>().unwrap(); for layout in layouts { let kb_layout: Vec<&KeyboardLayout> = if layout.1.contains("+") { @@ -59,11 +59,11 @@ pub fn get_saved_layouts_gnome(all_keyboards: &[KeyboardLayout]) -> Vec) { +pub fn write_to_config_gnome(layouts: &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 { + if let Some(var) = &x.variant { layout_string += &format!("+{}", var); } layout_string += "')"; @@ -74,27 +74,21 @@ pub fn write_to_config_gnome(layouts: Vec) { all_layouts.insert_str(0, "["); all_layouts.push_str("]"); - let result = Command::new("dconf") - .args(&["read", "/org/gnome/desktop/input-sources/sources"]) - .output(); - if result.is_err() { - return; - } - let output = result.unwrap(); - let layout_variant = String::from_utf8(output.stdout).unwrap(); - - if layout_variant.contains("@a(ss)") { - let result = Command::new("flatpak-spawn") - .args(&["--host", "dconf", "write", "/org/gnome/desktop/input-sources/sources", all_layouts.as_str()]) + if getenv("container").is_none() { + dbg!("not flatpak"); + let result = Command::new("dconf") + .args(&["write", "/org/gnome/desktop/input-sources/sources", all_layouts.as_str()]) .output(); if result.is_err() { ERROR!("Failed to write layouts", ErrorLevel::PartialBreakage); } - } else { - let result = Command::new("dconf") - .args(&["write", "/org/gnome/desktop/input-sources/sources", all_layouts.as_str()]) + } else { + dbg!("flatpak"); + let result = Command::new("flatpak-spawn") + .args(&["--host", "dconf", "write", "/org/gnome/desktop/input-sources/sources", all_layouts.as_str()]) .output(); if result.is_err() { + dbg!("Failed to write with flatpak"); ERROR!("Failed to write layouts", ErrorLevel::PartialBreakage); } } diff --git a/keyboard_plugin/src/backend/hyprland.rs b/keyboard_plugin/src/backend/hyprland.rs index c144980..1d9fe80 100644 --- a/keyboard_plugin/src/backend/hyprland.rs +++ b/keyboard_plugin/src/backend/hyprland.rs @@ -54,7 +54,7 @@ pub fn get_saved_layouts_hyprland(all_keyboards: &[KeyboardLayout]) -> Vec) { +pub fn write_to_config_hyprland(layouts: &Vec) { let path; #[allow(clippy::borrow_interior_mutable_const)] if let Some(test) = CONFIG.get("Keyboard").unwrap().get("path") { diff --git a/keyboard_plugin/src/backend/kde.rs b/keyboard_plugin/src/backend/kde.rs index af48156..8d10a58 100644 --- a/keyboard_plugin/src/backend/kde.rs +++ b/keyboard_plugin/src/backend/kde.rs @@ -40,7 +40,7 @@ pub fn get_saved_layouts_kde(all_keyboards: &[KeyboardLayout]) -> Vec) { +pub fn write_to_config_kde(layouts: &Vec) { let mut layout_string = String::new(); let mut variant_string = String::new(); for x in layouts.iter() { diff --git a/keyboard_plugin/src/backend/mod.rs b/keyboard_plugin/src/backend/mod.rs index 6883b81..764d332 100644 --- a/keyboard_plugin/src/backend/mod.rs +++ b/keyboard_plugin/src/backend/mod.rs @@ -27,7 +27,12 @@ pub extern "C" fn dbus_interface(cross: Arc>) { pub fn get_saved_layouts() -> Vec { let all_keyboards = get_keyboard_list_backend(); - match get_environment().as_str() { + let env = get_environment(); + if env.contains(GNOME) { + return get_saved_layouts_gnome(&all_keyboards); + } + + match env.as_str() { HYPRLAND => { get_saved_layouts_hyprland(&all_keyboards) } @@ -45,15 +50,20 @@ pub fn get_saved_layouts() -> Vec { } fn write_to_config(layouts: Vec) { - match get_environment().as_str() { + let env = get_environment(); + if env.contains(GNOME) { + return write_to_config_gnome(&layouts); + } + + match env.as_str() { HYPRLAND => { - write_to_config_hyprland(layouts); + write_to_config_hyprland(&layouts); } GNOME => { - write_to_config_gnome(layouts); + write_to_config_gnome(&layouts); } KDE => { - write_to_config_kde(layouts); + write_to_config_kde(&layouts); } _ => {} }