From: Sergey Bugaev Date: Sat, 2 Sep 2023 18:31:18 +0000 (+0300) Subject: entry, searchentry: Fix measuring baseline X-Git-Tag: archive/raspbian/4.12.4+ds-3+rpi1^2~21^2~2^2~29 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6ffbaa6bb0f28cdced408a8b6cd3ea81cf73771c;p=gtk4.git entry, searchentry: Fix measuring baseline If the entry has icons, we may end up increasing our minimum and natural height compared to the values the text child returned. In that case, we should also adjust the baseline values to account for the text being shifted down. Signed-off-by: Sergey Bugaev --- diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index 67281c2f36..30521f640c 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -1646,14 +1646,18 @@ gtk_entry_measure (GtkWidget *widget, { GtkEntry *entry = GTK_ENTRY (widget); GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry); + int text_min, text_nat; int i; gtk_widget_measure (priv->text, orientation, for_size, - minimum, natural, + &text_min, &text_nat, minimum_baseline, natural_baseline); + *minimum = text_min; + *natural = text_nat; + for (i = 0; i < MAX_ICONS; i++) { EntryIconInfo *icon_info = priv->icons[i]; @@ -1691,6 +1695,14 @@ gtk_entry_measure (GtkWidget *widget, *minimum = MAX (*minimum, prog_min); *natural = MAX (*natural, prog_nat); } + + if (orientation == GTK_ORIENTATION_VERTICAL) + { + if (G_LIKELY (*minimum_baseline >= 0)) + *minimum_baseline += (*minimum - text_min) / 2; + if (G_LIKELY (*natural_baseline >= 0)) + *natural_baseline += (*natural - text_nat) / 2; + } } static void diff --git a/gtk/gtksearchentry.c b/gtk/gtksearchentry.c index 6191d1f01e..eb35fc1bd4 100644 --- a/gtk/gtksearchentry.c +++ b/gtk/gtksearchentry.c @@ -301,6 +301,7 @@ gtk_search_entry_measure (GtkWidget *widget, int *natural_baseline) { GtkSearchEntry *entry = GTK_SEARCH_ENTRY (widget); + int text_min, text_nat; int icon_min, icon_nat; int spacing; @@ -309,9 +310,12 @@ gtk_search_entry_measure (GtkWidget *widget, gtk_widget_measure (entry->entry, orientation, for_size, - minimum, natural, + &text_min, &text_nat, minimum_baseline, natural_baseline); + *minimum = text_min; + *natural = text_nat; + gtk_widget_measure (entry->search_icon, GTK_ORIENTATION_HORIZONTAL, -1, @@ -344,6 +348,11 @@ gtk_search_entry_measure (GtkWidget *widget, { *minimum = MAX (*minimum, icon_min); *natural = MAX (*natural, icon_nat); + + if (G_LIKELY (*minimum_baseline >= 0)) + *minimum_baseline += (*minimum - text_min) / 2; + if (G_LIKELY (*natural_baseline >= 0)) + *natural_baseline += (*natural - text_nat) / 2; } }