Subject: bug#34680: Display monitor frames not warmed up

From: Juri Linkov <[email-masked]>
Date: Tue, 05 Mar 2019 23:28:00 +0200

>>> I guess calling the function ‘message’ before calling
>>> ‘display-monitor-attributes-list’ performs some redisplay that adds
>>> the frame to the list of frames in ‘display-monitor-attributes-list’.
>>
>> It also fixes the issue when using any of the following
>> ‘redisplay’, ‘redraw-display’, ‘redraw-frame’, or just
>> ‘display-monitor-attributes-list’ before calling
>> ‘frame-monitor-attributes’ for the first time.
>>
>> Just calling ‘display-monitor-attributes-list’ somehow “registers” the
>> frame in the list of frames, so the next call of ‘display-monitor-attributes-list’
>> returns the attribute ‘frames’ containing the frame.
>
> I can't explain this, but this is the minimal patch that fixes my
> problem.  This dry run by calling gdk_display_get_monitor_at_window
> ignores its first wrong return value, so its subsequent calls return
> correct values.

I discovered this is a known problem yet unfixed for many years:

  https://debbugs.gnu.org/19706
  25.0.50; (+ nil nil -1) in desktop-restore-frameset

with references from

  http://lists.gnu.org/archive/html/emacs-devel/2015-12/msg00131.html
  http://lists.gnu.org/archive/html/emacs-devel/2017-01/msg00474.html

Although the original bug report was for macOS, the same bug I see is
for GDK on GNU/Linux.  At least, I found a fix for GDK that populates
the 'frames' attribute.  But if on macOS display-monitor-attributes-list
returns no 'frames' attribute, this feature is unavailable on macOS.