From 2ee0a21f395a006b88f476c4ff5202b329bfd8fb Mon Sep 17 00:00:00 2001 From: Renaud Casenave-Pere Date: Fri, 13 Dec 2013 23:28:33 +0100 Subject: [PATCH] Do not steal the focus on focus-in --- src/clfswm.lisp | 8 ++++++++ src/xlib-util.lisp | 24 ++++++++++++++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) 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." -- 2.11.4.GIT