fixed various crashes by actually using an error handler!
This commit is contained in:
parent
cbbecdfe8f
commit
ef63004242
27
src/main.rs
27
src/main.rs
|
@ -11,28 +11,6 @@ mod state;
|
|||
mod util;
|
||||
mod xlib;
|
||||
|
||||
#[allow(dead_code)]
|
||||
unsafe extern "C" fn xlib_error_handler(
|
||||
_dpy: *mut x11::xlib::Display,
|
||||
ee: *mut x11::xlib::XErrorEvent,
|
||||
) -> std::os::raw::c_int {
|
||||
let err = ee.as_ref().unwrap();
|
||||
|
||||
if err.error_code == x11::xlib::BadWindow
|
||||
|| err.error_code == x11::xlib::BadDrawable
|
||||
|| err.error_code == x11::xlib::BadAccess
|
||||
|| err.error_code == x11::xlib::BadMatch
|
||||
{
|
||||
0
|
||||
} else {
|
||||
error!(
|
||||
"wm: fatal error:\nrequest_code: {}\nerror_code: {}",
|
||||
err.request_code, err.error_code
|
||||
);
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
fn init_logger() {
|
||||
let encoder = Box::new(PatternEncoder::new(
|
||||
"{d(%Y-%m-%d %H:%M:%S %Z)(utc)} │ {({M}::{f}:{L}):>25} │ {h({l:>5})} │ {m}{n}",
|
||||
|
@ -42,8 +20,7 @@ fn init_logger() {
|
|||
|
||||
let home = dirs::home_dir().expect("Failed to get $HOME env var.");
|
||||
|
||||
let logfile = FileAppender::builder()
|
||||
//.encoder(Box::new(PatternEncoder::default()))
|
||||
let _logfile = FileAppender::builder()
|
||||
.encoder(encoder)
|
||||
.build(home.join(".local/portlights.log"))
|
||||
.unwrap();
|
||||
|
@ -54,7 +31,7 @@ fn init_logger() {
|
|||
.build(
|
||||
Root::builder()
|
||||
.appender("stdout")
|
||||
.appender("logfile")
|
||||
//.appender("logfile")
|
||||
.build(log::LevelFilter::Info),
|
||||
)
|
||||
.unwrap();
|
||||
|
|
|
@ -408,13 +408,6 @@ impl WindowManager {
|
|||
self.raise_floating_clients();
|
||||
}
|
||||
|
||||
#[deprecated]
|
||||
fn unfocus_client(&mut self) {
|
||||
if let Some(client) = self.clients.unfocus().into_option() {
|
||||
self.xlib.unfocus_client(client);
|
||||
}
|
||||
}
|
||||
|
||||
fn new_client(&mut self, window: Window) {
|
||||
info!("new client: {:?}", window);
|
||||
let client = if let Some(transient_window) = self.xlib.get_transient_for_window(window) {
|
||||
|
|
33
src/xlib.rs
33
src/xlib.rs
|
@ -5,11 +5,10 @@ use std::{ffi::CString, rc::Rc};
|
|||
use x11::xlib::{
|
||||
self, Atom, ButtonPressMask, ButtonReleaseMask, CWEventMask, ControlMask, CurrentTime,
|
||||
EnterWindowMask, FocusChangeMask, LockMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask,
|
||||
PointerMotionMask, PropertyChangeMask, ShiftMask, Status, StructureNotifyMask,
|
||||
SubstructureNotifyMask, SubstructureRedirectMask, Window, XCloseDisplay,
|
||||
XConfigureRequestEvent, XDefaultScreen, XEvent, XGetTransientForHint, XGrabPointer,
|
||||
XInternAtom, XKillClient, XMapWindow, XOpenDisplay, XRaiseWindow, XRootWindow, XSync,
|
||||
XUngrabPointer, XWarpPointer,
|
||||
PointerMotionMask, PropertyChangeMask, ShiftMask, StructureNotifyMask, SubstructureNotifyMask,
|
||||
SubstructureRedirectMask, Window, XCloseDisplay, XConfigureRequestEvent, XDefaultScreen,
|
||||
XEvent, XGetTransientForHint, XGrabPointer, XInternAtom, XKillClient, XMapWindow, XOpenDisplay,
|
||||
XRaiseWindow, XRootWindow, XSetErrorHandler, XSync, XUngrabPointer, XWarpPointer,
|
||||
};
|
||||
use xlib::GrabModeAsync;
|
||||
|
||||
|
@ -94,6 +93,8 @@ impl XLib {
|
|||
);
|
||||
|
||||
xlib::XSelectInput(self.dpy(), self.root, window_attributes.event_mask);
|
||||
|
||||
XSetErrorHandler(Some(xlib_error_handler));
|
||||
}
|
||||
|
||||
self.grab_global_keybinds(self.root);
|
||||
|
@ -595,3 +596,25 @@ impl Atoms {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
unsafe extern "C" fn xlib_error_handler(
|
||||
_dpy: *mut x11::xlib::Display,
|
||||
ee: *mut x11::xlib::XErrorEvent,
|
||||
) -> std::os::raw::c_int {
|
||||
let err = ee.as_ref().unwrap();
|
||||
|
||||
if err.error_code == x11::xlib::BadWindow
|
||||
|| err.error_code == x11::xlib::BadDrawable
|
||||
|| err.error_code == x11::xlib::BadAccess
|
||||
|| err.error_code == x11::xlib::BadMatch
|
||||
{
|
||||
0
|
||||
} else {
|
||||
error!(
|
||||
"wm: fatal error:\nrequest_code: {}\nerror_code: {}",
|
||||
err.request_code, err.error_code
|
||||
);
|
||||
std::process::exit(1);
|
||||
}
|
||||
}
|
||||
|
|
4
xinitrc
4
xinitrc
|
@ -2,6 +2,6 @@
|
|||
|
||||
/usr/bin/xset b off
|
||||
/usr/bin/xsetroot -solid darkslategrey
|
||||
/usr/bin/feh --bg-fill "./starship.jpg"
|
||||
/usr/bin/feh --bg-fill "/mnt/storage/rust/wm/starship.jpg"
|
||||
export RUST_BACKTRACE=1
|
||||
exec ./target/debug/wm >& &HOME/.portlights.log
|
||||
exec /mnt/storage/rust/wm/target/debug/wm >& /home/user/.local/portlights.log
|
||||
|
|
Loading…
Reference in a new issue