diff --git a/src/backends/traits.rs b/src/backends/traits.rs index 403e748..c69154c 100644 --- a/src/backends/traits.rs +++ b/src/backends/traits.rs @@ -28,6 +28,7 @@ pub trait WindowServerBackend { window: Self::Window, new_size: Option>, new_pos: Option>, + new_border: Option, ); fn screen_size(&self) -> Point; @@ -38,10 +39,10 @@ pub trait WindowServerBackend { fn move_cursor(&self, window: Option, position: Point); fn resize_window(&self, window: Self::Window, new_size: Point) { - self.configure_window(window, Some(new_size), None); + self.configure_window(window, Some(new_size), None, None); } fn move_window(&self, window: Self::Window, new_pos: Point) { - self.configure_window(window, None, Some(new_pos)); + self.configure_window(window, None, Some(new_pos), None); } } diff --git a/src/backends/xlib/mod.rs b/src/backends/xlib/mod.rs index 0ce1446..1abaf72 100644 --- a/src/backends/xlib/mod.rs +++ b/src/backends/xlib/mod.rs @@ -1,5 +1,5 @@ #![allow(unused_variables, dead_code)] -use log::{debug, error, warn}; +use log::{error, warn}; use std::{ffi::CString, rc::Rc}; use thiserror::Error; @@ -656,6 +656,7 @@ impl WindowServerBackend for XLib { event.window, Some(event.size), Some(event.position), + None, ); } _ => {} @@ -765,6 +766,7 @@ impl WindowServerBackend for XLib { window: Self::Window, new_size: Option>, new_pos: Option>, + new_border: Option, ) { let position = new_pos.unwrap_or(Point::new(0, 0)); let size = new_size.unwrap_or(Point::new(0, 0)); @@ -773,7 +775,7 @@ impl WindowServerBackend for XLib { y: position.y, width: size.x, height: size.y, - border_width: 0, + border_width: new_border.unwrap_or(0), sibling: 0, stack_mode: 0, }; @@ -786,6 +788,9 @@ impl WindowServerBackend for XLib { if new_size.is_some() { mask |= xlib::CWWidth | xlib::CWHeight; } + if new_border.is_some() { + mask |= xlib::CWBorderWidth; + } u32::from(mask) }; diff --git a/src/state.rs b/src/state.rs index be63222..db6cc8a 100644 --- a/src/state.rs +++ b/src/state.rs @@ -362,7 +362,9 @@ where match event { WindowEvent::KeyEvent(event) => { - self.handle_keybinds(&event); + if event.state == KeyState::Pressed { + self.handle_keybinds(&event); + } } WindowEvent::ButtonEvent(event) => { self.button_event(&event); @@ -421,16 +423,14 @@ where // TODO: change this somehow cuz I'm not a big fan of this "hardcoded" keybind stuff fn handle_keybinds(&mut self, event: &KeyEvent) { - if event.state == KeyState::Released { - // I'm not sure if this has to be a Rc> or if it would be better as a Cell<> - let keybinds = self.keybinds.clone(); + // I'm not sure if this has to be a Rc> or if it would be better as a Cell<> + let keybinds = self.keybinds.clone(); - for kb in keybinds.borrow().iter() { - if kb.key.key == event.keycode - && kb.key.modifiers == event.modifierstate - { - kb.call(self, event); - } + for kb in keybinds.borrow().iter() { + if kb.key.key == event.keycode + && kb.key.modifiers == event.modifierstate + { + kb.call(self, event); } } } @@ -645,15 +645,15 @@ where Client::new_default(window) }; - // TODO - //self.xlib - //.configure_client(&client, self.clients.get_border()); + self.backend.configure_window( + window, + None, + None, + Some(self.clients.get_border()), + ); self.clients.insert(client).unwrap(); self.arrange_clients(); - // TODO - //self.xlib.map_window(window); - self.focus_client(&window, true); }