summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2009-01-27 03:56:03 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2009-01-27 03:56:03 +0000
commit9e86472a65b5c7503fd5ba1b7148988e466ae57d (patch)
tree0e817b784dfffd13cd2e1700fb788d2ca5e73530
parent358490f9eaa18338c26c6abb88cf90b1588926bb (diff)
downloadgdk-pixbuf-9e86472a65b5c7503fd5ba1b7148988e466ae57d.tar.gz
Bug 322932 – Always show icons on panel menus
* gtk/gtk.symbols: * gtk/gtkimagemenuitem.[hc]: Add a property to override the show-menu-images setting for individual menuitems. Patch by William Jon McCann. svn path=/trunk/; revision=22230
-rw-r--r--ChangeLog9
-rw-r--r--docs/reference/ChangeLog4
-rw-r--r--docs/reference/gtk/gtk-sections.txt2
-rw-r--r--gtk/gtk.symbols2
-rw-r--r--gtk/gtkimagemenuitem.c102
-rw-r--r--gtk/gtkimagemenuitem.h3
6 files changed, 118 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 05de34ee4..461a1d292 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2009-01-26 Matthias Clasen <mclasen@redhat.com>
+ Bug 322932 – Always show icons on panel menus
+
+ * gtk/gtk.symbols:
+ * gtk/gtkimagemenuitem.[hc]: Add a property to override the
+ show-menu-images setting for individual menuitems. Patch by
+ William Jon McCann.
+
+2009-01-26 Matthias Clasen <mclasen@redhat.com>
+
* gtk/gtkbutton.c: Activate the action in a regular clicked
handler instead of the default handler, to make it work with
derived classes which don't chain up their clicked handler.
diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog
index 3962c5092..1376553cf 100644
--- a/docs/reference/ChangeLog
+++ b/docs/reference/ChangeLog
@@ -1,3 +1,7 @@
+2009-01-26 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtk-sections.txt: Add new image menu item api
+
2009-01-23 Matthias Clasen <mclasen@redhat.com>
* === Released 2.15.1 ===
diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt
index 8f9cc6486..4bfcb839c 100644
--- a/docs/reference/gtk/gtk-sections.txt
+++ b/docs/reference/gtk/gtk-sections.txt
@@ -2041,6 +2041,8 @@ gtk_image_menu_item_new_with_label
gtk_image_menu_item_new_with_mnemonic
gtk_image_menu_item_get_use_stock
gtk_image_menu_item_set_use_stock
+gtk_image_menu_item_get_always_show_image
+gtk_image_menu_item_set_always_show_image
gtk_image_menu_item_set_accel_group
<SUBSECTION Standard>
GtkImageMenuItemClass
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index 2ca4a6a7d..a2195c0b0 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -2062,6 +2062,7 @@ gtk_image_set_pixel_size
#if IN_HEADER(__GTK_IMAGE_MENU_ITEM_H__)
#if IN_FILE(__GTK_IMAGE_MENU_ITEM_C__)
+gtk_image_menu_item_get_always_show_image
gtk_image_menu_item_get_image
gtk_image_menu_item_get_type G_GNUC_CONST
gtk_image_menu_item_get_use_stock
@@ -2070,6 +2071,7 @@ gtk_image_menu_item_new_from_stock
gtk_image_menu_item_new_with_label
gtk_image_menu_item_new_with_mnemonic
gtk_image_menu_item_set_accel_group
+gtk_image_menu_item_set_always_show_image
gtk_image_menu_item_set_image
gtk_image_menu_item_set_use_stock
#endif
diff --git a/gtk/gtkimagemenuitem.c b/gtk/gtkimagemenuitem.c
index 27b641f60..a7bc42998 100644
--- a/gtk/gtkimagemenuitem.c
+++ b/gtk/gtkimagemenuitem.c
@@ -79,15 +79,17 @@ static void gtk_image_menu_item_activatable_reset (GtkActivatable
GtkAction *action);
typedef struct {
- gchar *label;
- gboolean use_stock;
+ gchar *label;
+ guint use_stock : 1;
+ guint always_show_image : 1;
} GtkImageMenuItemPrivate;
enum {
PROP_0,
PROP_IMAGE,
PROP_USE_STOCK,
- PROP_ACCEL_GROUP
+ PROP_ACCEL_GROUP,
+ PROP_ALWAYS_SHOW_IMAGE
};
static GtkActivatableIface *parent_activatable_iface;
@@ -151,6 +153,25 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT));
/**
+ * GtkImageMenuItem:always-show-image:
+ *
+ * If %TRUE, the menu item will ignore the #GtkSettings:gtk-menu-images
+ * setting and always show the image, if available.
+ *
+ * Use this property if the menuitem would be useless or hard to use
+ * without the image.
+ *
+ * Since: 2.16
+ **/
+ g_object_class_install_property (gobject_class,
+ PROP_ALWAYS_SHOW_IMAGE,
+ g_param_spec_boolean ("always-show-image",
+ P_("Always show image"),
+ P_("Whether the image will always be shown"),
+ FALSE,
+ GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ /**
* GtkImageMenuItem:accel-group:
*
* The Accel Group to use for stock accelerator keys
@@ -214,6 +235,9 @@ gtk_image_menu_item_set_property (GObject *object,
case PROP_USE_STOCK:
gtk_image_menu_item_set_use_stock (image_menu_item, g_value_get_boolean (value));
break;
+ case PROP_ALWAYS_SHOW_IMAGE:
+ gtk_image_menu_item_set_always_show_image (image_menu_item, g_value_get_boolean (value));
+ break;
case PROP_ACCEL_GROUP:
gtk_image_menu_item_set_accel_group (image_menu_item, g_value_get_object (value));
break;
@@ -239,6 +263,9 @@ gtk_image_menu_item_get_property (GObject *object,
case PROP_USE_STOCK:
g_value_set_boolean (value, gtk_image_menu_item_get_use_stock (image_menu_item));
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;
@@ -248,10 +275,14 @@ gtk_image_menu_item_get_property (GObject *object,
static gboolean
show_image (GtkImageMenuItem *image_menu_item)
{
+ GtkImageMenuItemPrivate *priv = GET_PRIVATE (image_menu_item);
GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (image_menu_item));
gboolean show;
- g_object_get (settings, "gtk-menu-images", &show, NULL);
+ if (priv->always_show_image)
+ show = TRUE;
+ else
+ g_object_get (settings, "gtk-menu-images", &show, NULL);
return show;
}
@@ -773,6 +804,69 @@ gtk_image_menu_item_get_use_stock (GtkImageMenuItem *image_menu_item)
return priv->use_stock;
}
+/**
+ * gtk_image_menu_item_set_always_show_image:
+ * @image_menu_item: a #GtkImageMenuItem
+ * @always_show: %TRUE if the menuitem should always show the image
+ *
+ * If %TRUE, the menu item will ignore the #GtkSettings:gtk-menu-images
+ * setting and always show the image, if available.
+ *
+ * Use this property if the menuitem would be useless or hard to use
+ * without the image.
+ *
+ * Since: 2.16
+ */
+void
+gtk_image_menu_item_set_always_show_image (GtkImageMenuItem *image_menu_item,
+ gboolean always_show)
+{
+ GtkImageMenuItemPrivate *priv;
+
+ g_return_if_fail (GTK_IS_IMAGE_MENU_ITEM (image_menu_item));
+
+ priv = GET_PRIVATE (image_menu_item);
+
+ if (priv->always_show_image != always_show)
+ {
+ priv->always_show_image = always_show;
+
+ if (image_menu_item->image)
+ {
+ if (show_image (image_menu_item))
+ gtk_widget_show (image_menu_item->image);
+ else
+ gtk_widget_hide (image_menu_item->image);
+ }
+
+ g_object_notify (G_OBJECT (image_menu_item), "always-show-image");
+ }
+}
+
+/**
+ * gtk_image_menu_item_get_always_show_image:
+ * @image_menu_item: a #GtkImageMenuItem
+ * @always_show: %TRUE if the menuitem should always show the image
+ *
+ * Returns whether the menu item will ignore the #GtkSettings:gtk-menu-images
+ * setting and always show the image, if available.
+ *
+ * Returns: %TRUE if the menu item will always show the image
+ *
+ * Since: 2.16
+ */
+gboolean
+gtk_image_menu_item_get_always_show_image (GtkImageMenuItem *image_menu_item)
+{
+ GtkImageMenuItemPrivate *priv;
+
+ g_return_val_if_fail (GTK_IS_IMAGE_MENU_ITEM (image_menu_item), FALSE);
+
+ priv = GET_PRIVATE (image_menu_item);
+
+ return priv->always_show_image;
+}
+
/**
* gtk_image_menu_item_set_accel_group:
diff --git a/gtk/gtkimagemenuitem.h b/gtk/gtkimagemenuitem.h
index d379f6a24..b82bdfd31 100644
--- a/gtk/gtkimagemenuitem.h
+++ b/gtk/gtkimagemenuitem.h
@@ -69,6 +69,9 @@ GtkWidget* gtk_image_menu_item_new_with_label (const gchar *label);
GtkWidget* gtk_image_menu_item_new_with_mnemonic (const gchar *label);
GtkWidget* gtk_image_menu_item_new_from_stock (const gchar *stock_id,
GtkAccelGroup *accel_group);
+void gtk_image_menu_item_set_always_show_image (GtkImageMenuItem *image_menu_item,
+ gboolean always_show);
+gboolean gtk_image_menu_item_get_always_show_image (GtkImageMenuItem *image_menu_item);
void gtk_image_menu_item_set_image (GtkImageMenuItem *image_menu_item,
GtkWidget *image);
GtkWidget* gtk_image_menu_item_get_image (GtkImageMenuItem *image_menu_item);