From: Renaud Casenave-Pere Date: Fri, 13 Dec 2013 22:28:33 +0000 (+0100) Subject: Do not steal the focus on focus-in X-Git-Url: https://repo.or.cz/w/clfswm.git/commitdiff_plain/2ee0a21f395a006b88f476c4ff5202b329bfd8fb Do not steal the focus on focus-in --- diff --git a/src/clfswm.lisp b/src/clfswm.lisp index 3b6545a..0853644 100644 --- a/src/clfswm.lisp +++ b/src/clfswm.lisp @@ -130,6 +130,14 @@ (manage-focus window root-x root-y))) +(define-handler main-mode :focus-in (window) + (unless (child-equal-p window (focused-window)) + (set-focus-to-current-child))) + + + + + (define-handler main-mode :exposure (window) (awhen (find-frame-window window) (display-frame-info it))) diff --git a/src/xlib-util.lisp b/src/xlib-util.lisp index dbe4c2a..8dae671 100644 --- a/src/xlib-util.lisp +++ b/src/xlib-util.lisp @@ -570,15 +570,23 @@ they should be windows. So use this function to make a window out of them." (setf (xlib:window-priority window) :above))) -(defun no-focus () - "don't focus any window but still read keyboard events." - (xlib:set-input-focus *display* *no-focus-window* :pointer-root)) +(let ((focused-window nil)) + (defun no-focus () + "don't focus any window but still read keyboard events." + (xlib:set-input-focus *display* *no-focus-window* :pointer-root) + (setf focused-window nil)) + + (defun focus-window (window) + "Give the window focus." + (no-focus) + (when (xlib:window-p window) + (xlib:set-input-focus *display* window :parent) + (setf focused-window window))) + + (defun focused-window () + focused-window)) + -(defun focus-window (window) - "Give the window focus." - (no-focus) - (when (xlib:window-p window) - (xlib:set-input-focus *display* window :parent))) (defun raise-and-focus-window (window) "Raise and focus."