51 lines
1.8 KiB
Diff
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
|
|
|