Chapter 12. Menus and Toolbars

Table of Contents

There are specific APIs for menus and toolbars, but you should usually deal with them together, creating Gio::SimpleActions that you can refer to in both menus and toolbars. In this way you can handle activation of the action instead of responding to the menu and toolbar items separately. And you can enable or disable both the menu and toolbar item via the action. Gtk::Builder can create menus and toolbars.

This involves the use of the Gio::SimpleActionGroup, Gio::SimpleAction and Gtk::Builder classes, all of which should be instantiated via their create() methods, which return RefPtrs.

Gtk::ActionGroup, Gtk::Action with its subclasses and Gtk::UIManager has been an alternative. These classes are deprecated from gtkmm version 3.22 and should not be used in newly-written code.

Actions

First create the Gio::SimpleActions and add them to a Gio::SimpleActionGroup, with Gio::ActionMap::add_action(). (Gio::ActionMap is a base class of Gio::SimpleActionGroup.) Then add the action group to your window with Gtk::Widget::insert_action_group().

The arguments to add_action() specify the action's name, which is used in the menu items and toolbar buttons. You can also specify a signal handler when calling add_action(). This signal handler will be called when the action is activated via either a menu item or a toolbar button.

For instance:

m_refActionGroup = Gio::SimpleActionGroup::create();

m_refActionGroup->add_action("new", sigc::mem_fun(*this, &ExampleWindow::on_action_file_new));
m_refActionGroup->add_action("open", sigc::mem_fun(*this, &ExampleWindow::on_action_file_open));
m_refActionGroup->add_action("quit", sigc::mem_fun(*this, &ExampleWindow::on_action_file_quit));

insert_action_group("example", m_refActionGroup);

If you use an Gtk::ApplicationWindow, you don't have to create your own action group. Gio::ActionGroup and Gio::ActionMap are base classes of Gtk::ApplicationWindow.