diff options
| author | Daniel Mendler <mail@daniel-mendler.de> | 2021-07-17 00:33:19 +0200 |
|---|---|---|
| committer | Daniel Mendler <mail@daniel-mendler.de> | 2021-07-17 00:33:19 +0200 |
| commit | 5824ef853e8cde6beab8edf6e550680f894512cb (patch) | |
| tree | 5e66a64d733c44859e0a0c4ad8f578a51d99ac52 | |
| parent | e335a13cfe5a61925f1cc025d61f5f1199390216 (diff) | |
Another child frame bug, add comment
| -rw-r--r-- | corfu.el | 19 |
1 files changed, 13 insertions, 6 deletions
@@ -319,12 +319,19 @@ 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)) + ;; XXX HACK Setting the same frame-parameter/face-background is not a nop (BUG!). + ;; Check explicitly before applying the setting. + ;; Without the check, the frame flickers on Mac. + ;; With the check, the inner frame sometimes does not get updated sometimes (BUG!). + (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. |
