emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/posframe 8cfb67c 4/5: Add posframe-hidehandler-daemon.


From: ELPA Syncer
Subject: [elpa] externals/posframe 8cfb67c 4/5: Add posframe-hidehandler-daemon.
Date: Wed, 2 Jun 2021 23:57:13 -0400 (EDT)

branch: externals/posframe
commit 8cfb67c54bba43ddc937ac99d13dfd8031c836c3
Author: Feng Shu <tumashu@163.com>
Commit: Feng Shu <tumashu@163.com>

    Add posframe-hidehandler-daemon.
    
        * posframe.el (posframe-hidehandler-timer): New variable.
        (posframe-hidehandler-daemon): New function.
        (posframe-run-hidehandler): alias to #'ignore.
---
 posframe.el | 45 ++++++++++++++++++++++++++++-----------------
 1 file changed, 28 insertions(+), 17 deletions(-)

diff --git a/posframe.el b/posframe.el
index 616f6c3..0d0bea5 100644
--- a/posframe.el
+++ b/posframe.el
@@ -110,6 +110,9 @@ frame.")
 (defvar-local posframe--accept-focus nil
   "Record accept focus status of `posframe-show'.")
 
+(defvar posframe-hidehandler-timer nil
+  "Timer used by hidehandler function.")
+
 ;; Avoid compilation warnings on Emacs < 27.
 (defvar x-gtk-resize-child-frames)
 
@@ -483,8 +486,7 @@ be careful, you may face some bugs when set it to non-nil.
 (17) HIDEHANDLER
 
 HIDEHANDLER is a function, when it return t, posframe will be
-hide when `post-command-hook' is executed, this function has a
-plist argument:
+hide, this function has a plist argument:
 
   (:posframe-buffer xxx
    :posframe-parent-buffer xxx)
@@ -861,21 +863,30 @@ BUFFER-OR-NAME can be a buffer or a buffer name."
                   (equal buffer-or-name (cdr buffer-info)))
           (posframe--make-frame-invisible frame))))))
 
-(defun posframe-run-hidehandler ()
-  "Run posframe hidehandler. this function is used in `post-command-hook'."
-  (ignore-errors
-    (dolist (frame (frame-list))
-      (let ((hidehandler (frame-parameter frame 'posframe-hidehandler))
-            (buffer (frame-parameter frame 'posframe-buffer))
-            (parent-buffer (frame-parameter frame 'posframe-parent-buffer)))
-        (when (and hidehandler
-                   (funcall hidehandler
-                            (list
-                             :posframe-buffer buffer
-                             :posframe-parent-buffer parent-buffer)))
-          (posframe--make-frame-invisible frame))))))
-
-(add-hook 'post-command-hook #'posframe-run-hidehandler)
+;; Remove in the future.
+(defalias 'posframe-run-hidehandler #'ignore)
+
+(defun posframe-hidehandler-daemon ()
+  "Run posframe hidehandler."
+  (when posframe-hidehandler-timer
+    (cancel-timer posframe-hidehandler-timer))
+  (setq posframe-hidehandler-timer
+        (run-with-idle-timer
+         1 t
+         (lambda ()
+           (ignore-errors
+             (dolist (frame (frame-list))
+               (let ((hidehandler (frame-parameter frame 
'posframe-hidehandler))
+                     (buffer (frame-parameter frame 'posframe-buffer))
+                     (parent-buffer (frame-parameter frame 
'posframe-parent-buffer)))
+                 (when (and hidehandler
+                            (funcall hidehandler
+                                     (list
+                                      :posframe-buffer buffer
+                                      :posframe-parent-buffer parent-buffer)))
+                   (posframe--make-frame-invisible frame)))))))))
+
+(posframe-hidehandler-daemon)
 
 (defun posframe-hidehandler-when-buffer-switch (info)
   "Posframe hidehandler function.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]