aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/genericmenuitem.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2009-12-16 13:41:29 -0600
committerTed Gould <ted@gould.cx>2009-12-16 13:41:29 -0600
commit0f9080a861c521e41fe4fa4c8c8ab138671d6659 (patch)
tree073d4a926d0d9ea2696ed13b55fb322470f455ff /libdbusmenu-gtk/genericmenuitem.c
parent7ee8c7fd98fa88c2821b955064240364d1c0c903 (diff)
downloadlibdbusmenu-0f9080a861c521e41fe4fa4c8c8ab138671d6659.tar.gz
libdbusmenu-0f9080a861c521e41fe4fa4c8c8ab138671d6659.tar.bz2
libdbusmenu-0f9080a861c521e41fe4fa4c8c8ab138671d6659.zip
Woot, a set label function.
Diffstat (limited to 'libdbusmenu-gtk/genericmenuitem.c')
-rw-r--r--libdbusmenu-gtk/genericmenuitem.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c
index 63cc936..d2a20ef 100644
--- a/libdbusmenu-gtk/genericmenuitem.c
+++ b/libdbusmenu-gtk/genericmenuitem.c
@@ -101,10 +101,50 @@ draw_indicator (GtkCheckMenuItem *check_menu_item, GdkRectangle *area)
return;
}
+/* A small helper to look through the widgets in the
+ box and find the one that is the label. */
+static void
+set_label_helper (GtkWidget * widget, gpointer data)
+{
+ GtkWidget ** labelval = (GtkWidget **)data;
+ if (GTK_IS_LABEL(widget)) {
+ *labelval = widget;
+ }
+ return;
+}
+
/* Set the label on the item */
static void
set_label (GtkMenuItem * menu_item, const gchar * label)
{
+ GtkWidget * child = gtk_bin_get_child(GTK_BIN(menu_item));
+
+ if (child == NULL) {
+ GtkWidget * labelw = gtk_label_new(label);
+ gtk_label_set_use_underline(GTK_LABEL(labelw), TRUE);
+ gtk_container_add(GTK_CONTAINER(menu_item), labelw);
+ } else if (GTK_IS_LABEL(child)) {
+ gtk_label_set_label(GTK_LABEL(child), label);
+ } else if (GTK_IS_BOX(child)) {
+ GtkWidget * labelw = NULL;
+ /* Look for the label */
+ gtk_container_foreach(GTK_CONTAINER(child), set_label_helper, &labelw);
+
+ if (labelw == NULL) {
+ /* We don't have a label, so we need to build */
+ labelw = gtk_label_new(label);
+ gtk_label_set_use_underline(GTK_LABEL(labelw), TRUE);
+ gtk_box_pack_end(GTK_BOX(child), labelw, TRUE, TRUE, 0);
+ } else {
+ /* We can reset the label that we have. */
+ gtk_label_set_label(GTK_LABEL(labelw), label);
+ }
+ } else {
+ g_error("Generic item in an indeterminate state.");
+ return;
+ }
+
+ g_object_notify(G_OBJECT(menu_item), "label");
return;
}