summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroyuki Ikezoe <poincare@ikezoe.net>2010-03-16 13:01:18 -0400
committerMatthias Clasen <mclasen@redhat.com>2010-03-16 13:01:18 -0400
commit590ceded9627da1f25261fc8dc7537bbc0899f23 (patch)
treef956300d4e25789c5a162e7cb28df155e1050b87
parent996541d096d4d59e9baa384e5d5359a10567433e (diff)
downloadgtk+-590ceded9627da1f25261fc8dc7537bbc0899f23.tar.gz
Don't get settings unless we need them
Pointed out in bug 613028.
-rw-r--r--gtk/gtkstyle.c52
1 files changed, 31 insertions, 21 deletions
diff --git a/gtk/gtkstyle.c b/gtk/gtkstyle.c
index dd58c9e990..f18d76a2e7 100644
--- a/gtk/gtkstyle.c
+++ b/gtk/gtkstyle.c
@@ -2296,6 +2296,36 @@ scale_or_ref (GdkPixbuf *src,
}
}
+static gboolean
+lookup_icon_size (GtkStyle *style,
+ GtkWidget *widget,
+ GtkIconSize size,
+ gint *width,
+ gint *height)
+{
+ GdkScreen *screen;
+ GtkSettings *settings;
+
+ if (widget && gtk_widget_has_screen (widget))
+ {
+ screen = gtk_widget_get_screen (widget);
+ settings = gtk_settings_get_for_screen (screen);
+ }
+ else if (style && style->colormap)
+ {
+ screen = gdk_colormap_get_screen (style->colormap);
+ settings = gtk_settings_get_for_screen (screen);
+ }
+ else
+ {
+ settings = gtk_settings_get_default ();
+ GTK_NOTE (MULTIHEAD,
+ g_warning ("Using the default screen for gtk_default_render_icon()"));
+ }
+
+ return gtk_icon_size_lookup_for_settings (settings, size, width, height);
+}
+
static GdkPixbuf *
gtk_default_render_icon (GtkStyle *style,
const GtkIconSource *source,
@@ -2310,8 +2340,6 @@ gtk_default_render_icon (GtkStyle *style,
GdkPixbuf *scaled;
GdkPixbuf *stated;
GdkPixbuf *base_pixbuf;
- GdkScreen *screen;
- GtkSettings *settings;
/* Oddly, style can be NULL in this function, because
* GtkIconSet can be used without a style and if so
@@ -2322,25 +2350,7 @@ gtk_default_render_icon (GtkStyle *style,
g_return_val_if_fail (base_pixbuf != NULL, NULL);
- if (widget && gtk_widget_has_screen (widget))
- {
- screen = gtk_widget_get_screen (widget);
- settings = gtk_settings_get_for_screen (screen);
- }
- else if (style && style->colormap)
- {
- screen = gdk_colormap_get_screen (style->colormap);
- settings = gtk_settings_get_for_screen (screen);
- }
- else
- {
- settings = gtk_settings_get_default ();
- GTK_NOTE (MULTIHEAD,
- g_warning ("Using the default screen for gtk_default_render_icon()"));
- }
-
-
- if (size != (GtkIconSize) -1 && !gtk_icon_size_lookup_for_settings (settings, size, &width, &height))
+ if (size != (GtkIconSize) -1 && !lookup_icon_size(style, widget, size, &width, &height))
{
g_warning (G_STRLOC ": invalid icon size '%d'", size);
return NULL;