fixed window borders

This commit is contained in:
Janis 2021-11-28 19:32:05 +01:00
parent b47f245250
commit 91b5c91bd5
3 changed files with 26 additions and 20 deletions

View file

@ -28,6 +28,7 @@ pub trait WindowServerBackend {
window: Self::Window,
new_size: Option<Point<i32>>,
new_pos: Option<Point<i32>>,
new_border: Option<i32>,
);
fn screen_size(&self) -> Point<i32>;
@ -38,10 +39,10 @@ pub trait WindowServerBackend {
fn move_cursor(&self, window: Option<Self::Window>, position: Point<i32>);
fn resize_window(&self, window: Self::Window, new_size: Point<i32>) {
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<i32>) {
self.configure_window(window, None, Some(new_pos));
self.configure_window(window, None, Some(new_pos), None);
}
}

View file

@ -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<super::window_event::Point<i32>>,
new_pos: Option<super::window_event::Point<i32>>,
new_border: Option<i32>,
) {
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)
};

View file

@ -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<B::Window>) {
if event.state == KeyState::Released {
// I'm not sure if this has to be a Rc<RefCell>> 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<RefCell>> 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);
}