From 249f2b7a21f883726e0c8c49cc3bbec52cc1b6cc Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Thu, 28 Dec 2023 09:36:10 +0400 Subject: Add disable-power-key-handling option --- src/config.rs | 5 +++++ src/input.rs | 17 +++++++++++++++-- src/main.rs | 6 ++++-- 3 files changed, 24 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/config.rs b/src/config.rs index ff096017..9ca61e20 100644 --- a/src/config.rs +++ b/src/config.rs @@ -55,6 +55,8 @@ pub struct Input { pub touchpad: Touchpad, #[knuffel(child, default)] pub tablet: Tablet, + #[knuffel(child)] + pub disable_power_key_handling: bool, } #[derive(knuffel::Decode, Debug, Default, PartialEq, Eq)] @@ -585,6 +587,8 @@ mod tests { tablet { map-to-output "eDP-1" } + + disable-power-key-handling } output "eDP-1" { @@ -666,6 +670,7 @@ mod tests { tablet: Tablet { map_to_output: Some("eDP-1".to_owned()), }, + disable_power_key_handling: true, }, outputs: vec![Output { off: false, diff --git a/src/input.rs b/src/input.rs index df04a756..d315754a 100644 --- a/src/input.rs +++ b/src/input.rs @@ -209,6 +209,7 @@ impl State { pressed, *mods, &this.niri.screenshot_ui, + this.niri.config.borrow().input.disable_power_key_handling, ) }, ) else { @@ -1165,6 +1166,7 @@ fn should_intercept_key( pressed: bool, mods: ModifiersState, screenshot_ui: &ScreenshotUi, + disable_power_key_handling: bool, ) -> FilterResult> { // Actions are only triggered on presses, release of the key // shouldn't try to intercept anything unless we have marked @@ -1173,7 +1175,14 @@ fn should_intercept_key( return FilterResult::Forward; } - let mut final_action = action(bindings, comp_mod, modified, raw, mods); + let mut final_action = action( + bindings, + comp_mod, + modified, + raw, + mods, + disable_power_key_handling, + ); // Allow only a subset of compositor actions while the screenshot UI is open, since the user // cannot see the screen. @@ -1210,6 +1219,7 @@ fn action( modified: Keysym, raw: Option, mods: ModifiersState, + disable_power_key_handling: bool, ) -> Option { use keysyms::*; @@ -1220,7 +1230,7 @@ fn action( let vt = (modified - KEY_XF86Switch_VT_1 + 1) as i32; return Some(Action::ChangeVt(vt)); } - KEY_XF86PowerOff => return Some(Action::Suspend), + KEY_XF86PowerOff if !disable_power_key_handling => return Some(Action::Suspend), _ => (), } @@ -1325,6 +1335,7 @@ mod tests { let mut suppressed_keys = HashSet::new(); let screenshot_ui = ScreenshotUi::new(); + let disable_power_key_handling = false; // The key_code we pick is arbitrary, the only thing // that matters is that they are different between cases. @@ -1341,6 +1352,7 @@ mod tests { pressed, mods, &screenshot_ui, + disable_power_key_handling, ) }; @@ -1356,6 +1368,7 @@ mod tests { pressed, mods, &screenshot_ui, + disable_power_key_handling, ) }; diff --git a/src/main.rs b/src/main.rs index 101ef674..b19a5426 100644 --- a/src/main.rs +++ b/src/main.rs @@ -163,8 +163,10 @@ fn main() -> Result<(), Box> { // Inhibit power key handling so we can suspend on it. #[cfg(feature = "dbus")] - if let Err(err) = state.niri.inhibit_power_key() { - warn!("error inhibiting power key: {err:?}"); + if !state.niri.config.borrow().input.disable_power_key_handling { + if let Err(err) = state.niri.inhibit_power_key() { + warn!("error inhibiting power key: {err:?}"); + } } } -- cgit