gtk4: fix combobox popups

This commit is contained in:
wszqkzqk
2023-03-08 11:26:32 +08:00
parent d3ced7f011
commit 53622e07ee
2 changed files with 71 additions and 3 deletions

View File

@@ -0,0 +1,58 @@
From 1fc0fe9ac83104a98b6403eb5ee7dd32cb7c0b51 Mon Sep 17 00:00:00 2001
From: wszqkzqk <wszqkzqk@qq.com>
Date: Wed, 8 Mar 2023 11:19:48 +0800
Subject: [PATCH] combobox: Avoid extra queue_resize()
width-request already ensures it's above the minimum width, so avoid an
extra queue_resize() when setting size request to (-1, -1).
This is the same way as GtkDropDown works. This also unbreaks
GtkComboBox after the recent allocation fix in
75a417e33708dab2bdb2f784a8952e085a12bf03.
Incidentally, this also makes GtkComboBox actually resize its popup as
intended (that was broken before).
I don't think this is ultimately the final fix, sometimes I still get
allocation warnings. But the proper fix will probably involve changing
some more allocation machinery around popovers. This is good enough for
now.
---
gtk/deprecated/gtkcombobox.c | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/gtk/deprecated/gtkcombobox.c b/gtk/deprecated/gtkcombobox.c
index 618f0780b7..1e76b38f41 100644
--- a/gtk/deprecated/gtkcombobox.c
+++ b/gtk/deprecated/gtkcombobox.c
@@ -366,7 +366,6 @@ gtk_combo_box_size_allocate (GtkWidget *widget,
{
GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
GtkComboBoxPrivate *priv = gtk_combo_box_get_instance_private (combo_box);
- int menu_width;
gtk_widget_size_allocate (priv->box,
&(GtkAllocation) {
@@ -374,17 +373,8 @@ gtk_combo_box_size_allocate (GtkWidget *widget,
width, height
}, baseline);
- gtk_widget_set_size_request (priv->popup_widget, -1, -1);
-
- if (priv->popup_fixed_width)
- gtk_widget_measure (priv->popup_widget, GTK_ORIENTATION_HORIZONTAL, -1,
- &menu_width, NULL, NULL, NULL);
- else
- gtk_widget_measure (priv->popup_widget, GTK_ORIENTATION_HORIZONTAL, -1,
- NULL, &menu_width, NULL, NULL);
-
- gtk_widget_set_size_request (priv->popup_widget,
- MAX (width, menu_width), -1);
+ gtk_widget_set_size_request (priv->popup_widget, width, -1);
+ gtk_widget_queue_resize (priv->popup_widget);
gtk_popover_present (GTK_POPOVER (priv->popup_widget));
}
--
2.39.2

View File

@@ -4,7 +4,7 @@ _realname=gtk4
pkgbase=mingw-w64-${_realname}
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
pkgver=4.10.0
pkgrel=1
pkgrel=2
pkgdesc="GObject-based multi-platform GUI toolkit (v4) (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32')
@@ -29,8 +29,18 @@ depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs"
"${MINGW_PACKAGE_PREFIX}-gtk-update-icon-cache"
"${MINGW_PACKAGE_PREFIX}-gst-plugins-bad-libs"
"${MINGW_PACKAGE_PREFIX}-shared-mime-info")
source=("https://download.gnome.org/sources/gtk/${pkgver:0:4}/gtk-${pkgver}.tar.xz")
sha256sums=('8dc1e7c3b3a46772f0fa416a8ca3fd21d0d0b3b03fb307d2e7327ebee69626e4')
source=("https://download.gnome.org/sources/gtk/${pkgver:0:4}/gtk-${pkgver}.tar.xz"
"0001-combobox-Avoid-extra-queue_resize.patch")
sha256sums=('8dc1e7c3b3a46772f0fa416a8ca3fd21d0d0b3b03fb307d2e7327ebee69626e4'
'7016a9aa4247ba28a092bbe983bafa5be6c5fbef9f287cf8a0e4eba250cbc31b')
prepare() {
cd ${srcdir}/gtk-${pkgver}
# Fix combobox popups
# https://gitlab.gnome.org/GNOME/gtk/-/issues/5644
# https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/5608
patch -p1 -i "${srcdir}/0001-combobox-Avoid-extra-queue_resize.patch"
}
build() {
mkdir -p build-${MSYSTEM} && cd build-${MSYSTEM}