summaryrefslogtreecommitdiff
path: root/gtk/gtkstatusicon.c
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2011-03-29 23:44:21 +0530
committerRyan Lortie <desrt@desrt.ca>2011-03-30 00:26:27 +0530
commitae6032b2eae27c9e25b21584a6337c6e4a6114b0 (patch)
tree1f9fa42957501fde1b1609900461c3120d463160 /gtk/gtkstatusicon.c
parentae22476931519c8f3846a3995da77b53ef90e38c (diff)
downloadgtk+-ae6032b2eae27c9e25b21584a6337c6e4a6114b0.tar.gz
GtkStatusIcon: support fixed-sized icons
Use the _NET_SYSTEM_TRAY_ICON_SIZE property set by the tray mananger as a hint that we should use a specific icon size. This allows the tray to instruct us that it expects 16x16 icons, for example. Bug #645232
Diffstat (limited to 'gtk/gtkstatusicon.c')
-rw-r--r--gtk/gtkstatusicon.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gtk/gtkstatusicon.c b/gtk/gtkstatusicon.c
index 79abc48bea..cd7e9f44b5 100644
--- a/gtk/gtkstatusicon.c
+++ b/gtk/gtkstatusicon.c
@@ -158,6 +158,7 @@ static void gtk_status_icon_screen_changed (GtkStatusIcon *status_icon,
static void gtk_status_icon_embedded_changed (GtkStatusIcon *status_icon);
static void gtk_status_icon_orientation_changed (GtkStatusIcon *status_icon);
static void gtk_status_icon_padding_changed (GtkStatusIcon *status_icon);
+static void gtk_status_icon_icon_size_changed(GtkStatusIcon *status_icon);
static void gtk_status_icon_fg_changed (GtkStatusIcon *status_icon);
static void gtk_status_icon_color_changed (GtkTrayIcon *tray,
GParamSpec *pspec,
@@ -840,6 +841,8 @@ gtk_status_icon_init (GtkStatusIcon *status_icon)
G_CALLBACK (gtk_status_icon_orientation_changed), status_icon);
g_signal_connect_swapped (priv->tray_icon, "notify::padding",
G_CALLBACK (gtk_status_icon_padding_changed), status_icon);
+ g_signal_connect_swapped (priv->tray_icon, "notify::icon-size",
+ G_CALLBACK (gtk_status_icon_icon_size_changed), status_icon);
g_signal_connect_swapped (priv->tray_icon, "notify::fg-color",
G_CALLBACK (gtk_status_icon_fg_changed), status_icon);
g_signal_connect (priv->tray_icon, "notify::error-color",
@@ -986,6 +989,8 @@ gtk_status_icon_finalize (GObject *object)
g_signal_handlers_disconnect_by_func (priv->tray_icon,
gtk_status_icon_padding_changed, status_icon);
g_signal_handlers_disconnect_by_func (priv->tray_icon,
+ gtk_status_icon_icon_size_changed, status_icon);
+ g_signal_handlers_disconnect_by_func (priv->tray_icon,
gtk_status_icon_fg_changed, status_icon);
g_signal_handlers_disconnect_by_func (priv->tray_icon,
gtk_status_icon_color_changed, status_icon);
@@ -1650,9 +1655,24 @@ gtk_status_icon_padding_changed (GtkStatusIcon *status_icon)
}
static void
+gtk_status_icon_icon_size_changed (GtkStatusIcon *status_icon)
+{
+ GtkStatusIconPrivate *priv = status_icon->priv;
+ gint icon_size;
+
+ icon_size = _gtk_tray_icon_get_icon_size (GTK_TRAY_ICON (priv->tray_icon));
+
+ if (icon_size != 0)
+ gtk_image_set_pixel_size (GTK_IMAGE (priv->image), icon_size);
+ else
+ gtk_image_set_pixel_size (GTK_IMAGE (priv->image), -1);
+}
+
+static void
gtk_status_icon_embedded_changed (GtkStatusIcon *status_icon)
{
gtk_status_icon_padding_changed (status_icon);
+ gtk_status_icon_icon_size_changed (status_icon);
g_object_notify (G_OBJECT (status_icon), "embedded");
}