From: Paul Hänsch Date: Tue, 28 Jul 2026 10:44:03 +0000 (+0200) Subject: XML insertion into UI X-Git-Url: https://git.plutz.net/?a=commitdiff_plain;h=aa470fdc1ace4d01a1d2a3e039686afe302bc7e3;p=gladerunner XML insertion into UI --- diff --git a/glade2.glade b/glade2.glade index e51b88b..3c97b4b 100644 --- a/glade2.glade +++ b/glade2.glade @@ -347,6 +347,7 @@ True True False + True True @@ -417,7 +418,16 @@ - + + True + False + label + + + False + True + 4 + diff --git a/gladerunner.c b/gladerunner.c index 16ff6cd..a5a529d 100644 --- a/gladerunner.c +++ b/gladerunner.c @@ -161,11 +161,13 @@ int a_text_view(GtkTextView *w, char *cmd, char *args) { } void a_listbox_add(GtkListBox *w, char *arg) { - char *label = malloc(strlen(arg) + 1); - strcpy(label, arg); - GtkWidget *glabel = gtk_button_new_with_label(label); - gtk_list_box_insert(w, glabel, -1); - gtk_widget_set_visible(glabel, TRUE); + GtkWidget *wdg; + if (wdg = GTK_WIDGET(gtk_builder_get_object(builder, arg))) { + gtk_list_box_insert(w, wdg, -1); + gtk_widget_set_visible(wdg, TRUE); + } else { + dprintf(STDERR_FILENO, "Unknown Widget-ID: %s\n", arg); + } } int a_listbox(GtkListBox *w, char *cmd, char *args) { if (!w || !cmd || !cmd[0]) return 0; @@ -180,7 +182,20 @@ void a_builder_load(char *file) { GSList *widgets; GError *gerr = NULL; if ( ! gtk_builder_add_from_file(builder, file, &gerr) ) { - dprintf(STDERR_FILENO, "%s\n", gerr->message); + dprintf(STDERR_FILENO, "Error during \"load\": %s\n", gerr->message); + free(gerr); + } else { + widgets = gtk_builder_get_objects(builder); + g_slist_foreach(widgets, *init_widgets, NULL); + g_slist_free(widgets); + } +} + +void a_builder_add(char *xml) { + GSList *widgets; GError *gerr = NULL; + + if ( ! gtk_builder_add_from_string(builder, xml, -1, &gerr) ) { + dprintf(STDERR_FILENO, "Error during \"add\": %s\n", gerr->message); free(gerr); } else { widgets = gtk_builder_get_objects(builder); @@ -192,6 +207,7 @@ void a_builder_load(char *file) { int a_builder(char *cmd, char *args) { if (!cmd || !cmd[0]) return 0; else if (!strcmp(cmd, "load")) a_builder_load(args); + else if (!strcmp(cmd, "add")) a_builder_add(args); else return 0; return 1; } @@ -204,8 +220,10 @@ int action(char *cli) { if ( !wid || !wid[0] ) return 0; else if ( wid[0] == ':' && !wid[1] ) return a_builder(cmd, args); - else if (!(wdg = GTK_WIDGET(gtk_builder_get_object(builder, wid)))) return 0; - else if (0 + else if (!(wdg = GTK_WIDGET(gtk_builder_get_object(builder, wid)))) { + dprintf(STDERR_FILENO, "Unknown Widget-ID: %s\n", wid); + return 0; + } else if (0 || (GTK_IS_TOGGLE_BUTTON(wdg) && a_tb(GTK_TOGGLE_BUTTON(wdg), cmd, args)) || (GTK_IS_CHECK_MENU_ITEM(wdg) && a_cmi(GTK_CHECK_MENU_ITEM(wdg), cmd, args)) || (GTK_IS_TOGGLE_TOOL_BUTTON(wdg) && a_ttb(GTK_TOGGLE_TOOL_BUTTON(wdg), cmd, args))