mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-22 02:01:55 +07:00
Add disable-power-key-handling option
This commit is contained in:
@@ -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).
|
||||
|
||||
@@ -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,
|
||||
|
||||
+15
-2
@@ -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,
|
||||
)
|
||||
};
|
||||
|
||||
|
||||
+4
-2
@@ -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:?}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user