Subject: bug#52666: 27.0.50; Unexpected mode line flickering when creating frames

From: martin rudalics <[email-masked]>
Date: Mon, 20 Dec 2021 10:18:48 +0100

> to reproduce this issue, please put the following form in a new file
 > flicker.el:
 >
 >      (while t
 >        (let ((f (make-frame `((parent-frame . ,(selected-frame))
 >                               (left . 200)
 >                               (top . 200)))))
 >          (set-frame-width f 200 nil t)
 >          (set-frame-height f 200 nil t)
 >          (sit-for 0.3)
 >          (delete-frame f)))
 >
 > and then invoke Emacs with:
 >
 >      $ emacs -Q -l flicker.el
 >
 > The form repeatedly creates and destroys a child frame, offset 200
 > pixels both horizontally and vertically from the top left corner of the
 > frame.
 >
 > Unexpectedly, the mode line flickers in many (though apparently not all)
 > iterations, starting at 200 pixels horizontally from the left, even
 > though the frame does not overlap the mode line in any way.
 >
 > Ideally, the creation of the frame should not have any visible effect on
 > the mode line.

I can reproduce the flickering with a GTK build where the child frame
never appears at all.  I cannot reproduce it with a Lucid build where
the child frame appears shortly and gets deleted as expected.  In either
case the mode line is redrawn because it changes from active to inactive
and back.

 > Could the pleasant double buffering feature I have read about help to
 > remove this flickering when creating child frames? Please let me know if
 > you can reproduce the issue or need any further information. I can
 > reproduce the flickering both on OSX and on Debian.

The (sit-for 0.3) might conflict with 'x-wait-for-event-timeout' so
playing around with the latter could help.  BTW is yours really a Lucid
build on a Mac?

martin