diff --git a/src/main.rs b/src/main.rs index 2440b8c..d06c1ab 100644 --- a/src/main.rs +++ b/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(); diff --git a/src/state.rs b/src/state.rs index b1a30c7..f6fe9bd 100644 --- a/src/state.rs +++ b/src/state.rs @@ -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) { diff --git a/src/xlib.rs b/src/xlib.rs index 6d17ee6..968c6a6 100644 --- a/src/xlib.rs +++ b/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); + } +} diff --git a/xinitrc b/xinitrc index 60ef192..2ddca22 100644 --- a/xinitrc +++ b/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