From d806d419c01475393f2c0446e21223a1bd6ae446 Mon Sep 17 00:00:00 2001
From: Federico Terzi <federicoterzi96@gmail.com>
Date: Tue, 12 Apr 2022 21:38:29 +0200
Subject: [PATCH] feat(core): wire up alternative x11 backend

---
 espanso/src/cli/worker/config.rs                                | 2 ++
 .../cli/worker/engine/dispatch/executor/clipboard_injector.rs   | 2 ++
 .../src/cli/worker/engine/dispatch/executor/event_injector.rs   | 2 +-
 espanso/src/cli/worker/engine/dispatch/executor/key_injector.rs | 2 +-
 espanso/src/cli/worker/engine/dispatch/executor/mod.rs          | 1 +
 espanso/src/patch/patches/mod.rs                                | 1 +
 6 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/espanso/src/cli/worker/config.rs b/espanso/src/cli/worker/config.rs
index 7371ffc..abc7dce 100644
--- a/espanso/src/cli/worker/config.rs
+++ b/espanso/src/cli/worker/config.rs
@@ -143,6 +143,7 @@ impl<'a> super::engine::dispatch::executor::clipboard_injector::ClipboardParamsP
       restore_clipboard: active.preserve_clipboard(),
       restore_clipboard_delay: active.restore_clipboard_delay(),
       x11_use_xclip_backend: active.x11_use_xclip_backend(),
+      x11_use_xdotool_backend: active.x11_use_xdotool_backend(),
     }
   }
 }
@@ -164,6 +165,7 @@ impl<'a> super::engine::dispatch::executor::InjectParamsProvider for ConfigManag
       inject_delay: active.inject_delay(),
       key_delay: active.key_delay(),
       evdev_modifier_delay: active.evdev_modifier_delay(),
+      x11_use_xdotool_backend: active.x11_use_xdotool_backend(),
     }
   }
 }
diff --git a/espanso/src/cli/worker/engine/dispatch/executor/clipboard_injector.rs b/espanso/src/cli/worker/engine/dispatch/executor/clipboard_injector.rs
index bf7ac6c..f170b47 100644
--- a/espanso/src/cli/worker/engine/dispatch/executor/clipboard_injector.rs
+++ b/espanso/src/cli/worker/engine/dispatch/executor/clipboard_injector.rs
@@ -40,6 +40,7 @@ pub struct ClipboardParams {
   pub restore_clipboard: bool,
   pub restore_clipboard_delay: usize,
   pub x11_use_xclip_backend: bool,
+  pub x11_use_xdotool_backend: bool,
 }
 
 pub struct ClipboardInjectorAdapter<'a> {
@@ -95,6 +96,7 @@ impl<'a> ClipboardInjectorAdapter<'a> {
       InjectionOptions {
         delay: params.paste_shortcut_event_delay as i32,
         disable_fast_inject: params.disable_x11_fast_inject,
+        x11_use_xdotool_fallback: params.x11_use_xdotool_backend,
         ..Default::default()
       },
     )?;
diff --git a/espanso/src/cli/worker/engine/dispatch/executor/event_injector.rs b/espanso/src/cli/worker/engine/dispatch/executor/event_injector.rs
index 4198654..5741b30 100644
--- a/espanso/src/cli/worker/engine/dispatch/executor/event_injector.rs
+++ b/espanso/src/cli/worker/engine/dispatch/executor/event_injector.rs
@@ -67,7 +67,7 @@ impl<'a> TextInjector for EventInjectorAdapter<'a> {
         })
         .try_into()
         .unwrap(),
-      x11_use_xdotool_fallback: true, // TODO: put actual config
+      x11_use_xdotool_fallback: params.x11_use_xdotool_backend,
     };
 
     // We don't use the lines() method because it skips emtpy lines, which is not what we want.
diff --git a/espanso/src/cli/worker/engine/dispatch/executor/key_injector.rs b/espanso/src/cli/worker/engine/dispatch/executor/key_injector.rs
index 40a4e04..26e732b 100644
--- a/espanso/src/cli/worker/engine/dispatch/executor/key_injector.rs
+++ b/espanso/src/cli/worker/engine/dispatch/executor/key_injector.rs
@@ -59,7 +59,7 @@ impl<'a> KeyInjector for KeyInjectorAdapter<'a> {
         })
         .try_into()
         .unwrap(),
-      x11_use_xdotool_fallback: true, // TODO: put actual config
+      x11_use_xdotool_fallback: params.x11_use_xdotool_backend,
     };
 
     let converted_keys: Vec<_> = keys.iter().map(convert_to_inject_key).collect();
diff --git a/espanso/src/cli/worker/engine/dispatch/executor/mod.rs b/espanso/src/cli/worker/engine/dispatch/executor/mod.rs
index ff3dc19..49d518d 100644
--- a/espanso/src/cli/worker/engine/dispatch/executor/mod.rs
+++ b/espanso/src/cli/worker/engine/dispatch/executor/mod.rs
@@ -34,4 +34,5 @@ pub struct InjectParams {
   pub key_delay: Option<usize>,
   pub disable_x11_fast_inject: bool,
   pub evdev_modifier_delay: Option<usize>,
+  pub x11_use_xdotool_backend: bool,
 }
diff --git a/espanso/src/patch/patches/mod.rs b/espanso/src/patch/patches/mod.rs
index cd0a492..f652011 100644
--- a/espanso/src/patch/patches/mod.rs
+++ b/espanso/src/patch/patches/mod.rs
@@ -53,5 +53,6 @@ generate_patchable_config!(
   win32_exclude_orphan_events -> bool,
   win32_keyboard_layout_cache_interval -> i64,
   x11_use_xclip_backend -> bool,
+  x11_use_xdotool_backend -> bool,
   keyboard_layout -> Option<RMLVOConfig>
 );