Re: Merging UI strings into Gtk::Builder?

Kjell Ahlstedt via gtkmm-list <[email protected]> Tue, 28 Jul 2020 11:01:07 +0200
Newsgroups gmane.comp.gnome.gtkmm
Message-ID <[email protected]>
I made some tests with the menus_and_toolbars example in 
gtkmm-documentation. Something like this will probably work:

   Glib::ustring ui_info =
     "<interface>"
     "  <menu id='menu-linuxchess'>"
     "    <submenu>"
...
     "    </submenu>"
     "  </menu>"
     "</interface>";

   Glib::ustring ui_info2 =
     "<interface>"
     "  <menu id='menu-linuxchess-part2'>"
     "    <submenu id="xyz">"
...
     "    </submenu>"
     "  </menu>"
     "</interface>";

   m_refBuilder = Gtk::Builder::create();
   m_refBuilder->add_from_string(ui_info);
   m_refBuilder->add_from_string(ui_info2);   auto object = m_refBuilder->get_object("menu-linuxchess");
   auto gmenu = Glib::RefPtr<Gio::Menu>::cast_dynamic(object);
   if (gmenu)
   {
     auto subobject = m_refBuilder->get_object("xyz");
     auto gsubmenu = Glib::RefPtr<Gio::Menu>::cast_dynamic(subobject);
     if (gsubmenu)
       gmenu->append_submenu("SomeLabel", gsubmenu);
   }

On 2020-07-27 15:50, Carlo Wood wrote:
> Hi,
>
> the documentation at
>
> https://developer.gnome.org/gtkmm/stable/classGtk_1_1Builder.html#ae3520ee31a98ac30b728f93522de8df5
>
> says: "Parses a string containing a GtkBuilder UI definition and merges
> it with the current contents of the builder."
>
> But when I try this:
>
>    Glib::ustring ui_info =
>      "<interface>"
>      "  <menu id='menu-linuxchess'>"
>      "    <submenu>"
> ...
>      "    </submenu>"
>      "  </menu>"
>      "</interface>";
>
>    Glib::ustring ui_info2 =
>      "<interface>"
>      "  <menu id='menu-linuxchess'>"
>      "    <submenu>"
> ...
>      "    </submenu>"
>      "  </menu>"
>      "</interface>";
>
>    m_refBuilder = Gtk::Builder::create();
>    m_refBuilder->add_from_string(ui_info);
>    m_refBuilder->add_from_string(ui_info2);
>
> Then the last line *replaces* the content of m_refBuilder.
> Nothing is merged, I just get a menu with the definition
> from ui_info2.
>
> How can I do this?

_______________________________________________
gtkmm-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtkmm-list