branch: externals/corfu commit 1acc02809b204d38be2d72ac4ffa96a06ef0c45b Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
corfu--make-frame: Apply frame/face settings only if changed (Fix #37) --- corfu.el | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/corfu.el b/corfu.el index ebb1d21..5abe8f6 100644 --- a/corfu.el +++ b/corfu.el @@ -319,12 +319,17 @@ filter string with spaces is allowed." (internal-border-width . ,(alist-get 'child-frame-border-width corfu--frame-parameters)) ,@corfu--frame-parameters)))) - (set-face-background - (if (facep 'child-frame-border) 'child-frame-border 'internal-border) - (face-attribute 'corfu-border :background) corfu--frame) - (set-frame-parameter - corfu--frame 'background-color - (face-attribute 'corfu-background :background)) + ;;; Setting the same frame-parameter/face-background is not a nop (bug?). + ;;; Check explicitly before applying the setting. + (let* ((curr (frame-parameter corfu--frame 'background-color)) + (new (face-attribute 'corfu-background :background))) + (unless (equal curr new) + (set-frame-parameter corfu--frame 'background-color new))) + (let* ((face (if (facep 'child-frame-border) 'child-frame-border 'internal-border)) + (curr (face-attribute face :background corfu--frame)) + (new (face-attribute 'corfu-border :background))) + (unless (equal curr new) + (set-face-background face new corfu--frame))) (set-window-buffer (frame-root-window corfu--frame) buffer) ;; XXX HACK Make the frame invisible before moving the popup from above to below the line in ;; order to avoid flicker.