GtkActionable in action

I have seen several people (including myself) struggling with disabling/enabling menu items, toolbar buttons and similar UI interfaces based on different conditions. It gets even worse if there are multiple representations of the same action in the same application, e.g. a menu item and a toolbar button exists for the same action. But with GTK+ 3.4, we have GtkAction, which is exactly for this kind of situations.

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
  <requires lib="gtk+" version="3.10"/>
  <object class="GtkAccelGroup" id="accelgroup1"/>
  <object class="GtkActionGroup" id="actiongroup1">
    <property name="accel_group">accelgroup1</property>
  </object>
  <object class="GtkAction" id="radio_action">
    <property name="label" translatable="yes">Radio Action Label</property>
  </object>
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <child>
      <object class="GtkGrid" id="grid1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <child>
          <object class="GtkMenuBar" id="menubar1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <child>
              <object class="GtkMenuItem" id="menuitem1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="label" translatable="yes">_File</property>
                <property name="use_underline">True</property>
                <child type="submenu">
                  <object class="GtkMenu" id="menu1">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <child>
                      <object class="GtkRadioMenuItem" id="imagemenuitem1">
                        <property name="use_action_appearance">True</property>
                        <property name="related_action">radio_action</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="label" translatable="yes">Radio 1</property>
                        <property name="use_underline">True</property>
                        <property name="draw_as_radio">True</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkRadioMenuItem" id="imagemenuitem2">
                        <property name="use_action_appearance">True</property>
                        <property name="related_action">radio_action</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="label" translatable="yes">Radio 2</property>
                        <property name="use_underline">True</property>
                        <property name="draw_as_radio">True</property>
                        <property name="group">imagemenuitem1</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkRadioMenuItem" id="imagemenuitem3">
                        <property name="use_action_appearance">True</property>
                        <property name="related_action">radio_action</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="label" translatable="yes">Radio 3</property>
                        <property name="use_underline">True</property>
                        <property name="draw_as_radio">True</property>
                        <property name="group">imagemenuitem1</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkCheckMenuItem" id="imagemenuitem5">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="use_underline">True</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkSeparatorMenuItem" id="separatormenuitem2">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                      </object>
                    </child>
                    <child>
                      <object class="GtkMenuItem" id="menuitem2">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="label" translatable="yes">menuitem2</property>
                        <property name="use_underline">True</property>
                      </object>
                    </child>
                  </object>
                </child>
              </object>
            </child>
          </object>
          <packing>
            <property name="left_attach">0</property>
            <property name="top_attach">0</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <object class="GtkToolbar" id="toolbar1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
          </object>
          <packing>
            <property name="left_attach">0</property>
            <property name="top_attach">1</property>
            <property name="width">1</property>
            <property name="height">1</property>
          </packing>
        </child>
        <child>
          <placeholder/>
        </child>
      </object>
    </child>
  </object>
</interface>

links

social