Minimize compositor calls
This commit is contained in:
parent
ebdc2eac00
commit
b7de2a1ce0
1 changed files with 20 additions and 12 deletions
|
@ -1,5 +1,4 @@
|
||||||
use std::{sync::Arc, option::Option, str::FromStr, future::Future, pin::Pin, process::{Command, Stdio}};
|
use std::{sync::Arc, option::Option, str::FromStr, future::Future, pin::Pin, process::{Command, Stdio}};
|
||||||
//use futures::future::{BoxFuture, FutureExt};
|
|
||||||
use tokio::sync::Mutex;
|
use tokio::sync::Mutex;
|
||||||
use tokio_stream::StreamExt;
|
use tokio_stream::StreamExt;
|
||||||
use fork::{fork, Fork, setsid};
|
use fork::{fork, Fork, setsid};
|
||||||
|
@ -38,6 +37,7 @@ pub struct EventReader {
|
||||||
modifier_was_activated: Arc<Mutex<bool>>,
|
modifier_was_activated: Arc<Mutex<bool>>,
|
||||||
device_is_connected: Arc<Mutex<bool>>,
|
device_is_connected: Arc<Mutex<bool>>,
|
||||||
active_layout: Arc<Mutex<u16>>,
|
active_layout: Arc<Mutex<u16>>,
|
||||||
|
current_config: Arc<Mutex<Config>>,
|
||||||
environment: Environment,
|
environment: Environment,
|
||||||
settings: Settings,
|
settings: Settings,
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,7 @@ impl EventReader {
|
||||||
let rstick_position = Arc::new(Mutex::new(position_vector.clone()));
|
let rstick_position = Arc::new(Mutex::new(position_vector.clone()));
|
||||||
let device_is_connected: Arc<Mutex<bool>> = Arc::new(Mutex::new(true));
|
let device_is_connected: Arc<Mutex<bool>> = Arc::new(Mutex::new(true));
|
||||||
let active_layout: Arc<Mutex<u16>> = Arc::new(Mutex::new(0));
|
let active_layout: Arc<Mutex<u16>> = Arc::new(Mutex::new(0));
|
||||||
|
let current_config: Arc<Mutex<Config>> = Arc::new(Mutex::new(config.iter().find(|&x| x.associations == Associations::default()).unwrap().clone()));
|
||||||
let virt_dev = Arc::new(Mutex::new(VirtualDevices::new()));
|
let virt_dev = Arc::new(Mutex::new(VirtualDevices::new()));
|
||||||
let lstick_function = config.iter().find(|&x| x.associations == Associations::default()).unwrap()
|
let lstick_function = config.iter().find(|&x| x.associations == Associations::default()).unwrap()
|
||||||
.settings.get("LSTICK").unwrap_or(&"cursor".to_string()).to_string();
|
.settings.get("LSTICK").unwrap_or(&"cursor".to_string()).to_string();
|
||||||
|
@ -123,6 +124,7 @@ impl EventReader {
|
||||||
modifier_was_activated,
|
modifier_was_activated,
|
||||||
device_is_connected,
|
device_is_connected,
|
||||||
active_layout,
|
active_layout,
|
||||||
|
current_config,
|
||||||
environment,
|
environment,
|
||||||
settings,
|
settings,
|
||||||
}
|
}
|
||||||
|
@ -385,11 +387,14 @@ impl EventReader {
|
||||||
let mut device_is_connected = self.device_is_connected.lock().await;
|
let mut device_is_connected = self.device_is_connected.lock().await;
|
||||||
*device_is_connected = false;
|
*device_is_connected = false;
|
||||||
|
|
||||||
println!("Disconnected device \"{}\".\n", self.get_config().await.name);
|
println!("Disconnected device \"{}\".\n", self.current_config.lock().await.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn convert_event(&self, default_event: InputEvent, event: Event, value: i32, send_zero: bool) {
|
async fn convert_event(&self, default_event: InputEvent, event: Event, value: i32, send_zero: bool) {
|
||||||
let config = self.get_config().await;
|
if value == 1 {
|
||||||
|
self.update_config().await;
|
||||||
|
};
|
||||||
|
let config = self.current_config.lock().await.clone();
|
||||||
let modifiers = self.modifiers.lock().await.clone();
|
let modifiers = self.modifiers.lock().await.clone();
|
||||||
if let Some(map) = config.bindings.remap.get(&event) {
|
if let Some(map) = config.bindings.remap.get(&event) {
|
||||||
if let Some(event_list) = map.get(&modifiers) {
|
if let Some(event_list) = map.get(&modifiers) {
|
||||||
|
@ -423,7 +428,7 @@ impl EventReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn emit_event(&self, event_list: &Vec<Key>, value: i32, modifiers: &Vec<Event>, release_keys: bool, ignore_modifiers: bool, send_zero: bool) {
|
async fn emit_event(&self, event_list: &Vec<Key>, value: i32, modifiers: &Vec<Event>, release_keys: bool, ignore_modifiers: bool, send_zero: bool) {
|
||||||
let config = self.get_config().await;
|
let config = self.current_config.lock().await.clone();
|
||||||
let mut virt_dev = self.virt_dev.lock().await;
|
let mut virt_dev = self.virt_dev.lock().await;
|
||||||
let mut modifier_was_activated = self.modifier_was_activated.lock().await;
|
let mut modifier_was_activated = self.modifier_was_activated.lock().await;
|
||||||
if release_keys {
|
if release_keys {
|
||||||
|
@ -468,7 +473,7 @@ impl EventReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn emit_nonmapped_event(&self, default_event: InputEvent, event: Event, value: i32, modifiers: &Vec<Event>) {
|
async fn emit_nonmapped_event(&self, default_event: InputEvent, event: Event, value: i32, modifiers: &Vec<Event>) {
|
||||||
let config = self.get_config().await;
|
let config = self.current_config.lock().await.clone();
|
||||||
let mut virt_dev = self.virt_dev.lock().await;
|
let mut virt_dev = self.virt_dev.lock().await;
|
||||||
let mut modifier_was_activated = self.modifier_was_activated.lock().await;
|
let mut modifier_was_activated = self.modifier_was_activated.lock().await;
|
||||||
let released_keys: Vec<Key> = self.released_keys(&modifiers).await;
|
let released_keys: Vec<Key> = self.released_keys(&modifiers).await;
|
||||||
|
@ -580,7 +585,7 @@ impl EventReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn toggle_modifiers(&self, modifier: Event, value: i32) {
|
async fn toggle_modifiers(&self, modifier: Event, value: i32) {
|
||||||
let config = self.get_config().await;
|
let config = self.current_config.lock().await.clone();
|
||||||
let mut modifiers = self.modifiers.lock().await;
|
let mut modifiers = self.modifiers.lock().await;
|
||||||
if config.mapped_modifiers.all.contains(&modifier) {
|
if config.mapped_modifiers.all.contains(&modifier) {
|
||||||
match value {
|
match value {
|
||||||
|
@ -596,7 +601,7 @@ impl EventReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn released_keys(&self, modifiers: &Vec<Event>) -> Vec<Key> {
|
async fn released_keys(&self, modifiers: &Vec<Event>) -> Vec<Key> {
|
||||||
let config = self.get_config().await;
|
let config = self.current_config.lock().await.clone();
|
||||||
let mut released_keys: Vec<Key> = Vec::new();
|
let mut released_keys: Vec<Key> = Vec::new();
|
||||||
for (_key, hashmap) in config.bindings.remap.iter() {
|
for (_key, hashmap) in config.bindings.remap.iter() {
|
||||||
if let Some(event_list) = hashmap.get(modifiers) {
|
if let Some(event_list) = hashmap.get(modifiers) {
|
||||||
|
@ -608,7 +613,7 @@ impl EventReader {
|
||||||
|
|
||||||
async fn change_active_layout(&self) {
|
async fn change_active_layout(&self) {
|
||||||
let mut active_layout = self.active_layout.lock().await;
|
let mut active_layout = self.active_layout.lock().await;
|
||||||
let active_window = get_active_window(&self.environment.server, &self.config).await;
|
let active_window = get_active_window(&self.environment, &self.config).await;
|
||||||
loop {
|
loop {
|
||||||
if *active_layout == 3 { *active_layout = 0 }
|
if *active_layout == 3 { *active_layout = 0 }
|
||||||
else { *active_layout += 1 };
|
else { *active_layout += 1 };
|
||||||
|
@ -622,19 +627,22 @@ impl EventReader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_config(&self) -> Pin<Box<dyn Future<Output = &Config> + Send + '_>> {
|
fn update_config(&self) -> Pin<Box<dyn Future<Output = ()> + Send + '_>> {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let active_layout = self.active_layout.lock().await.clone();
|
let active_layout = self.active_layout.lock().await.clone();
|
||||||
let active_window = get_active_window(&self.environment.server, &self.config).await;
|
let active_window = get_active_window(&self.environment, &self.config).await;
|
||||||
let associations = Associations {
|
let associations = Associations {
|
||||||
client: active_window,
|
client: active_window,
|
||||||
layout: active_layout,
|
layout: active_layout,
|
||||||
};
|
};
|
||||||
match self.config.iter().find(|&x| x.associations == associations) {
|
match self.config.iter().find(|&x| x.associations == associations) {
|
||||||
Some(config) => return config,
|
Some(config) => {
|
||||||
|
let mut current_config = self.current_config.lock().await;
|
||||||
|
*current_config = config.clone();
|
||||||
|
},
|
||||||
None => {
|
None => {
|
||||||
self.change_active_layout().await;
|
self.change_active_layout().await;
|
||||||
return self.get_config().await
|
self.update_config().await;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Reference in a new issue