From a4f21ec70b26aae76a071bdd323e0ea0faf7bf98 Mon Sep 17 00:00:00 2001 From: Colomban Wendling Date: Wed, 29 Mar 2017 16:07:49 +0200 Subject: status-notifier: Fix handling of icon-padding style property It should only affect the space between items, not all around, and that padding should be part of the item itself, not be outside of it. --- .../notification_area/status-notifier/sn-host-v0.c | 2 +- .../notification_area/status-notifier/sn-item-v0.c | 56 ++++++++++++++++++++++ .../notification_area/status-notifier/sn-item-v0.h | 3 ++ 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/applets/notification_area/status-notifier/sn-host-v0.c b/applets/notification_area/status-notifier/sn-host-v0.c index eeab0254..9915b1e3 100644 --- a/applets/notification_area/status-notifier/sn-host-v0.c +++ b/applets/notification_area/status-notifier/sn-host-v0.c @@ -125,7 +125,7 @@ add_registered_item (SnHostV0 *v0, item = sn_item_v0_new (bus_name, object_path); g_object_ref_sink (item); - g_object_bind_property (v0, "icon-padding", item, "margin", + g_object_bind_property (v0, "icon-padding", item, "icon-padding", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); g_object_bind_property (v0, "icon-size", item, "icon-size", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE); diff --git a/applets/notification_area/status-notifier/sn-item-v0.c b/applets/notification_area/status-notifier/sn-item-v0.c index c3eeecd4..83f6d0de 100644 --- a/applets/notification_area/status-notifier/sn-item-v0.c +++ b/applets/notification_area/status-notifier/sn-item-v0.c @@ -78,6 +78,7 @@ enum PROP_0, PROP_ICON_SIZE, + PROP_ICON_PADDING, LAST_PROP }; @@ -1269,6 +1270,10 @@ sn_item_v0_get_property (GObject *object, g_value_set_uint (value, v0->icon_size); break; + case PROP_ICON_PADDING: + g_value_set_int (value, sn_item_v0_get_icon_padding (v0)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -1291,6 +1296,10 @@ sn_item_v0_set_property (GObject *object, sn_item_v0_set_icon_size (v0, g_value_get_int (value)); break; + case PROP_ICON_PADDING: + sn_item_v0_set_icon_padding (v0, g_value_get_int (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -1304,6 +1313,10 @@ install_properties (GObjectClass *object_class) g_param_spec_int ("icon-size", "Icon size", "Icon size", 0, G_MAXINT, 16, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + properties[PROP_ICON_PADDING] = + g_param_spec_int ("icon-padding", "Icon padding", "Icon padding", 0, + G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties (object_class, LAST_PROP, properties); } @@ -1362,6 +1375,49 @@ sn_item_v0_new (const gchar *bus_name, NULL); } +gint +sn_item_v0_get_icon_padding (SnItemV0 *v0) +{ + GtkOrientation orientation; + gint a, b; + + orientation = gtk_orientable_get_orientation (GTK_ORIENTABLE (v0)); + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + { + a = gtk_widget_get_margin_start (v0->image); + b = gtk_widget_get_margin_end (v0->image); + } + else + { + a = gtk_widget_get_margin_top (v0->image); + b = gtk_widget_get_margin_bottom (v0->image); + } + + return (a + b) / 2; +} + +void +sn_item_v0_set_icon_padding (SnItemV0 *v0, + gint padding) +{ + GtkOrientation orientation; + gint padding_x = 0; + gint padding_y = 0; + + orientation = gtk_orientable_get_orientation (GTK_ORIENTABLE (v0)); + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + padding_x = padding; + else + padding_y = padding; + + gtk_widget_set_margin_start (v0->image, padding_x); + gtk_widget_set_margin_end (v0->image, padding_x); + gtk_widget_set_margin_top (v0->image, padding_y); + gtk_widget_set_margin_bottom (v0->image, padding_y); +} + gint sn_item_v0_get_icon_size (SnItemV0 *v0) { diff --git a/applets/notification_area/status-notifier/sn-item-v0.h b/applets/notification_area/status-notifier/sn-item-v0.h index 548905e8..1f8bd98f 100644 --- a/applets/notification_area/status-notifier/sn-item-v0.h +++ b/applets/notification_area/status-notifier/sn-item-v0.h @@ -39,6 +39,9 @@ GType sn_item_v0_get_type (void); SnItem *sn_item_v0_new (const gchar *bus_name, const gchar *object_path); +gint sn_item_v0_get_icon_padding (SnItemV0 *v0); +void sn_item_v0_set_icon_padding (SnItemV0 *v0, + gint padding); gint sn_item_v0_get_icon_size (SnItemV0 *v0); void sn_item_v0_set_icon_size (SnItemV0 *v0, gint size); -- cgit v1.2.1