diff options
author | Ryan Lortie <desrt@desrt.ca> | 2011-03-29 23:44:21 +0530 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2011-03-30 00:26:27 +0530 |
commit | ae6032b2eae27c9e25b21584a6337c6e4a6114b0 (patch) | |
tree | 1f9fa42957501fde1b1609900461c3120d463160 /gtk/gtkstatusicon.c | |
parent | ae22476931519c8f3846a3995da77b53ef90e38c (diff) | |
download | gtk+-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.c | 20 |
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"); } |