[gtk] searchentry: Always measure and allocate icon
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk] searchentry: Always measure and allocate icon
- Date: Sat, 27 Apr 2019 06:41:24 +0000 (UTC)
commit cc4b3798e53a3efc63c14b98d3f70488801a70a1
Author: Timm Bäder <mail baedert org>
Date: Sat Apr 27 08:20:30 2019 +0200
searchentry: Always measure and allocate icon
Just measuring it (so the warning goes away) but then not using the
values will later underallocate the text widget.
Instead, always reserve space for the icon (which will inevitable be
visible as soon as the searchentry is actually being used).
Fixes #1831
gtk/gtksearchentry.c | 42 +++++++++++++++++++++++++-----------------
1 file changed, 25 insertions(+), 17 deletions(-)
---
diff --git a/gtk/gtksearchentry.c b/gtk/gtksearchentry.c
index 281a99fb61..bfd98571f3 100644
--- a/gtk/gtksearchentry.c
+++ b/gtk/gtksearchentry.c
@@ -220,7 +220,7 @@ gtk_search_entry_measure (GtkWidget *widget,
int *natural,
int *minimum_baseline,
int *natural_baseline)
-{
+{
GtkSearchEntry *entry = GTK_SEARCH_ENTRY (widget);
GtkSearchEntryPrivate *priv = gtk_search_entry_get_instance_private (entry);
int icon_min = 0, icon_nat = 0;
@@ -229,10 +229,20 @@ gtk_search_entry_measure (GtkWidget *widget,
minimum, natural,
minimum_baseline, natural_baseline);
- if (priv->icon && gtk_widget_get_visible (priv->icon))
- gtk_widget_measure (priv->icon, orientation, for_size,
- &icon_min, &icon_nat,
- NULL, NULL);
+ gtk_widget_measure (priv->icon, orientation, for_size,
+ &icon_min, &icon_nat,
+ NULL, NULL);
+
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ {
+ *minimum += icon_min;
+ *natural += icon_nat;
+ }
+ else
+ {
+ *minimum = MAX (*minimum, icon_min);
+ *natural = MAX (*natural, icon_nat);
+ }
}
static void
@@ -240,16 +250,15 @@ gtk_search_entry_size_allocate (GtkWidget *widget,
int width,
int height,
int baseline)
-{
+{
GtkSearchEntry *entry = GTK_SEARCH_ENTRY (widget);
GtkSearchEntryPrivate *priv = gtk_search_entry_get_instance_private (entry);
int icon_min = 0, icon_nat = 0;
int text_width;
- if (priv->icon && gtk_widget_get_visible (priv->icon))
- gtk_widget_measure (priv->icon, GTK_ORIENTATION_HORIZONTAL, -1,
- &icon_min, &icon_nat,
- NULL, NULL);
+ gtk_widget_measure (priv->icon, GTK_ORIENTATION_HORIZONTAL, -1,
+ &icon_min, &icon_nat,
+ NULL, NULL);
text_width = width - icon_nat;
@@ -257,10 +266,9 @@ gtk_search_entry_size_allocate (GtkWidget *widget,
&(GtkAllocation) { 0, 0, text_width, height },
baseline);
- if (priv->icon && gtk_widget_get_visible (priv->icon))
- gtk_widget_size_allocate (priv->icon,
- &(GtkAllocation) { text_width, 0, icon_nat, height },
- baseline);
+ gtk_widget_size_allocate (priv->icon,
+ &(GtkAllocation) { text_width, 0, icon_nat, height },
+ baseline);
}
static AtkObject *
@@ -513,7 +521,7 @@ gtk_search_entry_changed (GtkEditable *editable,
if (str == NULL || *str == '\0')
{
- gtk_widget_hide (priv->icon);
+ gtk_widget_set_child_visible (priv->icon, FALSE);
if (priv->delayed_changed_id > 0)
{
@@ -524,7 +532,7 @@ gtk_search_entry_changed (GtkEditable *editable,
}
else
{
- gtk_widget_show (priv->icon);
+ gtk_widget_set_child_visible (priv->icon, TRUE);
/* Queue up the timeout */
reset_timeout (entry);
@@ -569,7 +577,7 @@ gtk_search_entry_init (GtkSearchEntry *entry)
priv->icon = gtk_image_new_from_icon_name ("edit-clear-symbolic");
gtk_widget_set_tooltip_text (priv->icon, _("Clear entry"));
gtk_widget_set_parent (priv->icon, GTK_WIDGET (entry));
- gtk_widget_hide (priv->icon);
+ gtk_widget_set_child_visible (priv->icon, FALSE);
press = gtk_gesture_multi_press_new ();
g_signal_connect (press, "released", G_CALLBACK (gtk_search_entry_icon_release), entry);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]