New API lxpanel_button_set_label() to change label of button created with lxpanel_but...
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Sat, 22 Nov 2014 17:22:42 +0000 (19:22 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Sat, 22 Nov 2014 17:22:42 +0000 (19:22 +0200)
ChangeLog
src/input-button.c
src/misc.c
src/misc.h

index 1e08c3f..f33bdd1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -69,6 +69,8 @@
 * Added new API lxpanel_button_compose() for future usage by plugins.
 * Added optional volumealsa plugin volume mapping from alsamixer (patch
     from Peter).
+* Added new API lxpanel_button_set_label() to change label of button that
+    was created using some lxpanel_button_*() API.
 
 0.7.2
 -------------------------------------------------------------------------
index 31cce6f..24f7a81 100644 (file)
@@ -300,7 +300,6 @@ GtkWidget *panel_config_hotkey_button_new(const char *label, const char *hotkey)
 GtkWidget *panel_config_click_button_new(const char *label, const char *click)
 {
     PanelCfgInputButton *btn = _config_input_button_new(label);
-    char *text;
 
     btn->do_click = TRUE;
     if (click && *click)
index 74cf3f4..785d5f3 100644 (file)
@@ -990,6 +990,38 @@ void lxpanel_button_update_icon(GtkWidget* btn, FmIcon *icon, gint size)
     _lxpanel_button_set_icon(btn, g_object_ref(icon), size);
 }
 
+gboolean lxpanel_button_set_label(GtkWidget *btn, const char *label)
+{
+    /* Locate the image within the button. */
+    GtkWidget * child = gtk_bin_get_child(GTK_BIN(btn));
+    GtkWidget * lbl = NULL;
+    GtkWidget * img = NULL;
+    ImgData * data = NULL;
+
+    if (GTK_IS_BOX(child))
+    {
+        GList * children = gtk_container_get_children(GTK_CONTAINER(child)), *l;
+        for (l = children; l; l = l->next)
+            if (GTK_IS_LABEL(l->data))
+                lbl = l->data;
+            else if (GTK_IS_IMAGE(l->data))
+                img = l->data;
+        g_list_free(children);
+    }
+
+    if (G_UNLIKELY(lbl == NULL))
+        return FALSE;
+
+    if (G_LIKELY(img != NULL))
+        data = (ImgData *) g_object_get_qdata(G_OBJECT(img), img_data_id);
+
+    if (G_LIKELY(data != NULL && data->panel != NULL))
+        lxpanel_draw_label_text(data->panel, lbl, label, FALSE, 1, TRUE);
+    else
+        gtk_label_set_text(GTK_LABEL(lbl), label);
+    return TRUE;
+}
+
 /* parameters width and keep_ratio are unused, kept for backward compatibility */
 void fb_button_set_from_file(GtkWidget * btn, const char * img_file, gint width, gint height, gboolean keep_ratio)
 {
index 8a7e143..8c0dd2a 100644 (file)
@@ -175,6 +175,21 @@ extern void lxpanel_button_set_icon(GtkWidget* btn, const gchar *name, gint size
 extern void lxpanel_button_update_icon(GtkWidget* btn, FmIcon *icon, gint size);
 
 /**
+ * lxpanel_button_set_label
+ * @btn: a button instance
+ * @label: new label text
+ *
+ * Changes text of label created with lxpanel_button_new_for_icon(),
+ * lxpanel_button_new_for_fm_icon(), or lxpanel_button_compose(). Does
+ * nothing if those API were called with NULL passed as label.
+ *
+ * Returns: %TRUE in case of success.
+ *
+ * Since: 0.8.0
+ */
+extern gboolean lxpanel_button_set_label(GtkWidget *btn, const char *label);
+
+/**
  * lxpanel_button_compose
  * @event_box: a widget to add image and label
  * @image: an image widget