summaryrefslogtreecommitdiff
path: root/corfu.el
diff options
context:
space:
mode:
authorDaniel Mendler <mail@daniel-mendler.de>2022-11-29 11:33:20 +0100
committerDaniel Mendler <mail@daniel-mendler.de>2022-11-29 11:33:28 +0100
commit76f36e0d201cc14cc552cc1d4d8ea68186d9ec75 (patch)
tree66072431292e39b4dd06080bc930383b1438783d /corfu.el
parente487adf3a6b92a12c7ea9b223e90ec39b327addb (diff)
Emacs 29 flicker reduction
Diffstat (limited to 'corfu.el')
-rw-r--r--corfu.el36
1 files changed, 23 insertions, 13 deletions
diff --git a/corfu.el b/corfu.el
index 5c20ec9..76f061d 100644
--- a/corfu.el
+++ b/corfu.el
@@ -375,6 +375,7 @@ FRAME is the existing frame."
(set-frame-parameter frame 'corfu--hide-timer nil))
(let* ((window-min-height 1)
(window-min-width 1)
+ (inhibit-redisplay t)
(x-gtk-resize-child-frames
(let ((case-fold-search t))
(and
@@ -417,19 +418,28 @@ FRAME is the existing frame."
(set-window-parameter win 'no-other-window t)
;; Mark window as dedicated to prevent frame reuse (#60)
(set-window-dedicated-p win t))
- (set-frame-size frame width height t)
- (if (frame-visible-p frame)
- ;; XXX HACK Avoid flicker when frame is already visible.
- ;; Redisplay, wait for resize and then move the frame.
- (unless (equal (frame-position frame) (cons x y))
- (redisplay 'force)
- (sleep-for 0.01)
- (set-frame-position frame x y))
- ;; XXX HACK: Force redisplay, otherwise the popup sometimes does not
- ;; display content.
- (set-frame-position frame x y)
- (redisplay 'force)
- (make-frame-visible frame))
+ ;; XXX HACK: Child frame popup behavior improved on Emacs 29.
+ ;; It seems we may not need the Emacs 27/28 hacks anymore.
+ (if (eval-when-compile (< emacs-major-version 29))
+ (let (inhibit-redisplay)
+ (set-frame-size frame width height t)
+ (if (frame-visible-p frame)
+ ;; XXX HACK Avoid flicker when frame is already visible.
+ ;; Redisplay, wait for resize and then move the frame.
+ (unless (equal (frame-position frame) (cons x y))
+ (redisplay 'force)
+ (sleep-for 0.01)
+ (set-frame-position frame x y))
+ ;; XXX HACK: Force redisplay, otherwise the popup sometimes does not
+ ;; display content.
+ (set-frame-position frame x y)
+ (redisplay 'force)
+ (make-frame-visible frame)))
+ (set-frame-size frame width height t)
+ (unless (equal (frame-position frame) (cons x y))
+ (set-frame-position frame x y))
+ (unless (frame-visible-p frame)
+ (make-frame-visible frame)))
(redirect-frame-focus frame parent)
frame))