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

Reply via email to