[gnome-panel] libgnome-panel: add image-only css class when item has no label



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]