From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Robert Pluim Newsgroups: gmane.emacs.bugs Subject: bug#31223: [PATCH] Fix empty/incorrect GTK menus on HiDPI monitors with window scaling factor > 1 Date: Thu, 28 Nov 2019 09:20:35 +0100 Message-ID: References: <0425bcb6-97ee-4845-3571-9db492966a34@web.de> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="59034"; mail-complaints-to="usenet@blaine.gmane.org" Cc: 31223@debbugs.gnu.org To: Tobias Bading Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Nov 28 09:21:31 2019 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1iaF3J-000FCn-Ff for geb-bug-gnu-emacs@m.gmane.org; Thu, 28 Nov 2019 09:21:30 +0100 Original-Received: from localhost ([::1]:46352 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iaF3I-0003wj-AV for geb-bug-gnu-emacs@m.gmane.org; Thu, 28 Nov 2019 03:21:28 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:44225) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iaF2y-0003v1-7L for bug-gnu-emacs@gnu.org; Thu, 28 Nov 2019 03:21:09 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iaF2r-0006Eo-Uf for bug-gnu-emacs@gnu.org; Thu, 28 Nov 2019 03:21:07 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:50606) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iaF2r-0006Dr-Oe for bug-gnu-emacs@gnu.org; Thu, 28 Nov 2019 03:21:01 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1iaF2r-0002V5-L5 for bug-gnu-emacs@gnu.org; Thu, 28 Nov 2019 03:21:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Robert Pluim Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 28 Nov 2019 08:21:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 31223 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: help Original-Received: via spool by 31223-submit@debbugs.gnu.org id=B31223.15749292479558 (code B ref 31223); Thu, 28 Nov 2019 08:21:01 +0000 Original-Received: (at 31223) by debbugs.gnu.org; 28 Nov 2019 08:20:47 +0000 Original-Received: from localhost ([127.0.0.1]:56576 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iaF2d-0002U6-3G for submit@debbugs.gnu.org; Thu, 28 Nov 2019 03:20:47 -0500 Original-Received: from mail-wr1-f43.google.com ([209.85.221.43]:42418) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iaF2Z-0002Tq-QR for 31223@debbugs.gnu.org; Thu, 28 Nov 2019 03:20:45 -0500 Original-Received: by mail-wr1-f43.google.com with SMTP id a15so29938580wrf.9 for <31223@debbugs.gnu.org>; Thu, 28 Nov 2019 00:20:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:gmane-reply-to-list:date:in-reply-to :message-id:mime-version; bh=0RaZ9/EkSvB19g+MEXIbFLDK0zO9IzW6ADTHq6W1qAo=; b=MouLxaGUHcRu1P1/kFlDJ9EjG6NQ99djiuTZ5AJ4OFBN56WrGipv6y9ml14kIZ9a/t lDDZDVvIpELz/quL1aB2pT5He8UyIBebAPCQ/SDfOpbAiFz16SECIyVxvrEe7mJJ1b4z O9IYuAOu0coKksKfziyAO9v88WRfPJ6TFCLt60uxX+rQESGaO5a+Wwh3JTtVTSQ95RV8 j6ChUSPhcNaL+VaYM4TACKBV8Najb2U1Q/xihG+O1OPxuvJ0pfe7B3DQnar1utGDX6T8 qk7ddUxqzTy0/vPK04b9BO8CNPKCpzgOQSf14w6PTRSEb0ioiWy07Nrv186aY3tZCVu3 0rcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references :gmane-reply-to-list:date:in-reply-to:message-id:mime-version; bh=0RaZ9/EkSvB19g+MEXIbFLDK0zO9IzW6ADTHq6W1qAo=; b=p9TdVQhpZcM/2A3djFtICmmuxO4xA265Uu58kw4336S4lubPFeKkaxiZYFZEu+htHD QQy/mePYI8esGq3FPuG0iVVRSBOLPgzhnKM0Ly95tyjY9Jy8oT3Psy9FK7GJEgzifJyJ X2mUOg1sKAhXsO3uwFhJBEVabSUs2/JtqCANBofSFdhfQWYKbha2TmjRT/wCIgMJeh/t atsTYq5DgwSnue/B4GhDDQgkD40zZPa/DCYisMnM9+/Qy0P+ZoVggplEE7uERcknsf3j vhBE7/KFrmSTOKBk1GWa55CwHYoEVDfnvmkVNkcXcYEuKfAdJjR6TGgz6WSAErV+28Cu m+vg== X-Gm-Message-State: APjAAAV6TfI7ZowJhderbnbL+KLER0EXVyLjrWaD+I18yXSDG6gLbJ9H PUzBMwJ4BspMjv2S/nQNoLE6LtNg X-Google-Smtp-Source: APXvYqxgdr5/y8UVn8IBqsOL/CigTU6R1fFL+4cmSRj89TOh+YtjBtn/FuAUGgxS8WrWuVSjQ/da4g== X-Received: by 2002:adf:e911:: with SMTP id f17mr49081557wrm.300.1574929237365; Thu, 28 Nov 2019 00:20:37 -0800 (PST) Original-Received: from rpluim-mac ([149.5.228.1]) by smtp.gmail.com with ESMTPSA id 19sm25219252wrc.47.2019.11.28.00.20.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Nov 2019 00:20:36 -0800 (PST) Gmane-Reply-To-List: yes In-Reply-To: <0425bcb6-97ee-4845-3571-9db492966a34@web.de> (Tobias Bading's message of "Wed, 27 Nov 2019 17:03:32 +0100") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:172584 Archived-At: >>>>> On Wed, 27 Nov 2019 17:03:32 +0100, Tobias Bading said: Tobias> This should fix Bug#31223, Bug#28106, Bug#23672 as well as Ubuntu bug Tobias> https://bugs.launchpad.net/ubuntu/+source/emacs25/+bug/1695228 If those are all the same bug we should merge them. Tobias> Also fixes the formerly unscaled Y value returned by Tobias> frame-monitor-workarea (and display-monitor-attributes-list). Tobias> For details on why some GTK menus were empty please see thread Tobias> https://lists.gnu.org/archive/html/emacs-devel/2019-11/msg01061.html Thanks for that, I can reproduce with that (I never use the Dired menus). Tobias> diff --git a/src/gtkutil.c b/src/gtkutil.c Tobias> index cf5c31aa20..7e6db57c9d 100644 Tobias> --- a/src/gtkutil.c Tobias> +++ b/src/gtkutil.c Tobias> @@ -3471,6 +3471,7 @@ menubar_map_cb (GtkWidget *w, gpointer user_data) Tobias> GtkRequisition req; Tobias> struct frame *f = user_data; Tobias> gtk_widget_get_preferred_size (w, NULL, &req); Tobias> + req.height *= xg_get_scale (f); Tobias> if (FRAME_MENUBAR_HEIGHT (f) != req.height) Tobias> { Tobias> FRAME_MENUBAR_HEIGHT (f) = req.height; Tobias> @@ -3502,7 +3503,7 @@ xg_update_frame_menubar (struct frame *f) Tobias> g_signal_connect (x->menubar_widget, "map", G_CALLBACK (menubar_map_cb), f); Tobias> gtk_widget_show_all (x->menubar_widget); Tobias> gtk_widget_get_preferred_size (x->menubar_widget, NULL, &req); Tobias> - Tobias> + req.height *= xg_get_scale (f); Tobias> if (FRAME_MENUBAR_HEIGHT (f) != req.height) Tobias> { Tobias> FRAME_MENUBAR_HEIGHT (f) = req.height; Yes. Tobias> @@ -3568,8 +3569,9 @@ xg_event_is_for_menubar (struct frame *f, const XEvent *event) Tobias> list = gtk_container_get_children (GTK_CONTAINER (x->menubar_widget)); Tobias> if (! list) return 0; Tobias> - rec.x = event->xbutton.x; Tobias> - rec.y = event->xbutton.y; Tobias> + int scale = xg_get_scale (f); Tobias> + rec.x = event->xbutton.x / scale; Tobias> + rec.y = event->xbutton.y / scale; Tobias> rec.width = 1; Tobias> rec.height = 1; Yes. You need this as well, I think: diff --git a/src/gtkutil.c b/src/gtkutil.c index cf5c31aa20..4f8b06941b 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -3503,6 +3503,8 @@ xg_update_frame_menubar (struct frame *f) gtk_widget_show_all (x->menubar_widget); gtk_widget_get_preferred_size (x->menubar_widget, NULL, &req); + req.height *= xg_get_scale (f); if (FRAME_MENUBAR_HEIGHT (f) != req.height) { FRAME_MENUBAR_HEIGHT (f) = req.height; Tobias> diff --git a/src/xfns.c b/src/xfns.c Tobias> index b1b40702c2..47aa19607f 100644 Tobias> --- a/src/xfns.c Tobias> +++ b/src/xfns.c Tobias> @@ -5093,6 +5093,8 @@ DEFUN ("x-display-monitor-attributes-list", Fx_display_monitor_attributes_list, Tobias> #endif Tobias> rec.width *= scale; Tobias> rec.height *= scale; Tobias> + work.x *= scale; Tobias> + work.y *= scale; Tobias> work.width *= scale; Tobias> work.height *= scale; This seems correct as well. Probably rec.x and rec.y need scaling as well, for the multi-monitor case, which will require some cabling for me to test. Robert