]> git.plutz.net Git - gladerunner/commitdiff
XML insertion into UI
authorPaul Hänsch <paul@plutz.net>
Tue, 28 Jul 2026 10:44:03 +0000 (12:44 +0200)
committerPaul Hänsch <paul@plutz.net>
Tue, 28 Jul 2026 10:44:03 +0000 (12:44 +0200)
glade2.glade
gladerunner.c

index e51b88b8e74b603cd55fb27894c33895794f4bbc..3c97b4b99e12d15cf4cc8c15eec1dd24db391f0d 100644 (file)
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
                     <property name="receives-default">False</property>
+                    <property name="active">True</property>
                     <property name="draw-indicator">True</property>
                   </object>
                   <packing>
           </packing>
         </child>
         <child>
-          <placeholder/>
+          <object class="GtkLabel" id="l">
+            <property name="visible">True</property>
+            <property name="can-focus">False</property>
+            <property name="label" translatable="yes">label</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">4</property>
+          </packing>
         </child>
       </object>
     </child>
index 16ff6cd2b4c5e343c588000ed5f96f888e919491..a5a529de84df03e370437d569ef785c1d8d5099f 100644 (file)
@@ -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))