- 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;
-
- if ((icon_info == NULL) ||
- ((icon_info->pixbuf != NULL) && icon_info->last_state == state))
- return;
-
- icon_info->last_state = state;
-
- gtk_style_context_save (context);
- gtk_style_context_set_state (context, state);
- gtk_style_context_add_class (context, GTK_STYLE_CLASS_IMAGE);
-
- switch (icon_info->storage_type)
- {
- case GTK_IMAGE_EMPTY:
- case GTK_IMAGE_PIXBUF:
- break;
- case GTK_IMAGE_STOCK:
- icon_info->pixbuf = create_normal_pixbuf (context, icon_info->stock_id,
- GTK_ICON_SIZE_MENU);
-
- if (!icon_info->pixbuf)
- icon_info->pixbuf = create_normal_pixbuf (context,
- GTK_STOCK_MISSING_IMAGE,
- GTK_ICON_SIZE_MENU);
- break;
-
- case GTK_IMAGE_ICON_NAME:
- screen = gtk_widget_get_screen (widget);
- if (screen)
- {
- icon_theme = gtk_icon_theme_get_for_screen (screen);
- settings = gtk_settings_get_for_screen (screen);
-
- gtk_icon_size_lookup_for_settings (settings,
- GTK_ICON_SIZE_MENU,
- &width, &height);
-
- info = gtk_icon_theme_lookup_icon (icon_theme,
- icon_info->icon_name,
- MIN (width, height),
- 0);
-
- icon_info->pixbuf =
- ensure_stated_icon_from_info (context, info);
-
- if (info)
- gtk_icon_info_free (info);
- }
- break;
-
- case GTK_IMAGE_GICON:
- screen = gtk_widget_get_screen (widget);
- if (screen)
- {
- icon_theme = gtk_icon_theme_get_for_screen (screen);
- settings = gtk_settings_get_for_screen (screen);
-
- gtk_icon_size_lookup_for_settings (settings,
- GTK_ICON_SIZE_MENU,
- &width, &height);
-
- info = gtk_icon_theme_lookup_by_gicon (icon_theme,
- icon_info->gicon,
- MIN (width, height),
- GTK_ICON_LOOKUP_USE_BUILTIN);
-
- icon_info->pixbuf =
- ensure_stated_icon_from_info (context, info);
-
- if (info)
- gtk_icon_info_free (info);
- }
- break;