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

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

[elpa] externals/posframe caf6a08f11 2/4: Refactor posframe redraw code.


From: ELPA Syncer
Subject: [elpa] externals/posframe caf6a08f11 2/4: Refactor posframe redraw code.
Date: Mon, 12 Dec 2022 22:57:59 -0500 (EST)

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

    Refactor posframe redraw code.
---
 posframe.el | 43 ++++++++++++++++++++++++++++---------------
 1 file changed, 28 insertions(+), 15 deletions(-)

diff --git a/posframe.el b/posframe.el
index 25191673e5..daac142294 100644
--- a/posframe.el
+++ b/posframe.el
@@ -628,7 +628,6 @@ ACCEPT-FOCUS."
       (unless (or posframe--frame posframe--last-args)
         (setq-local posframe--frame
                     (posframe--find-existing-posframe buffer args))
-        (set-frame-parameter posframe--frame 'reuse-existing-posframe t)
         (setq-local posframe--last-args args))
 
       ;; Create child-frame
@@ -728,17 +727,21 @@ ACCEPT-FOCUS."
 
 (defun posframe--find-existing-posframe (buffer &optional last-args)
   "Find existing posframe with BUFFER and LAST-ARGS."
-  (cl-find-if
-   (lambda (frame)
-     (let* ((buffer-info (frame-parameter frame 'posframe-buffer))
-            (buffer-equal-p
-             (or (equal (buffer-name buffer) (car buffer-info))
-                 (equal buffer (cdr buffer-info)))))
-       (if last-args
-           (and buffer-equal-p
-                (equal last-args (frame-parameter frame 'last-args)))
-         buffer-equal-p)))
-   (frame-list)))
+  (let ((posframe
+         (cl-find-if
+          (lambda (frame)
+            (let* ((buffer-info (frame-parameter frame 'posframe-buffer))
+                   (buffer-equal-p
+                    (or (equal (buffer-name buffer) (car buffer-info))
+                        (equal buffer (cdr buffer-info)))))
+              (if last-args
+                  (and buffer-equal-p
+                       (equal last-args (frame-parameter frame 'last-args)))
+                buffer-equal-p)))
+          (frame-list))))
+    (when posframe
+      (set-frame-parameter posframe 'existing-posframe t))
+    posframe))
 
 (defun posframe-delete-frame (buffer-or-name)
   "Delete posframe pertaining to BUFFER-OR-NAME.
@@ -883,13 +886,23 @@ This need PARENT-FRAME-WIDTH and PARENT-FRAME-HEIGHT"
     (setq-local posframe--last-posframe-displayed-size
                 (cons (frame-pixel-width posframe)
                       (frame-pixel-height posframe))))
-  ;; Make posframe's posframe--frame visible
+  (posframe--make-posframe-visible posframe))
+
+(defun posframe--make-posframe-visible (posframe)
+  "Let POSFRAME visible and redraw it when needed."
   (unless (frame-visible-p posframe)
     (make-frame-visible posframe)
-    ;; Fix issue: https://github.com/tumashu/ivy-posframe/pull/30
-    (when (frame-parameter posframe 'reuse-existing-posframe)
+    (when (posframe--posframe-need-redraw-p posframe)
       (redraw-frame posframe))))
 
+(defun posframe--posframe-need-redraw-p (posframe)
+  "Test POSFRAME need to redraw or not."
+  ;; When posframe is found by `posframe--find-existing-posframe',
+  ;; it need to redraw, more info:
+  ;; 1. https://github.com/tumashu/ivy-posframe/pull/30
+  ;; 2. https://github.com/tumashu/posframe/pull/118
+  (frame-parameter posframe 'existing-posframe))
+
 (defun posframe--run-timeout-timer (posframe secs)
   "Hide POSFRAME after a delay of SECS seconds."
   (when (and (numberp secs) (> secs 0))



reply via email to

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