aboutsummaryrefslogtreecommitdiff
path: root/src/idobasicmenuitem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/idobasicmenuitem.c')
-rw-r--r--src/idobasicmenuitem.c65
1 files changed, 39 insertions, 26 deletions
diff --git a/src/idobasicmenuitem.c b/src/idobasicmenuitem.c
index 29444ab..5106144 100644
--- a/src/idobasicmenuitem.c
+++ b/src/idobasicmenuitem.c
@@ -1,6 +1,6 @@
/*
* Copyright 2013 Canonical Ltd.
- * Copyright 2021 Robert Tari
+ * Copyright 2021-2023 Robert Tari
*
* Authors:
* Charles Kerr <charles.kerr@canonical.com>
@@ -20,7 +20,7 @@
*/
#include <gtk/gtk.h>
-
+#include "idodetaillabel.h"
#include "idoactionhelper.h"
#include "idobasicmenuitem.h"
@@ -126,6 +126,7 @@ my_dispose (GObject * object)
g_clear_object (&p->icon);
g_clear_object (&p->pPixbuf);
+ g_clear_object (&p->secondary_label);
G_OBJECT_CLASS (ido_basic_menu_item_parent_class)->dispose (object);
}
@@ -162,25 +163,8 @@ ido_basic_menu_item_update_image (IdoBasicMenuItem *self)
}
else if (p->icon)
{
- GtkIconInfo *info;
- const gchar *filename;
-
- info = gtk_icon_theme_lookup_by_gicon (gtk_icon_theme_get_default (), p->icon, 16, 0);
- filename = gtk_icon_info_get_filename (info);
-
- if (filename)
- {
- GdkPixbuf *pixbuf;
-
- pixbuf = gdk_pixbuf_new_from_file_at_scale (filename, -1, 16, TRUE, NULL);
- gtk_image_set_from_pixbuf (GTK_IMAGE (p->image), pixbuf);
-
- g_object_unref (pixbuf);
- }
-
- gtk_widget_set_visible (p->image, filename != NULL);
-
- g_object_unref (info);
+ gtk_image_set_from_gicon (GTK_IMAGE (p->image), p->icon, GTK_ICON_SIZE_MENU);
+ gtk_widget_set_visible (p->image, TRUE);
}
}
}
@@ -258,9 +242,10 @@ ido_basic_menu_item_init (IdoBasicMenuItem *self)
p->label = gtk_label_new ("");
gtk_widget_set_halign(p->label, GTK_ALIGN_START);
gtk_widget_set_valign(p->label, GTK_ALIGN_CENTER);
- p->secondary_label = gtk_label_new ("");
+ p->secondary_label = g_object_ref (ido_detail_label_new (""));
gtk_widget_set_halign(p->secondary_label, GTK_ALIGN_END);
gtk_widget_set_valign(p->secondary_label, GTK_ALIGN_CENTER);
+ gtk_style_context_add_class (gtk_widget_get_style_context (p->secondary_label), "accelerator");
w = gtk_grid_new ();
grid = GTK_GRID (w);
@@ -370,12 +355,25 @@ ido_basic_menu_item_set_secondary_text (IdoBasicMenuItem * self, const char * se
{
g_free (p->secondary_text);
p->secondary_text = g_strdup (secondary_text);
+ ido_detail_label_set_text (IDO_DETAIL_LABEL (p->secondary_label), p->secondary_text);
+ gtk_widget_set_visible (p->secondary_label, (gboolean)(p->secondary_text && *p->secondary_text));
+ }
+}
- g_object_set (G_OBJECT(p->secondary_label),
- "label", p->secondary_text,
- "visible", (gboolean)(p->secondary_text && *p->secondary_text),
- NULL);
+void ido_basic_menu_item_set_secondary_count (IdoBasicMenuItem *self, gint nCount)
+{
+ IdoBasicMenuItemPrivate *pPrivate = ido_basic_menu_item_get_instance_private (self);
+ gchar *sSecondaryText = g_strdup_printf("%i", nCount);
+
+ if (g_strcmp0 (pPrivate->secondary_text, sSecondaryText))
+ {
+ g_free (pPrivate->secondary_text);
+ pPrivate->secondary_text = g_strdup (sSecondaryText);
+ ido_detail_label_set_count (IDO_DETAIL_LABEL (pPrivate->secondary_label), nCount);
+ gtk_widget_set_visible (pPrivate->secondary_label, (gboolean)(pPrivate->secondary_text && *pPrivate->secondary_text));
}
+
+ g_free (sSecondaryText);
}
static void
@@ -410,6 +408,21 @@ ido_basic_menu_item_new_from_model (GMenuItem * menu_item,
g_free (label);
}
+ gchar *sSecondaryText;
+
+ if (g_menu_item_get_attribute (menu_item, "x-ayatana-secondary-text", "s", &sSecondaryText))
+ {
+ ido_basic_menu_item_set_secondary_text (IDO_BASIC_MENU_ITEM (item), sSecondaryText);
+ g_free (sSecondaryText);
+ }
+
+ guint nSecondaryCount;
+
+ if (g_menu_item_get_attribute (menu_item, "x-ayatana-secondary-count", "i", &nSecondaryCount))
+ {
+ ido_basic_menu_item_set_secondary_count (IDO_BASIC_MENU_ITEM (item), nSecondaryCount);
+ }
+
serialized_icon = g_menu_item_get_attribute_value (menu_item, "icon", NULL);
if (serialized_icon)
{