]> Pileus Git - ~andy/gtk/commitdiff
entry: always prepare the style context when using it for entry icons
authorCosimo Cecchi <cosimoc@gnome.org>
Wed, 30 Nov 2011 16:40:32 +0000 (11:40 -0500)
committerCosimo Cecchi <cosimoc@gnome.org>
Wed, 30 Nov 2011 21:39:59 +0000 (16:39 -0500)
Make sure to always prepare the entry's style context for the entry icon
style when passing it to GtkIconHelper.

gtk/gtkentry.c

index b432f8ba966835a5004bfabb82aa38bf8955e39d..f0b6cb75bfdba9189f0b5f737f90271d10a7c982 100644 (file)
@@ -2450,20 +2450,47 @@ gtk_entry_init (GtkEntry *entry)
   gtk_entry_update_cached_style_values (entry);
 }
 
+static void
+gtk_entry_prepare_context_for_icon (GtkEntry             *entry,
+                                    GtkStyleContext      *context,
+                                    GtkEntryIconPosition  icon_pos)
+{
+  GtkEntryPrivate *priv = entry->priv;
+  EntryIconInfo *icon_info = priv->icons[icon_pos];
+  GtkWidget *widget;
+  GtkStateFlags state;
+
+  widget = GTK_WIDGET (entry);
+  state = GTK_STATE_FLAG_NORMAL;
+
+  if (!gtk_widget_is_sensitive (widget) || icon_info->insensitive)
+    state |= GTK_STATE_FLAG_INSENSITIVE;
+  else if (icon_info->prelight)
+    state |= GTK_STATE_FLAG_PRELIGHT;
+
+  gtk_style_context_save (context);
+
+  gtk_style_context_set_state (context, state);
+  gtk_style_context_add_class (context, GTK_STYLE_CLASS_IMAGE);
+}
+
 static gint
 get_icon_width (GtkEntry             *entry,
                 GtkEntryIconPosition  icon_pos)
 {
   GtkEntryPrivate *priv = entry->priv;
   EntryIconInfo *icon_info = priv->icons[icon_pos];
+  GtkStyleContext *context;
   gint width;
 
   if (!icon_info)
     return 0;
 
-  _gtk_icon_helper_get_size (icon_info->icon_helper,
-                             gtk_widget_get_style_context (GTK_WIDGET (entry)),
+  context = gtk_widget_get_style_context (GTK_WIDGET (entry));
+  gtk_entry_prepare_context_for_icon (entry, context, icon_pos);
+  _gtk_icon_helper_get_size (icon_info->icon_helper, context,
                              &width, NULL);
+  gtk_style_context_restore (context);
 
   return width;
 }
@@ -3336,30 +3363,6 @@ should_prelight (GtkEntry             *entry,
   return prelight;
 }
 
-static void
-gtk_entry_prepare_context_for_icon (GtkEntry             *entry,
-                                    GtkStyleContext      *context,
-                                    GtkEntryIconPosition  icon_pos)
-{
-  GtkEntryPrivate *priv = entry->priv;
-  EntryIconInfo *icon_info = priv->icons[icon_pos];
-  GtkWidget *widget;
-  GtkStateFlags state;
-
-  widget = GTK_WIDGET (entry);
-  state = GTK_STATE_FLAG_NORMAL;
-
-  if (!gtk_widget_is_sensitive (widget) || icon_info->insensitive)
-    state |= GTK_STATE_FLAG_INSENSITIVE;
-  else if (icon_info->prelight)
-    state |= GTK_STATE_FLAG_PRELIGHT;
-
-  gtk_style_context_save (context);
-
-  gtk_style_context_set_state (context, state);
-  gtk_style_context_add_class (context, GTK_STYLE_CLASS_IMAGE);
-}
-
 static void
 draw_icon (GtkWidget            *widget,
            cairo_t              *cr,