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.

Alternatively, `Gtk::ActionGroup`, `Gtk::Action` and `Gtk::UIManager` can be used, but this is not recommended in new code. `GtkAction`, `GtkActionGroup` and `GtkUIManager` are deprecated in GTK+ from version 3.10. The corresponding classes in gtkmm will be deprecated in the future.

## 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