summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <maclas@gmx.de>2004-02-19 22:39:58 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2004-02-19 22:39:58 +0000
commitadd52ebbbf15992a823408123bdbb65d20723284 (patch)
tree8b5dfbd4c45ac47d2c0cd9d9fecebe184c725c75
parentbce0b90f7cd73644d3c80238a76e5bb67ab42609 (diff)
downloadgtk+-add52ebbbf15992a823408123bdbb65d20723284.tar.gz
Fixes for #82099:
Thu Feb 19 23:41:06 2004 Matthias Clasen <maclas@gmx.de> Fixes for #82099: * gdk/x11/gdkevents-x11.c: Introduce new XSettings "Gtk/ButtonImages" and "Gtk/MenuImages" and map them to "gtk-button-images" and "gtk-menu-images". * gtk/gtkimagemenuitem.c: Add a boolean setting "gtk-menu-images" and use it to set the visibility of the embedded image. * gtk/gtkbutton.c: Add a boolean setting "gtk-button-images" and use it to set the visibility of an embedded image.
-rw-r--r--ChangeLog14
-rw-r--r--ChangeLog.pre-2-1014
-rw-r--r--ChangeLog.pre-2-414
-rw-r--r--ChangeLog.pre-2-614
-rw-r--r--ChangeLog.pre-2-814
-rw-r--r--gdk/x11/gdkevents-x11.c2
-rw-r--r--gtk/gtkbutton.c90
-rw-r--r--gtk/gtkimagemenuitem.c86
8 files changed, 237 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index b3e5de9e79..311daed66d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+Thu Feb 19 23:41:06 2004 Matthias Clasen <maclas@gmx.de>
+
+ Fixes for #82099:
+
+ * gdk/x11/gdkevents-x11.c: Introduce new XSettings "Gtk/ButtonImages"
+ and "Gtk/MenuImages" and map them to "gtk-button-images" and
+ "gtk-menu-images".
+
+ * gtk/gtkimagemenuitem.c: Add a boolean setting "gtk-menu-images" and use
+ it to set the visibility of the embedded image.
+
+ * gtk/gtkbutton.c: Add a boolean setting "gtk-button-images" and use
+ it to set the visibility of an embedded image.
+
Thu Feb 19 21:26:10 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtkactiongroup.c (gtk_action_group_add_radio_actions_full):
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index b3e5de9e79..311daed66d 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,17 @@
+Thu Feb 19 23:41:06 2004 Matthias Clasen <maclas@gmx.de>
+
+ Fixes for #82099:
+
+ * gdk/x11/gdkevents-x11.c: Introduce new XSettings "Gtk/ButtonImages"
+ and "Gtk/MenuImages" and map them to "gtk-button-images" and
+ "gtk-menu-images".
+
+ * gtk/gtkimagemenuitem.c: Add a boolean setting "gtk-menu-images" and use
+ it to set the visibility of the embedded image.
+
+ * gtk/gtkbutton.c: Add a boolean setting "gtk-button-images" and use
+ it to set the visibility of an embedded image.
+
Thu Feb 19 21:26:10 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtkactiongroup.c (gtk_action_group_add_radio_actions_full):
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index b3e5de9e79..311daed66d 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,17 @@
+Thu Feb 19 23:41:06 2004 Matthias Clasen <maclas@gmx.de>
+
+ Fixes for #82099:
+
+ * gdk/x11/gdkevents-x11.c: Introduce new XSettings "Gtk/ButtonImages"
+ and "Gtk/MenuImages" and map them to "gtk-button-images" and
+ "gtk-menu-images".
+
+ * gtk/gtkimagemenuitem.c: Add a boolean setting "gtk-menu-images" and use
+ it to set the visibility of the embedded image.
+
+ * gtk/gtkbutton.c: Add a boolean setting "gtk-button-images" and use
+ it to set the visibility of an embedded image.
+
Thu Feb 19 21:26:10 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtkactiongroup.c (gtk_action_group_add_radio_actions_full):
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index b3e5de9e79..311daed66d 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,17 @@
+Thu Feb 19 23:41:06 2004 Matthias Clasen <maclas@gmx.de>
+
+ Fixes for #82099:
+
+ * gdk/x11/gdkevents-x11.c: Introduce new XSettings "Gtk/ButtonImages"
+ and "Gtk/MenuImages" and map them to "gtk-button-images" and
+ "gtk-menu-images".
+
+ * gtk/gtkimagemenuitem.c: Add a boolean setting "gtk-menu-images" and use
+ it to set the visibility of the embedded image.
+
+ * gtk/gtkbutton.c: Add a boolean setting "gtk-button-images" and use
+ it to set the visibility of an embedded image.
+
Thu Feb 19 21:26:10 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtkactiongroup.c (gtk_action_group_add_radio_actions_full):
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index b3e5de9e79..311daed66d 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,17 @@
+Thu Feb 19 23:41:06 2004 Matthias Clasen <maclas@gmx.de>
+
+ Fixes for #82099:
+
+ * gdk/x11/gdkevents-x11.c: Introduce new XSettings "Gtk/ButtonImages"
+ and "Gtk/MenuImages" and map them to "gtk-button-images" and
+ "gtk-menu-images".
+
+ * gtk/gtkimagemenuitem.c: Add a boolean setting "gtk-menu-images" and use
+ it to set the visibility of the embedded image.
+
+ * gtk/gtkbutton.c: Add a boolean setting "gtk-button-images" and use
+ it to set the visibility of an embedded image.
+
Thu Feb 19 21:26:10 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtkactiongroup.c (gtk_action_group_add_radio_actions_full):
diff --git a/gdk/x11/gdkevents-x11.c b/gdk/x11/gdkevents-x11.c
index f10be2154a..491d0bc4c6 100644
--- a/gdk/x11/gdkevents-x11.c
+++ b/gdk/x11/gdkevents-x11.c
@@ -2627,6 +2627,8 @@ static struct
{ "Net/CursorBlinkTime", "gtk-cursor-blink-time" },
{ "Net/ThemeName", "gtk-theme-name" },
{ "Net/IconThemeName", "gtk-icon-theme-name" },
+ { "Gtk/ButtonImages", "gtk-button-images" },
+ { "Gtk/MenuImages", "gtk-menu-images" },
};
static void
diff --git a/gtk/gtkbutton.c b/gtk/gtkbutton.c
index c47b453ef3..6a0869068f 100644
--- a/gtk/gtkbutton.c
+++ b/gtk/gtkbutton.c
@@ -41,7 +41,7 @@
static const GtkBorder default_default_border = { 1, 1, 1, 1 };
static const GtkBorder default_default_outside_border = { 0, 0, 0, 0 };
-/* Time out before giving up on getting a key release when animatng
+/* Time out before giving up on getting a key release when animating
* the close button.
*/
#define ACTIVATE_TIMEOUT 250
@@ -72,8 +72,11 @@ typedef struct _GtkButtonPrivate GtkButtonPrivate;
struct _GtkButtonPrivate
{
- gfloat xalign;
- gfloat yalign;
+ gfloat xalign;
+ gfloat yalign;
+ GtkSettings *settings;
+ guint show_image_connection;
+ GtkWidget *image;
};
static void gtk_button_class_init (GtkButtonClass *klass);
@@ -87,6 +90,8 @@ static void gtk_button_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
+static void gtk_button_screen_changed (GtkWidget *widget,
+ GdkScreen *previous_screen);
static void gtk_button_realize (GtkWidget *widget);
static void gtk_button_unrealize (GtkWidget *widget);
static void gtk_button_map (GtkWidget *widget);
@@ -120,7 +125,7 @@ static void gtk_button_finish_activate (GtkButton *button,
static GObject* gtk_button_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_params);
-static void gtk_button_construct_child (GtkButton *button);
+static void gtk_button_construct_child (GtkButton *button);
static GtkBinClass *parent_class = NULL;
@@ -175,6 +180,7 @@ gtk_button_class_init (GtkButtonClass *klass)
object_class->destroy = gtk_button_destroy;
+ widget_class->screen_changed = gtk_button_screen_changed;
widget_class->realize = gtk_button_realize;
widget_class->unrealize = gtk_button_unrealize;
widget_class->map = gtk_button_map;
@@ -365,6 +371,12 @@ gtk_button_class_init (GtkButtonClass *klass)
0,
G_PARAM_READABLE));
+ gtk_settings_install_property (g_param_spec_boolean ("gtk-button-images",
+ P_("Show button images"),
+ P_("Whether stock icons should be shown in buttons"),
+ TRUE,
+ G_PARAM_READWRITE));
+
g_type_class_add_private (gobject_class, sizeof (GtkButtonPrivate));
}
@@ -547,15 +559,25 @@ gtk_button_new (void)
return g_object_new (GTK_TYPE_BUTTON, NULL);
}
+static gboolean
+show_image (GtkButton *button)
+{
+ GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (button));
+ gboolean show;
+
+ g_object_get (settings, "gtk-button-images", &show, NULL);
+
+ return show;
+}
+
static void
gtk_button_construct_child (GtkButton *button)
{
+ GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button);
GtkStockItem item;
GtkWidget *label;
- GtkWidget *image;
GtkWidget *hbox;
GtkWidget *align;
- GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button);
if (!button->constructed)
return;
@@ -574,12 +596,16 @@ gtk_button_construct_child (GtkButton *button)
gtk_label_set_mnemonic_widget (GTK_LABEL (label), GTK_WIDGET (button));
- image = gtk_image_new_from_stock (button->label_text, GTK_ICON_SIZE_BUTTON);
+ priv->image = gtk_image_new_from_stock (button->label_text, GTK_ICON_SIZE_BUTTON);
+ g_object_set (priv->image,
+ "visible", show_image (button),
+ "no_show_all", TRUE,
+ NULL);
hbox = gtk_hbox_new (FALSE, 2);
align = gtk_alignment_new (priv->xalign, priv->yalign, 0.0, 0.0);
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), priv->image, FALSE, FALSE, 0);
gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_container_add (GTK_CONTAINER (button), align);
@@ -657,6 +683,7 @@ gtk_button_pressed (GtkButton *button)
{
g_return_if_fail (GTK_IS_BUTTON (button));
+
g_signal_emit (button, button_signals[PRESSED], 0);
}
@@ -1513,3 +1540,50 @@ gtk_button_update_state (GtkButton *button)
_gtk_button_set_depressed (button, depressed);
gtk_widget_set_state (GTK_WIDGET (button), new_state);
}
+
+static void
+show_image_change_notify (GtkButton *button)
+{
+ GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (button);
+
+ if (priv->image)
+ g_object_set (priv->image, "visible", show_image (button), NULL);
+}
+
+static void
+gtk_button_screen_changed (GtkWidget *widget,
+ GdkScreen *previous_screen)
+{
+ GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (widget);
+ GtkSettings *settings;
+
+ if (gtk_widget_has_screen (widget))
+ settings = gtk_widget_get_settings (widget);
+ else
+ settings = NULL;
+
+ if (settings == priv->settings)
+ return;
+
+ if (priv->settings)
+ {
+ g_signal_handler_disconnect (priv->settings, priv->show_image_connection);
+ g_object_unref (priv->settings);
+ }
+
+ if (settings)
+ {
+ priv->show_image_connection =
+ g_signal_connect_swapped (settings,
+ "notify::gtk-button-images",
+ G_CALLBACK (show_image_change_notify),
+ widget);
+
+ g_object_ref (settings);
+ priv->settings = settings;
+ }
+ else
+ priv->settings = NULL;
+
+ show_image_change_notify (GTK_BUTTON (widget));
+}
diff --git a/gtk/gtkimagemenuitem.c b/gtk/gtkimagemenuitem.c
index 6de5962a5f..2a633878e9 100644
--- a/gtk/gtkimagemenuitem.c
+++ b/gtk/gtkimagemenuitem.c
@@ -31,6 +31,16 @@
#include "gtkiconfactory.h"
#include "gtkimage.h"
+typedef struct _GtkImageMenuItemPrivate GtkImageMenuItemPrivate;
+
+struct _GtkImageMenuItemPrivate
+{
+ GtkSettings *settings;
+ guint show_image_connection;
+};
+
+#define GTK_IMAGE_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_IMAGE_MENU_ITEM, GtkImageMenuItemPrivate))
+
static void gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass);
static void gtk_image_menu_item_init (GtkImageMenuItem *image_menu_item);
static void gtk_image_menu_item_size_request (GtkWidget *widget,
@@ -55,6 +65,8 @@ static void gtk_image_menu_item_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
+static void gtk_image_menu_item_screen_changed (GtkWidget *widget,
+ GdkScreen *previous_screen);
enum {
@@ -107,6 +119,7 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
parent_class = g_type_class_peek_parent (klass);
+ widget_class->screen_changed = gtk_image_menu_item_screen_changed;
widget_class->size_request = gtk_image_menu_item_size_request;
widget_class->size_allocate = gtk_image_menu_item_size_allocate;
@@ -125,6 +138,14 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
P_("Child widget to appear next to the menu text"),
GTK_TYPE_WIDGET,
G_PARAM_READABLE | G_PARAM_WRITABLE));
+
+ gtk_settings_install_property (g_param_spec_boolean ("gtk-menu-images",
+ P_("Show menu images"),
+ P_("Whether images should be shown in menus"),
+ TRUE,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (gobject_class, sizeof (GtkImageMenuItemPrivate));
}
static void
@@ -177,6 +198,16 @@ gtk_image_menu_item_get_property (GObject *object,
}
}
+static gboolean
+show_image (GtkImageMenuItem *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);
+
+ return show;
+}
static void
gtk_image_menu_item_toggle_size_request (GtkMenuItem *menu_item,
@@ -186,7 +217,7 @@ gtk_image_menu_item_toggle_size_request (GtkMenuItem *menu_item,
*requisition = 0;
- if (image_menu_item->image)
+ if (image_menu_item->image && show_image (image_menu_item))
{
guint image_width = image_menu_item->image->requisition.width;
@@ -212,7 +243,9 @@ gtk_image_menu_item_size_request (GtkWidget *widget,
image_menu_item = GTK_IMAGE_MENU_ITEM (widget);
- if (image_menu_item->image && GTK_WIDGET_VISIBLE (image_menu_item->image))
+ if (image_menu_item->image &&
+ GTK_WIDGET_VISIBLE (image_menu_item->image) &&
+ show_image (image_menu_item))
{
GtkRequisition child_requisition;
@@ -245,7 +278,7 @@ gtk_image_menu_item_size_allocate (GtkWidget *widget,
(* GTK_WIDGET_CLASS (parent_class)->size_allocate) (widget, allocation);
- if (image_menu_item->image)
+ if (image_menu_item->image && show_image (image_menu_item))
{
gint width, height, x, y, offset;
GtkAllocation child_allocation;
@@ -456,6 +489,10 @@ gtk_image_menu_item_set_image (GtkImageMenuItem *image_menu_item,
return;
gtk_widget_set_parent (image, GTK_WIDGET (image_menu_item));
+ g_object_set (image,
+ "visible", show_image (image_menu_item),
+ "no_show_all", TRUE,
+ NULL);
g_object_notify (G_OBJECT (image_menu_item), "image");
}
@@ -504,4 +541,47 @@ gtk_image_menu_item_remove (GtkContainer *container,
}
}
+static void
+show_image_change_notify (GtkImageMenuItem *image_menu_item)
+{
+ if (image_menu_item->image)
+ g_object_set (image_menu_item->image, "visible", show_image (image_menu_item), NULL);
+}
+
+static void
+gtk_image_menu_item_screen_changed (GtkWidget *widget,
+ GdkScreen *previous_screen)
+{
+ GtkImageMenuItemPrivate *priv = GTK_IMAGE_MENU_ITEM_GET_PRIVATE (widget);
+ GtkSettings *settings;
+
+ if (gtk_widget_has_screen (widget))
+ settings = gtk_widget_get_settings (widget);
+ else
+ settings = NULL;
+
+ if (settings == priv->settings)
+ return;
+ if (priv->settings)
+ {
+ g_signal_handler_disconnect (priv->settings, priv->show_image_connection);
+ g_object_unref (priv->settings);
+ }
+
+ if (settings)
+ {
+ priv->show_image_connection =
+ g_signal_connect_swapped (settings,
+ "notify::gtk-menu-images",
+ G_CALLBACK (show_image_change_notify),
+ widget);
+
+ g_object_ref (settings);
+ priv->settings = settings;
+ }
+ else
+ priv->settings = NULL;
+
+ show_image_change_notify (GTK_IMAGE_MENU_ITEM (widget));
+}