[gnome-panel] libgnome-panel: add image-only css class when item has no label
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-panel] libgnome-panel: add image-only css class when item has no label
- Date: Sun, 22 Dec 2019 15:29:07 +0000 (UTC)
commit d05e4f78f4b4079e4256ac2c042497a260bea16b
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Sun Dec 22 17:24:17 2019 +0200
libgnome-panel: add image-only css class when item has no label
data/theme/common.css | 12 ++++++------
data/theme/fallback.css | 12 ++++++------
libgnome-panel/gp-image-menu-item.c | 37 +++++++++++++++++++++++++++++++++++++
3 files changed, 49 insertions(+), 12 deletions(-)
---
diff --git a/data/theme/common.css b/data/theme/common.css
index 8c48d7c77..078ad40f6 100644
--- a/data/theme/common.css
+++ b/data/theme/common.css
@@ -3,30 +3,30 @@
min-width: 16px;
}
-.gp-image-menu-item > image:dir(ltr) {
+.gp-image-menu-item:not(.image-only) > image:dir(ltr) {
margin-right: 5px;
}
-.gp-image-menu-item > image:dir(rtl) {
+.gp-image-menu-item:not(.image-only) > image:dir(rtl) {
margin-left: 5px;
}
-panel-toplevel.left gp-applet > menubar > .gp-image-menu-item > image:dir(ltr) {
+panel-toplevel.left gp-applet > menubar > .gp-image-menu-item:not(.image-only) > image:dir(ltr) {
margin-right: 0px;
margin-top: 5px;
}
-panel-toplevel.left gp-applet > menubar > .gp-image-menu-item > image:dir(rtl) {
+panel-toplevel.left gp-applet > menubar > .gp-image-menu-item:not(.image-only) > image:dir(rtl) {
margin-left: 0px;
margin-bottom: 5px;
}
-panel-toplevel.right gp-applet > menubar > .gp-image-menu-item > image:dir(ltr) {
+panel-toplevel.right gp-applet > menubar > .gp-image-menu-item:not(.image-only) > image:dir(ltr) {
margin-right: 0px;
margin-bottom: 5px;
}
-panel-toplevel.right gp-applet > menubar > .gp-image-menu-item > image:dir(rtl) {
+panel-toplevel.right gp-applet > menubar > .gp-image-menu-item:not(.image-only) > image:dir(rtl) {
margin-left: 0px;
margin-top: 5px;
}
diff --git a/data/theme/fallback.css b/data/theme/fallback.css
index c170c4381..a955b949e 100644
--- a/data/theme/fallback.css
+++ b/data/theme/fallback.css
@@ -3,30 +3,30 @@
min-width: 16px;
}
-.gp-image-menu-item > image:dir(ltr) {
+.gp-image-menu-item:not(.image-only) > image:dir(ltr) {
margin-right: 5px;
}
-.gp-image-menu-item > image:dir(rtl) {
+.gp-image-menu-item:not(.image-only) > image:dir(rtl) {
margin-left: 5px;
}
-panel-toplevel.left gp-applet > menubar > .gp-image-menu-item > image:dir(ltr) {
+panel-toplevel.left gp-applet > menubar > .gp-image-menu-item:not(.image-only) > image:dir(ltr) {
margin-right: 0px;
margin-top: 5px;
}
-panel-toplevel.left gp-applet > menubar > .gp-image-menu-item > image:dir(rtl) {
+panel-toplevel.left gp-applet > menubar > .gp-image-menu-item:not(.image-only) > image:dir(rtl) {
margin-left: 0px;
margin-bottom: 5px;
}
-panel-toplevel.right gp-applet > menubar > .gp-image-menu-item > image:dir(ltr) {
+panel-toplevel.right gp-applet > menubar > .gp-image-menu-item:not(.image-only) > image:dir(ltr) {
margin-right: 0px;
margin-bottom: 5px;
}
-panel-toplevel.right gp-applet > menubar > .gp-image-menu-item > image:dir(rtl) {
+panel-toplevel.right gp-applet > menubar > .gp-image-menu-item:not(.image-only) > image:dir(rtl) {
margin-left: 0px;
margin-top: 5px;
}
diff --git a/libgnome-panel/gp-image-menu-item.c b/libgnome-panel/gp-image-menu-item.c
index d9080a300..3bb0b6dbc 100644
--- a/libgnome-panel/gp-image-menu-item.c
+++ b/libgnome-panel/gp-image-menu-item.c
@@ -36,6 +36,36 @@ struct _GpImageMenuItem
G_DEFINE_TYPE (GpImageMenuItem, gp_image_menu_item, GTK_TYPE_MENU_ITEM)
+static void
+update_css_class (GpImageMenuItem *self)
+{
+ GtkStyleContext *context;
+ const char *label;
+
+ context = gtk_widget_get_style_context (GTK_WIDGET (self));
+
+ if (self->image == NULL)
+ {
+ gtk_style_context_remove_class (context, "image-only");
+ return;
+ }
+
+ label = gtk_menu_item_get_label (GTK_MENU_ITEM (self));
+
+ if (label != NULL && *label != '\0')
+ return;
+
+ gtk_style_context_add_class (context, "image-only");
+}
+
+static void
+notify_label_cb (GpImageMenuItem *self,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ update_css_class (self);
+}
+
static GtkPackDirection
get_pack_direction (GpImageMenuItem *item)
{
@@ -270,6 +300,8 @@ gp_image_menu_item_remove (GtkContainer *container,
item->image = NULL;
+ update_css_class (item);
+
if (image_visible && gtk_widget_get_visible (GTK_WIDGET (container)))
gtk_widget_queue_resize (GTK_WIDGET (container));
}
@@ -333,6 +365,8 @@ gp_image_menu_item_init (GpImageMenuItem *item)
{
GtkStyleContext *context;
+ g_signal_connect (item, "notify::label", G_CALLBACK (notify_label_cb), NULL);
+
context = gtk_widget_get_style_context (GTK_WIDGET (item));
gtk_style_context_add_class (context, "gp-image-menu-item");
}
@@ -403,6 +437,9 @@ gp_image_menu_item_set_image (GpImageMenuItem *item,
gtk_container_remove (GTK_CONTAINER (item), item->image);
item->image = image;
+
+ update_css_class (item);
+
if (image == NULL)
return;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]