Chapter 12. Menus and Toolbars

# Chapter 12. Menus and Toolbars

There are specific APIs for menus and toolbars, but you should usually deal with them together, creating `Gio::SimpleAction`s 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 `RefPtr`s.

`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::SimpleAction`s 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`.

Examples |  | Menubar and Toolbar