1
0
Fork 0
forked from wry/wry

config: allow destroying keymaps

This commit is contained in:
Julian Orth 2024-03-13 14:32:37 +01:00
parent 3eb0f61ec1
commit f1a3705699
4 changed files with 21 additions and 0 deletions

View file

@ -782,6 +782,10 @@ impl Client {
has
}
pub fn destroy_keymap(&self, keymap: Keymap) {
self.send(&ClientMessage::DestroyKeymap { keymap })
}
pub fn seat_set_keymap(&self, seat: Seat, keymap: Keymap) {
self.send(&ClientMessage::SeatSetKeymap { seat, keymap })
}

View file

@ -382,6 +382,9 @@ pub enum ClientMessage<'a> {
fds: Vec<(i32, i32)>,
},
DisableDefaultSeat,
DestroyKeymap {
keymap: Keymap,
},
}
#[derive(Serialize, Deserialize, Debug)]

View file

@ -59,6 +59,15 @@ impl Keymap {
pub fn is_invalid(self) -> bool {
self == Self::INVALID
}
/// Destroys this reference to the keymap.
///
/// Seats that are currently using this keymap are unaffected.
pub fn destroy(self) {
if self.is_valid() {
get!().destroy_keymap(self);
}
}
}
/// Parses a keymap.

View file

@ -1250,6 +1250,10 @@ impl ConfigProxyHandler {
Ok(())
}
fn handle_destroy_keymap(&self, keymap: Keymap) {
self.keymaps.remove(&keymap);
}
pub fn handle_request(self: &Rc<Self>, msg: &[u8]) {
if let Err(e) = self.handle_request_(msg) {
log::error!("Could not handle client request: {}", ErrorFmt(e));
@ -1515,6 +1519,7 @@ impl ConfigProxyHandler {
fds,
} => self.handle_run(prog, args, env, fds).wrn("run")?,
ClientMessage::DisableDefaultSeat => self.state.create_default_seat.set(false),
ClientMessage::DestroyKeymap { keymap } => self.handle_destroy_keymap(keymap),
}
Ok(())
}