summaryrefslogtreecommitdiff
path: root/gtk/gtklabel.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2021-11-06 16:17:59 +0100
committerBenjamin Otte <otte@redhat.com>2021-11-09 03:41:43 +0100
commitcce6a603a6aa054d2d5aaaf9b3b0671cb6a9970c (patch)
tree7af2d46b92d386adb529ea6ebe921f56e549f08b /gtk/gtklabel.c
parent27d286eb7a6fda4da0ecb4e5de3c3307ae02d49b (diff)
downloadgtk+-cce6a603a6aa054d2d5aaaf9b3b0671cb6a9970c.tar.gz
label: max-width-chars has no effect on smaller text
Having a short text and a large max-width-chars should request the natural width of the text, not the limit from max-width-chars. This caused huge message dialogs. Reftests added.
Diffstat (limited to 'gtk/gtklabel.c')
-rw-r--r--gtk/gtklabel.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index 3c3be85406..46af2fb174 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -1077,14 +1077,15 @@ get_static_size (GtkLabel *self,
int *minimum_baseline,
int *natural_baseline)
{
+ int minimum_default, natural_default;
PangoLayout *layout;
- layout = gtk_label_get_measuring_layout (self, NULL, -1);
+ get_default_widths (self, &minimum_default, &natural_default);
+
+ layout = gtk_label_get_measuring_layout (self, NULL, natural_default);
if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
- int minimum_default, natural_default;
-
pango_layout_get_size (layout, natural, NULL);
if (self->ellipsize)
{
@@ -1096,11 +1097,8 @@ get_static_size (GtkLabel *self,
else
*minimum = *natural;
- get_default_widths (self, &minimum_default, &natural_default);
if (minimum_default > *minimum)
*minimum = minimum_default;
- if (natural_default > -1)
- *natural = natural_default;
*natural = MAX (*minimum, *natural);
}
else
@@ -1180,7 +1178,6 @@ get_width_for_height (GtkLabel *self,
/* Natural width is natural width - or as wide as possible */
layout = gtk_label_get_measuring_layout (self, layout, natural_default);
pango_layout_get_size (layout, natural_width, NULL);
- *natural_width = MAX (*natural_width, natural_default);
*natural_width = MAX (*natural_width, *minimum_width);
}
else