branch: externals/posframe
commit 5dc3da4635c2d608cfc1276f96fbd85f6896a531
Author: modula t. worm <[email protected]>
Commit: modula t. worm <[email protected]>
prevent posframes from getting keyboard input
---
posframe.el | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/posframe.el b/posframe.el
index fe1abc5..7142d2ff 100644
--- a/posframe.el
+++ b/posframe.el
@@ -595,6 +595,22 @@ You can use `posframe-delete-all' to delete all posframes."
(cons position height))
height)))
+(defvar posframe--previous-frame nil)
+
+(defun posframe--redirect-posframe-focus ()
+ "Redirect focus from the posframe to the previous frame. This prevents the
+posframe from catching keyboard input if the window manager selects it."
+ (interactive)
+ (if (eq (selected-frame) posframe--frame)
+ (when posframe--previous-frame
+ (redirect-frame-focus posframe--frame posframe--previous-frame))
+ (progn
+ (setf posframe--previous-frame (selected-frame))
+ (when posframe--frame
+ (redirect-frame-focus posframe--frame posframe--previous-frame)))))
+
+(add-hook 'focus-in-hook #'posframe--redirect-posframe-focus)
+
(defun posframe--mouse-banish (frame)
"Banish mouse to the (0 . 0) of FRAME.
FIXME: This is a hacky fix for the mouse focus problem, which like: