Why does `gtk_builder_add_objects` tell me "Object with ID saveas_csv not found" when adding to the glade XML?

Viewed 26

I'm trying to add a menu item to xnec2c by modifying its .glade file. The issue as described below generates the error .:9653:53 Object with ID saveas_csv not found. If I remove the <property name="image">saveas_csv</property> tag then it works, but the menu then item has no icon image. I would like to have the image icon be the same as the one for saveas_gnuplot as described below:

I've copy-pasted these as a starting point (links will take you to the .glade lines on github):

xnec2c.glade#L9537:

<object class="GtkImage" id="saveas_gnuplot">
  <property name="visible">True</property>
  <property name="can-focus">False</property>
  <property name="stock">gtk-save-as</property>
</object>             

xnec2c.glade#L9632:

<child>                                                                                   
  <object class="GtkImageMenuItem" id="freqplots_save_as_gnuplot">                        
    <property name="label" translatable="yes">Save as _gnuplot</property>                 
    <property name="visible">True</property>                                              
    <property name="can-focus">False</property>                                           
    <property name="use-underline">True</property>                                        
    <property name="image">saveas_gnuplot</property>                                      
    <property name="use-stock">False</property>                                           
    <signal name="activate" handler="on_freqplots_save_as_gnuplot_activate" swapped="no"/>
  </object>                                                                               
</child>                                                                                  
<child>                                                                                   

After copy-pasting just below each example above, I changed the ID's and changed the image property in the new GtkImageMenuItem to match as follows. Note that the only change were ids saveas_gnuplot to saveas_csv, and id+handlers *save_as_gnuplot* to *save_as_csv*:

<object class="GtkImage" id="saveas_csv">
  <property name="visible">True</property>
  <property name="can-focus">False</property>
  <property name="stock">gtk-save-as</property>
</object>
<child>
  <object class="GtkImageMenuItem" id="freqplots_save_as_csv">
    <property name="label" translatable="yes">Save as _CSV</property>
    <property name="visible">True</property>
    <property name="can-focus">False</property>
    <property name="use-underline">True</property>
    <property name="image">saveas_csv</property>
    <property name="use-stock">False</property>
    <signal name="activate" handler="on_freqplots_save_as_csv_activate" swapped="no"/>
  </object>
</child>

The saveas_gnuplot ID does show up in two other places in the .glade file, but they are just image references in other GTK windows so I don't think that is the issue:

Not sure if it is useful, but this is how the application loads the .glade file:

/* Create a builder from object ids */
*builder = gtk_builder_new();
ret = (int)gtk_builder_add_objects_from_resource(
    *builder, "/xnec2c.glade", object_ids, &gerror );
if( !ret )
{
  pr_err("failed to add objects to builder: %s\n", gerror->message);
  ...
}

and here is the debug output listing IDs that were loaded. As you can see, saveas_csv is not listed:

[16410 err:Gtk_Builder] interface.c:39: failed to add objects to builder: .:9668:53 Object with ID saveas_csv not found
[16410 err:Gtk_Builder] interface.c:41: Listing Object Ids:
[16410 err:Gtk_Builder] interface.c:45: freqplots_zo_adjustment
[16410 err:Gtk_Builder] interface.c:45: freqplots_window
[16410 err:Gtk_Builder] interface.c:45: freqplots_box
[16410 err:Gtk_Builder] interface.c:45: saveas_gnuplot
[16410 err:Gtk_Builder] interface.c:45: freqplots_nec2_edit
[16410 err:Gtk_Builder] interface.c:45: freqplots_fmhz_entry
[16410 err:Gtk_Builder] interface.c:45: freqplots_maxgain_entry
[16410 err:Gtk_Builder] interface.c:45: freqplots_vswr_entry
[16410 err:Gtk_Builder] interface.c:45: freqplots_zreal_entry
[16410 err:Gtk_Builder] interface.c:45: freqplots_zimag_entry
[16410 err:Gtk_Builder] interface.c:45: freqplots_zo_spinbutton
[16410 err:Gtk_Builder] interface.c:45: freqplots_drawingarea
[16410 err:Gtk_Builder] interface.c:45: freqplots_label
[16410 err:Gtk_Builder] interface.c:45: freqplots_net_gain

This is the diff against the .glade file if you would like to try it:

diff --git a/resources/xnec2c.glade b/resources/xnec2c.glade
index 363167e..fefc806 100644
--- a/resources/xnec2c.glade
+++ b/resources/xnec2c.glade
@@ -9539,6 +9539,11 @@ Save NEC2 Editor data first?
     <property name="can-focus">False</property>
     <property name="stock">gtk-save-as</property>
   </object>
+  <object class="GtkImage" id="saveas_csv">
+    <property name="visible">True</property>
+    <property name="can-focus">False</property>
+    <property name="stock">gtk-save-as</property>
+  </object>
   <object class="GtkWindow" id="freqplots_window">
     <property name="visible">True</property>
     <property name="can-focus">False</property>
@@ -9640,6 +9645,17 @@ Save NEC2 Editor data first?
                           </object>
                         </child>
                         <child>
+                          <object class="GtkImageMenuItem" id="freqplots_save_as_csv">
+                            <property name="label" translatable="yes">Save as _CSV</property>
+                            <property name="visible">True</property>
+                            <property name="can-focus">False</property>
+                            <property name="use-underline">True</property>
+                            <property name="image">saveas_csv</property>
+                            <property name="use-stock">False</property>
+                            <signal name="activate" handler="on_freqplots_save_as_csv_activate" swapped="no"/>
+                          </object>
+                        </child>
+                        <child>
                           <object class="GtkMenuItem" id="freqplots_touchstone_menu">
                             <property name="visible">True</property>
                             <property name="can-focus">False</property>
0 Answers
Related