diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-12-28 09:36:10 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-12-28 09:36:10 +0400 |
| commit | 249f2b7a21f883726e0c8c49cc3bbec52cc1b6cc (patch) | |
| tree | 78e692b5e01704c803d76a887420804335f0c3bd | |
| parent | f3e5e13c4503978d47934fb4828bb12fbe606220 (diff) | |
| download | niri-249f2b7a21f883726e0c8c49cc3bbec52cc1b6cc.tar.gz niri-249f2b7a21f883726e0c8c49cc3bbec52cc1b6cc.tar.bz2 niri-249f2b7a21f883726e0c8c49cc3bbec52cc1b6cc.zip | |
Add disable-power-key-handling option
| -rw-r--r-- | resources/default-config.kdl | 6 | ||||
| -rw-r--r-- | src/config.rs | 5 | ||||
| -rw-r--r-- | src/input.rs | 17 | ||||
| -rw-r--r-- | src/main.rs | 6 |
4 files changed, 30 insertions, 4 deletions
diff --git a/resources/default-config.kdl b/resources/default-config.kdl index f2c567f3..bf1c004b 100644 --- a/resources/default-config.kdl +++ b/resources/default-config.kdl @@ -37,6 +37,12 @@ input { // existing outputs. map-to-output "eDP-1" } + + // By default, niri will take over the power button to make it sleep + // instead of power off. + // Uncomment this if you would like to configure the power button elsewhere + // (i.e. logind.conf). + // disable-power-key-handling } // You can configure outputs by their name, which you can find with wayland-info(1). 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<Option<Action>> { // 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<Keysym>, mods: ModifiersState, + disable_power_key_handling: bool, ) -> Option<Action> { 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<dyn std::error::Error>> { // 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:?}"); + } } } |
