Subject: bug#63395: HiDPI/GTK: menubar height scaled twice in xg_update_frame_menubar()

From: Stefan Kangas <[email-masked]>
Date: Wed, 6 Sep 2023 04:05:05 -0700

Po Lu, could you please take a look at the below bug report?

Tobias Bading <[email-masked]> writes:

> It looks like
>
> --- %< ---
>
> commit 401ccb0b9c697fd3af026a72b6621a692e206aea
> Author:     Po Lu <[email-masked]>
> AuthorDate: Wed Jan 26 13:53:20 2022 +0800
> Commit:     Po Lu <[email-masked]>
> CommitDate: Wed Jan 26 13:53:20 2022 +0800
>
>     Fix GTK menu bar height reporting when scaled
>
>     * src/gtkutil.c (xg_update_frame_menubar): Multiply requisition
>     height by GDK scale.
>
> M       src/gtkutil.c
>
> --- >% ---
>
> tried to correct a problem that was already fixed by
>
> --- %< ---
>
> commit a05bafffdcb88df74408a8402cafc9829407c1e5
> Author:     Tobias Bading <[email-masked]>
> AuthorDate: Wed Nov 27 16:51:26 2019 +0100
> Commit:     Robert Pluim <[email-masked]>
> CommitDate: Tue Dec 3 08:54:31 2019 +0100
>
>     Fix incorrect GTK menus on HiDPI monitors with scaling factor > 1
>
>     This should fix Bug#31223, Bug#28106, Bug#23672 as well as Ubuntu bug
>     https://bugs.launchpad.net/ubuntu/+source/emacs25/+bug/1695228
>
>     Also fixes the formerly unscaled Y value returned by
>     frame-monitor-workarea (and display-monitor-attributes-list).
>
>     For details on why some GTK menus were empty please see thread
>     https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg01061.html
>
>     * src/gtkutil.c (menubar_map_cb, xg_update_frame_menubar): Scale up
>     req.height so that the menu bar's height is in device pixels as
>     expected.
>     (xg_event_is_for_menubar): Scale down rec.x and rec.y so that
>     gtk_widget_intersect() works as intended.
>     * src/xfns.c (Fx_display_monitor_attributes_list): Scale work.x and
>     work.y up to be in device pixels.
>
>     Copyright-paperwork-exempt: yes
>
> M       src/gtkutil.c
> M       src/xfns.c
>
> --- >% ---
>
> In emacs-29 as well as master req.height in xg_update_frame_menubar() is now
> multiplied with xg_get_scale(f) twice. As a result my window manager (Compiz
> from Ubuntu 20.04.6 LTS) assumes that the Emacs frame wouldn’t fit into the
> monitor’s workarea and ignores my requested position.
>
> Reverting 401ccb0b9c697fd3af026a72b6621a692e206aea fixes this for me.