コード例 #1
0
ファイル: gui-menu.c プロジェクト: aitjcize/Gummi
GuMenuGui* menugui_init(GtkBuilder* builder)
{
  g_return_val_if_fail(GTK_IS_BUILDER(builder), NULL);

  GuMenuGui* m = g_new0(GuMenuGui, 1);

  m->menu_projcreate = GTK_MENU_ITEM(
                         gtk_builder_get_object(builder, "menu_projcreate"));
  m->menu_projopen = GTK_MENU_ITEM(
                       gtk_builder_get_object(builder, "menu_projopen"));
  m->menu_projclose = GTK_MENU_ITEM(
                        gtk_builder_get_object(builder, "menu_projclose"));
  m->menu_cut = GTK_MENU_ITEM(gtk_builder_get_object(builder, "menu_cut"));
  m->menu_copy = GTK_MENU_ITEM(gtk_builder_get_object(builder, "menu_copy"));

#ifdef WIN32
  // Please do NOT enable for nix, it has no place on a free OS ;)
  GtkWidget* donate =
    gtk_image_menu_item_new_with_label("Support this Project");
  gtk_image_menu_item_set_image
  (GTK_IMAGE_MENU_ITEM(donate),
   GTK_WIDGET(gtk_image_new_from_stock(
                GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_MENU)));
  GtkWidget* helpmenu =
    GTK_WIDGET(gtk_builder_get_object(builder, "menu11"));
  gtk_menu_prepend(GTK_MENU(helpmenu), donate);
  gtk_signal_connect_object(GTK_OBJECT(donate), "activate",
                            GTK_SIGNAL_FUNC(on_menu_donate_activate),
                            NULL);
#endif

  /* TODO: There has to be a better way than this.. (bug 246)
  GtkSettings *settings = gtk_settings_get_default();
  gchar *iconsizes;
  g_object_get(settings, "gtk-icon-sizes", &iconsizes, NULL);
  if (iconsizes != NULL) {
      printf("%s\n", iconsizes);
  }*/

#ifdef WIN32
  // The 2 non-stock menu items have their pixel size values set
  // to the default 16x16 in GLADE. The normal icon-size value is
  // normally set by the GTK theme in gtkrc. For themes using
  // non-default icon sizes or Windows, this 16x16 value will be
  // wrong. This code sets it to match the gtkrc file that we
  // supply with the Windows builds:
  GtkWidget* export = gtk_image_menu_item_get_image(
                        GTK_IMAGE_MENU_ITEM(gtk_builder_get_object(builder, "menu_export")));
  GtkWidget* update = gtk_image_menu_item_get_image(
                        GTK_IMAGE_MENU_ITEM(gtk_builder_get_object(builder, "menu_update")));
  gtk_image_set_pixel_size(GTK_IMAGE(export), 13);
  gtk_image_set_pixel_size(GTK_IMAGE(update), 13);
#endif




  return m;
}
コード例 #2
0
static void
set_have_icons (AppearanceData *data, gboolean value)
{
  static const char *menu_item_names[] = {
    "menu_item_1",
    "menu_item_2",
    "menu_item_3",
    "menu_item_4",
    "menu_item_5",
    "cut",
    "copy",
    "paste",
    NULL
  };

  const char **name;

  for (name = menu_item_names; *name != NULL; name++) {
    GtkImageMenuItem *item = GTK_IMAGE_MENU_ITEM (glade_xml_get_widget (data->xml, *name));
    GtkWidget *image;

    if (value) {
      image = g_object_get_data (G_OBJECT (item), "image");
      if (image) {
	gtk_image_menu_item_set_image (item, image);
	g_object_unref (image);
      }
    } else {
      image = gtk_image_menu_item_get_image (item);
      g_object_set_data (G_OBJECT (item), "image", image);
      g_object_ref (image);
      gtk_image_menu_item_set_image (item, NULL);
    }
  }
}
コード例 #3
0
ファイル: gtkimagemenuitem.c プロジェクト: Davletvm/gtk
static gboolean
activatable_update_gicon (GtkImageMenuItem *image_menu_item, GtkAction *action)
{
    GtkWidget   *image;
    GIcon       *icon = gtk_action_get_gicon (action);
    const gchar *stock_id;
    gboolean     ret = FALSE;

    stock_id = gtk_action_get_stock_id (action);

    G_GNUC_BEGIN_IGNORE_DEPRECATIONS;

    image = gtk_image_menu_item_get_image (image_menu_item);

    if (icon && GTK_IS_IMAGE (image) &&
            !(stock_id && gtk_icon_factory_lookup_default (stock_id)))
    {
        gtk_image_set_from_gicon (GTK_IMAGE (image), icon, GTK_ICON_SIZE_MENU);
        ret = TRUE;
    }

    G_GNUC_END_IGNORE_DEPRECATIONS;

    return ret;
}
コード例 #4
0
static void
set_item_stock (GtkWidget  *mi,
                const char *stock_id)
{
  GtkWidget *image;

  image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (mi));

  if (stock_id == NULL)
    {
      if (image != NULL)
        gtk_widget_destroy (image);
      return;
    }

  if (image == NULL)
    {
      image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU);
      gtk_widget_show (image);
      gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image);
    }
  else
    {
      gtk_image_set_from_stock (GTK_IMAGE (image), stock_id,
                                GTK_ICON_SIZE_MENU);
    }
}
コード例 #5
0
static void
image_clicked_cb (GtkWidget *widget, gpointer data)
{
  gtk_image_set_from_stock (GTK_IMAGE (gtk_image_menu_item_get_image (
                            GTK_IMAGE_MENU_ITEM (widget))),
                            GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
}
コード例 #6
0
ファイル: gtkimagemenuitem.c プロジェクト: raja651/gtk
static void
gtk_image_menu_item_get_property (GObject         *object,
                                  guint            prop_id,
                                  GValue          *value,
                                  GParamSpec      *pspec)
{
    GtkImageMenuItem *image_menu_item = GTK_IMAGE_MENU_ITEM (object);

    switch (prop_id)
    {
    case PROP_IMAGE:
        g_value_set_object (value, gtk_image_menu_item_get_image (image_menu_item));
        break;
    case PROP_USE_STOCK:
        G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
        g_value_set_boolean (value, gtk_image_menu_item_get_use_stock (image_menu_item));
        G_GNUC_END_IGNORE_DEPRECATIONS;
        break;
    case PROP_ALWAYS_SHOW_IMAGE:
        g_value_set_boolean (value, gtk_image_menu_item_get_always_show_image (image_menu_item));
        break;
    default:
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
        break;
    }
}
コード例 #7
0
static void
menuitem_style_set_cb (GtkWidget     *menuitem,
                       GtkStyle      *old_style,
                       ShellStatusMenu *status)
{
  GtkWidget *image;
  const char *icon_name;
  ShellStatusMenuPrivate *priv = status->priv;

  if (menuitem == priv->login_screen_item)
    icon_name = "system-users";
  else if (menuitem == priv->lock_screen_item)
    icon_name = "system-lock-screen";
  else if (menuitem == priv->quit_session_item)
    icon_name = "system-log-out";
  else if (menuitem == priv->account_item)
    icon_name = "user-info";
  else if (menuitem == priv->control_panel_item)
    icon_name = "preferences-desktop";
  else
    icon_name = GTK_STOCK_MISSING_IMAGE;

  image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (menuitem));
  gtk_image_set_pixel_size (GTK_IMAGE (image), priv->pixel_size);
  gtk_image_set_from_icon_name (GTK_IMAGE (image), icon_name, priv->icon_size);
}
コード例 #8
0
static void
set_action_image_temporary_visibility (NemoContextMenuMenuItem *item,
                                       gboolean                 visible)
{
    GtkWidget *image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (item));

    if (!visible) {
        gtk_widget_set_visible (image, FALSE);
    } else {
        if (gtk_image_menu_item_get_always_show_image (GTK_IMAGE_MENU_ITEM (item))) {
            gtk_widget_set_visible (image, TRUE);
        }
    }
}
コード例 #9
0
ファイル: panel-menu-items.c プロジェクト: wiliwe/gnome-panel
static void
panel_desktop_menu_item_on_presence_changed (PanelSessionManager             *manager,
					     PanelSessionManagerPresenceType  presence_type,
					     PanelDesktopMenuItem            *desktop_item)
{
	const char *icon;
	GtkWidget  *image;
	GList      *l;

	switch (presence_type) {
	case PANEL_SESSION_MANAGER_PRESENCE_AVAILABLE:
		icon = PANEL_ICON_USER_AVAILABLE;
		break;
        case PANEL_SESSION_MANAGER_PRESENCE_INVISIBLE:
		icon = PANEL_ICON_USER_INVISIBLE;
		break;
        case PANEL_SESSION_MANAGER_PRESENCE_BUSY:
		icon = PANEL_ICON_USER_BUSY;
		break;
	case PANEL_SESSION_MANAGER_PRESENCE_IDLE:
	default:
		icon = PANEL_ICON_USER_IDLE;
		break;
	}

	image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (desktop_item));
	/* we only have an image if we are specifically using an icon for this
	 * menu */
	if (image) {
		gtk_image_set_from_icon_name (GTK_IMAGE (image),
					      icon, panel_menu_icon_get_size ());
	}

	for (l = desktop_item->priv->presence_items; l != NULL; l = l->next) {
		PanelSessionManagerPresenceType for_presence;
		GObject *object = l->data;

		for_presence = GPOINTER_TO_INT (g_object_get_data (object,
								   "panel-menu-presence"));
		g_signal_handlers_block_by_func (object,
						 panel_menu_item_activate_presence,
						 desktop_item->priv->account_manager);
		gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (object),
						for_presence == presence_type);
		g_signal_handlers_unblock_by_func (object,
						   panel_menu_item_activate_presence,
						   desktop_item->priv->account_manager);
	}
}
コード例 #10
0
ファイル: gtkimagemenuitem.c プロジェクト: Davletvm/gtk
static void
activatable_update_icon_name (GtkImageMenuItem *image_menu_item, GtkAction *action)
{
    GtkWidget   *image;
    const gchar *icon_name = gtk_action_get_icon_name (action);

    image = gtk_image_menu_item_get_image (image_menu_item);

    if (GTK_IS_IMAGE (image) &&
            (gtk_image_get_storage_type (GTK_IMAGE (image)) == GTK_IMAGE_EMPTY ||
             gtk_image_get_storage_type (GTK_IMAGE (image)) == GTK_IMAGE_ICON_NAME))
    {
        gtk_image_set_from_icon_name (GTK_IMAGE (image), icon_name, GTK_ICON_SIZE_MENU);
    }
}
コード例 #11
0
ファイル: gtkimagemenuitem.c プロジェクト: raja651/gtk
static GtkWidget *
gtk_image_menu_item_ensure_image (GtkImageMenuItem *item)
{
    GtkWidget *image;

    image = gtk_image_menu_item_get_image (item);
    if (!GTK_IS_IMAGE (image))
    {
        image = gtk_image_new ();
        gtk_widget_show (image);
        gtk_image_menu_item_set_image (item, image);
    }

    return image;
}
コード例 #12
0
ファイル: gtkimagemenuitem.c プロジェクト: fluendo/gtk
static gboolean
activatable_update_stock_id (GtkImageMenuItem *image_menu_item, GtkAction *action)
{
  GtkWidget   *image;
  const gchar *stock_id  = gtk_action_get_stock_id (action);

  image = gtk_image_menu_item_get_image (image_menu_item);
	  
  if (GTK_IS_IMAGE (image) &&
      stock_id && gtk_icon_factory_lookup_default (stock_id))
    {
      gtk_image_set_from_stock (GTK_IMAGE (image), stock_id, GTK_ICON_SIZE_MENU);
      return TRUE;
    }

  return FALSE;
}
コード例 #13
0
static void
item_activated (GtkMenuItem * item, gpointer picker)
{
	NldSearchContextPickerPrivate *priv = NLD_SEARCH_CONTEXT_PICKER_GET_PRIVATE (picker);
	GtkImage *image;
	const char *icon_name;
	GtkIconSize icon_size;

	image = GTK_IMAGE (gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (item)));
	gtk_image_get_icon_name (image, &icon_name, &icon_size);
	gtk_image_set_from_icon_name (priv->cur_icon, icon_name, icon_size);

	priv->cur_context =
		GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item),
			"NldSearchContextPicker:context_id"));
	g_signal_emit (picker, signals[CONTEXT_CHANGED], 0);
}
コード例 #14
0
static void
menu_item_sync_action_properties (NemoContextMenuMenuItem *menu_item,
                                  GtkAction               *action)
{
    GtkImageMenuItem *image_menu_item;
    GtkActivatable *activatable;
    GtkWidget *image;
    gboolean   use_appearance;

    image_menu_item = GTK_IMAGE_MENU_ITEM (menu_item);

    activatable = GTK_ACTIVATABLE (image_menu_item);

    if (!action)
        return;

    use_appearance = gtk_activatable_get_use_action_appearance (activatable);
    if (!use_appearance)
        return;

    image = gtk_image_menu_item_get_image (image_menu_item);
    if (image && !GTK_IS_IMAGE (image)) {
        gtk_image_menu_item_set_image (image_menu_item, NULL);
        image = NULL;
    }

    if (!image) {
        image = gtk_image_new ();
        gtk_widget_show (image);
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (activatable),
                                       image);
    }

    if (!activatable_update_stock_id (image_menu_item, action) &&
        !activatable_update_gicon (image_menu_item, action))
        activatable_update_icon_name (image_menu_item, action);

    gtk_image_menu_item_set_always_show_image (image_menu_item,
                                               gtk_action_get_always_show_image (action));

    activatable_update_label (GTK_MENU_ITEM (menu_item), action);
}
コード例 #15
0
ファイル: imagemenuitem.c プロジェクト: amery/clip-itk
int
clip_GTK_IMAGEMENUITEMGETIMAGE(ClipMachine * cm)
{
	C_widget *cimgitem = _fetch_cw_arg(cm);
        C_widget   *cimage ;
        GtkWidget   *image ;

	CHECKARG2(1,MAP_t, NUMERIC_t); CHECKCWID(cimgitem, GTK_IS_IMAGE_MENU_ITEM);

	image = gtk_image_menu_item_get_image(GTK_IMAGE_MENU_ITEM(cimgitem->widget));

	if (image)
        {
        	cimage = _list_get_cwidget(cm, image);
                if (!cimage) cimage = _register_widget(cm, image, NULL);
                if (cimage) _clip_mclone(cm, RETPTR(cm), &cimage->obj);
        }
	return 0;
err:
	return 1;
}
コード例 #16
0
ファイル: gtkimagemenuitem.c プロジェクト: krh/gtk
static void
gtk_image_menu_item_sync_action_properties (GtkActivatable *activatable,
        GtkAction      *action)
{
    GtkImageMenuItem *image_menu_item;
    GtkWidget *image;
    gboolean   use_appearance;

    image_menu_item = GTK_IMAGE_MENU_ITEM (activatable);

    parent_activatable_iface->sync_action_properties (activatable, action);

    if (!action)
        return;

    use_appearance = gtk_activatable_get_use_action_appearance (activatable);
    if (!use_appearance)
        return;

    image = gtk_image_menu_item_get_image (image_menu_item);
    if (image && !GTK_IS_IMAGE (image))
    {
        gtk_image_menu_item_set_image (image_menu_item, NULL);
        image = NULL;
    }

    if (!image)
    {
        image = gtk_image_new ();
        gtk_widget_show (image);
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (activatable),
                                       image);
    }

    if (!activatable_update_stock_id (image_menu_item, action) &&
            !activatable_update_gicon (image_menu_item, action))
        activatable_update_icon_name (image_menu_item, action);

}
コード例 #17
0
static void
mateconf_bookmarks_set_item_has_icon (GtkWidget *item,
				   gboolean   have_icons)
{
	GtkWidget *image;

	image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (item));
	if (image && !g_object_get_data (G_OBJECT (item), "mateconf-editor-icon"))
		g_object_set_data_full (G_OBJECT (item), "mateconf-editor-icon",
					g_object_ref (image), g_object_unref);

	if (!image)
		image = g_object_get_data (G_OBJECT (item), "mateconf-editor-icon");

	if (!image)
		return;

	if (have_icons)
		gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
	else
		gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), NULL);
}
コード例 #18
0
ファイル: iupgtk_menu.c プロジェクト: gcfavorites/tastools
static void gtkItemUpdateImage(Ihandle* ih, const char* value, const char* image, const char* impress)
{
  GdkPixbuf* pixbuf;

  if (!impress || !iupStrBoolean(value))
    pixbuf = iupImageGetImage(image, ih, 0);
  else
    pixbuf = iupImageGetImage(impress, ih, 0);

  if (pixbuf)
  {
    GtkWidget* image_label = gtk_image_menu_item_get_image((GtkImageMenuItem*)ih->handle);
    if (!image_label)
    {
      image_label = gtk_image_new();
      gtk_image_menu_item_set_image((GtkImageMenuItem*)ih->handle, image_label);
    }

    if (pixbuf != gtk_image_get_pixbuf((GtkImage*)image_label))
      gtk_image_set_from_pixbuf((GtkImage*)image_label, pixbuf);
  }
  else
    gtk_image_menu_item_set_image((GtkImageMenuItem*)ih->handle, NULL);
}
コード例 #19
0
ファイル: serializer.c プロジェクト: thassan/mate-globalmenu
static void serializer_visit_menuitem (Serializer* self, GtkMenuItem* menuitem) {
    char* _tmp0_;
    gboolean _tmp2_ = FALSE;
    g_return_if_fail (self != NULL);
    g_return_if_fail (menuitem != NULL);
    if (GTK_IS_TEAROFF_MENU_ITEM (menuitem)) {
        return;
    }
    serializer_indent (self);
    g_string_append (self->priv->sb, "<item");
    g_string_append (self->priv->sb, _tmp0_ = g_markup_printf_escaped (" id=\"W%lu\"", (gulong) menuitem));
    _g_free0 (_tmp0_);
    if (self->priv->hybrid) {
        g_string_append (self->priv->sb, " client-side=\"1\"");
    }
    g_string_erase (self->priv->label_sb, (gssize) 0, (gssize) (-1));
    self->priv->last_item_empty = TRUE;
    self->priv->guessed_type = NULL;
    serializer_visit_container (self, (GtkContainer*) menuitem);
    if (self->priv->label_sb->len > 0) {
        char* _tmp1_;
        g_string_append (self->priv->sb, _tmp1_ = g_markup_printf_escaped (" label=\"%s\"", self->priv->label_sb->str));
        _g_free0 (_tmp1_);
        self->priv->last_item_empty = FALSE;
    }
    if (GTK_IS_SEPARATOR_MENU_ITEM (menuitem)) {
        _tmp2_ = TRUE;
    } else {
        _tmp2_ = gtk_bin_get_child ((GtkBin*) menuitem) == NULL;
    }
    if (_tmp2_) {
        self->priv->guessed_type = "s";
        self->priv->last_item_empty = FALSE;
    }
    if (GTK_IS_IMAGE_MENU_ITEM (menuitem)) {
        GtkMenuItem* _tmp3_;
        GtkWidget* _tmp4_;
        GtkImage* image;
        image = _g_object_ref0 ((_tmp4_ = gtk_image_menu_item_get_image ((_tmp3_ = menuitem, GTK_IS_IMAGE_MENU_ITEM (_tmp3_) ? ((GtkImageMenuItem*) _tmp3_) : NULL)), GTK_IS_IMAGE (_tmp4_) ? ((GtkImage*) _tmp4_) : NULL));
        if (image != NULL) {
            self->priv->guessed_type = "i";
            serializer_append_icon_attribute (self, image);
            self->priv->last_item_empty = FALSE;
        }
        _g_object_unref0 (image);
    }
    if (GTK_IS_CHECK_MENU_ITEM (menuitem)) {
        GtkMenuItem* _tmp5_;
        GtkCheckMenuItem* checkmenuitem;
        checkmenuitem = _g_object_ref0 ((_tmp5_ = menuitem, GTK_IS_CHECK_MENU_ITEM (_tmp5_) ? ((GtkCheckMenuItem*) _tmp5_) : NULL));
        if (gtk_check_menu_item_get_draw_as_radio (checkmenuitem)) {
            self->priv->guessed_type = "r";
        } else {
            self->priv->guessed_type = "c";
        }
        if (!gtk_check_menu_item_get_inconsistent (checkmenuitem)) {
            if (gtk_check_menu_item_get_active (checkmenuitem)) {
                g_string_append (self->priv->sb, " state=\"1\"");
            } else {
                g_string_append (self->priv->sb, " state=\"0\"");
            }
        }
        self->priv->last_item_empty = FALSE;
        _g_object_unref0 (checkmenuitem);
    }
    if (gtk_widget_get_visible ((GtkWidget*) menuitem) == FALSE) {
        g_string_append (self->priv->sb, " visible=\"0\"");
        self->priv->last_item_empty = FALSE;
    }
    if (gtk_widget_get_sensitive ((GtkWidget*) menuitem) == FALSE) {
        g_string_append (self->priv->sb, " sensitive=\"0\"");
    }
    if (self->priv->last_item_empty) {
        g_string_append (self->priv->sb, " visible=\"0\"");
    }
    if (self->priv->guessed_type != NULL) {
        g_string_append_printf (self->priv->sb, " type=\"%s\"", self->priv->guessed_type);
    }
    if (gtk_menu_item_get_submenu (menuitem) == NULL) {
        g_string_append (self->priv->sb, "/>");
        serializer_linebreak (self);
    } else {
        g_string_append_c (self->priv->sb, '>');
        serializer_linebreak (self);
        self->priv->level++;
        if (gtk_menu_item_get_submenu (menuitem) != NULL) {
            serializer_visit_menu (self, gtk_menu_item_get_submenu (menuitem));
        }
        self->priv->level--;
        serializer_indent (self);
        g_string_append (self->priv->sb, "</item>");
        serializer_linebreak (self);
    }
}
コード例 #20
0
ファイル: gimpaction.c プロジェクト: Amerekanets/gimp-1
static void
gimp_action_set_proxy (GimpAction *action,
                       GtkWidget  *proxy)
{
  if (! GTK_IS_IMAGE_MENU_ITEM (proxy))
    return;

  if (action->color)
    {
      GtkWidget *area;

      area = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (proxy));

      if (GIMP_IS_COLOR_AREA (area))
        {
          gimp_color_area_set_color (GIMP_COLOR_AREA (area), action->color);
        }
      else
        {
          gint width, height;

          area = gimp_color_area_new (action->color,
                                      GIMP_COLOR_AREA_SMALL_CHECKS, 0);
          gimp_color_area_set_draw_border (GIMP_COLOR_AREA (area), TRUE);

          gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (proxy),
                                             GTK_ICON_SIZE_MENU,
                                             &width, &height);

          gtk_widget_set_size_request (area, width, height);
          gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (proxy), area);
          gtk_widget_show (area);
        }
    }
  else if (action->viewable)
    {
      GtkWidget *view;

      view = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (proxy));

      if (GIMP_IS_VIEW (view) &&
          g_type_is_a (G_TYPE_FROM_INSTANCE (action->viewable),
                       GIMP_VIEW (view)->renderer->viewable_type))
        {
          gimp_view_set_viewable (GIMP_VIEW (view), action->viewable);
        }
      else
        {
          GtkIconSize size;
          gint        width, height;
          gint        border_width;

          if (GIMP_IS_IMAGEFILE (action->viewable))
            {
              size         = GTK_ICON_SIZE_LARGE_TOOLBAR;
              border_width = 0;
            }
          else
            {
              size         = GTK_ICON_SIZE_MENU;
              border_width = 1;
            }

          gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (proxy),
                                             size, &width, &height);

          view = gimp_view_new_full (action->context, action->viewable,
                                     width, height, border_width,
                                     FALSE, FALSE, FALSE);
          gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (proxy), view);
          gtk_widget_show (view);
        }
    }
  else
    {
      GtkWidget *image;

      image = gtk_image_menu_item_get_image (GTK_IMAGE_MENU_ITEM (proxy));

      if (GIMP_IS_VIEW (image) || GIMP_IS_COLOR_AREA (image))
        {
          gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (proxy), NULL);
          g_object_notify (G_OBJECT (action), "stock-id");
        }
    }

  {
    GtkWidget *child = gtk_bin_get_child (GTK_BIN (proxy));

    if (GTK_IS_LABEL (child))
      {
        GtkLabel *label = GTK_LABEL (child);

        gtk_label_set_ellipsize (label, action->ellipsize);
        gtk_label_set_max_width_chars (label, action->max_width_chars);
      }
  }
}