app: add GTK+ patch to fix list-style combo-box popup width

Add a GTK+ patch that makes sure that list-style combo-box popups
are never narrower than their content.  This fixes the popup width
when using the System theme on Windows, for combo-boxes whose popup
cell-layout is wider than the combo-box cell-layout.  It is also
required for the next commit.
This commit is contained in:
Ell
2019-03-27 17:52:45 -04:00
parent 7edbad3144
commit 1749fd995c
2 changed files with 73 additions and 1 deletions

View File

@ -0,0 +1,73 @@
From f54275d743cf301ed4fcff41255929ece160392c Mon Sep 17 00:00:00 2001
From: Ell <ell_se@yahoo.com>
Date: Mon, 28 Jan 2019 14:46:07 -0500
Subject: [PATCH 1/2] ComboBox: make sure drop-down list is not narrower than
its natural width
When using the "appears-as-list" style, make sure the drop-down
list is not narrower than either the combo box, *or* the list's own
natural width, so that horizontal scrolling is never necessary.
---
gtk/gtkcombobox.c | 24 ++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)
diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c
index e74cd297c2..bd5c0d0a23 100644
--- a/gtk/gtkcombobox.c
+++ b/gtk/gtkcombobox.c
@@ -1816,21 +1816,11 @@ gtk_combo_box_list_position (GtkComboBox *combo_box,
gdk_window_get_root_coords (sample->window, *x, *y, x, y);
- *width = sample->allocation.width;
-
hpolicy = vpolicy = GTK_POLICY_NEVER;
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_window),
hpolicy, vpolicy);
gtk_widget_size_request (priv->scrolled_window, &popup_req);
- if (popup_req.width > *width)
- {
- hpolicy = GTK_POLICY_ALWAYS;
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_window),
- hpolicy, vpolicy);
- gtk_widget_size_request (priv->scrolled_window, &popup_req);
- }
-
*height = popup_req.height;
screen = gtk_widget_get_screen (GTK_WIDGET (combo_box));
@@ -1838,11 +1828,6 @@ gtk_combo_box_list_position (GtkComboBox *combo_box,
GTK_WIDGET (combo_box)->window);
gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
- if (*x < monitor.x)
- *x = monitor.x;
- else if (*x + *width > monitor.x + monitor.width)
- *x = monitor.x + monitor.width - *width;
-
if (*y + sample->allocation.height + *height <= monitor.y + monitor.height)
*y += sample->allocation.height;
else if (*y - *height >= monitor.y)
@@ -1861,10 +1846,17 @@ gtk_combo_box_list_position (GtkComboBox *combo_box,
if (popup_req.height > *height)
{
vpolicy = GTK_POLICY_ALWAYS;
-
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_window),
hpolicy, vpolicy);
+ gtk_widget_size_request (priv->scrolled_window, &popup_req);
}
+
+ *width = MAX (sample->allocation.width, popup_req.width);
+
+ if (*x < monitor.x)
+ *x = monitor.x;
+ else if (*x + *width > monitor.x + monitor.width)
+ *x = monitor.x + monitor.width - *width;
}
static gboolean
--
2.19.1

View File

@ -60,7 +60,6 @@ style "gimp-default-style"
GtkDialog::content-area-border = 0
GtkDialog::button-spacing = 6
GtkDialog::action-area-border = 12
GimpUnitComboBox::appears-as-list = 0
}
class "GtkWidget" style "gimp-default-style"