input: Allow Escape to cancel grabs

This commit is contained in:
Victoria Brekenfeld 2023-12-11 16:11:20 +00:00 committed by Victoria Brekenfeld
parent e347076145
commit 2e08bde657
2 changed files with 27 additions and 0 deletions

View file

@ -143,6 +143,8 @@ pub enum Action {
Terminate,
Debug,
Close,
#[serde(skip)]
Escape,
Workspace(u8),
NextWorkspace,
@ -317,4 +319,11 @@ pub fn add_default_bindings(
output_next.iter().copied(),
Action::MoveToOutput(output_next_dir),
);
insert_binding(
key_bindings,
KeyModifiers::default(),
std::iter::once(Keysym::Escape),
Action::Escape,
);
}

View file

@ -1197,6 +1197,24 @@ impl State {
window.send_close();
}
}
Action::Escape => {
self.common
.shell
.set_overview_mode(None, self.common.event_loop_handle.clone());
self.common.shell.set_resize_mode(
None,
&self.common.config,
self.common.event_loop_handle.clone(),
);
let pointer = seat.get_pointer().unwrap();
let keyboard = seat.get_keyboard().unwrap();
if pointer.is_grabbed() {
pointer.unset_grab(self, serial, time);
}
if keyboard.is_grabbed() {
keyboard.unset_grab();
}
}
Action::Workspace(key_num) => {
let current_output = seat.active_output();
let workspace = match key_num {