gtk4/0001-popover-Take-shadow-size-into-account-in-measure.patch
2024-09-04 21:52:44 -04:00

51 lines
1.8 KiB
Diff

From ca05f10c2ce0312779cb39979ef06aa052d785d4 Mon Sep 17 00:00:00 2001
From: Matthijs Velsink <mvelsink@gnome.org>
Date: Tue, 2 Jul 2024 02:50:29 +0200
Subject: [PATCH 1/2] popover: Take shadow size into account in measure
Commit b9487997 introduced shadows for GtkPopover. These are correctly
subtracted while allocating the child widget, but the child is not
measured with those shadows subtracted (as is correctly done for the
arrow). This can give criticals, for example with some wrapping labels.
To fix this, we subtract the shadow size from the `for_size` before
passing it to the measure() of the child widget.
Closes #5782
Fixes #6796
---
gtk/gtkpopover.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index bdd66f2f8b..f93075d2a0 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -1511,12 +1511,20 @@ gtk_popover_measure (GtkWidget *widget,
GtkCssStyle *style;
GtkBorder shadow_width;
- if (for_size >= 0 && (POS_IS_VERTICAL (priv->position) == (orientation == GTK_ORIENTATION_HORIZONTAL)))
- for_size -= tail_height;
-
style = gtk_css_node_get_style (gtk_widget_get_css_node (GTK_WIDGET (priv->contents_widget)));
gtk_css_shadow_value_get_extents (style->used->box_shadow, &shadow_width);
+ if (for_size >= 0)
+ {
+ if ((POS_IS_VERTICAL (priv->position) == (orientation == GTK_ORIENTATION_HORIZONTAL)))
+ for_size -= tail_height;
+
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ for_size -= shadow_width.top + shadow_width.bottom;
+ else
+ for_size -= shadow_width.left + shadow_width.right;
+ }
+
gtk_widget_measure (priv->contents_widget,
orientation, for_size,
minimum, natural,
--
2.46.0