+static void
+gtk_tool_item_activatable_interface_init (GtkActivatableIface *iface)
+{
+ iface->update = gtk_tool_item_update;
+ iface->sync_action_properties = gtk_tool_item_sync_action_properties;
+}
+
+static void
+gtk_tool_item_update (GtkActivatable *activatable,
+ GtkAction *action,
+ const gchar *property_name)
+{
+ if (strcmp (property_name, "visible") == 0)
+ {
+ if (gtk_action_is_visible (action))
+ gtk_widget_show (GTK_WIDGET (activatable));
+ else
+ gtk_widget_hide (GTK_WIDGET (activatable));
+ }
+ else if (strcmp (property_name, "sensitive") == 0)
+ gtk_widget_set_sensitive (GTK_WIDGET (activatable), gtk_action_is_sensitive (action));
+ else if (strcmp (property_name, "tooltip") == 0)
+ gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM (activatable),
+ gtk_action_get_tooltip (action));
+ else if (strcmp (property_name, "visible-horizontal") == 0)
+ gtk_tool_item_set_visible_horizontal (GTK_TOOL_ITEM (activatable),
+ gtk_action_get_visible_horizontal (action));
+ else if (strcmp (property_name, "visible-vertical") == 0)
+ gtk_tool_item_set_visible_vertical (GTK_TOOL_ITEM (activatable),
+ gtk_action_get_visible_vertical (action));
+ else if (strcmp (property_name, "is-important") == 0)
+ gtk_tool_item_set_is_important (GTK_TOOL_ITEM (activatable),
+ gtk_action_get_is_important (action));
+}
+
+static void
+gtk_tool_item_sync_action_properties (GtkActivatable *activatable,
+ GtkAction *action)
+{
+ if (!action)
+ return;
+
+ if (gtk_action_is_visible (action))
+ gtk_widget_show (GTK_WIDGET (activatable));
+ else
+ gtk_widget_hide (GTK_WIDGET (activatable));
+
+ gtk_widget_set_sensitive (GTK_WIDGET (activatable), gtk_action_is_sensitive (action));
+
+ gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM (activatable),
+ gtk_action_get_tooltip (action));
+ gtk_tool_item_set_visible_horizontal (GTK_TOOL_ITEM (activatable),
+ gtk_action_get_visible_horizontal (action));
+ gtk_tool_item_set_visible_vertical (GTK_TOOL_ITEM (activatable),
+ gtk_action_get_visible_vertical (action));
+ gtk_tool_item_set_is_important (GTK_TOOL_ITEM (activatable),
+ gtk_action_get_is_important (action));
+}
+
+static void
+gtk_tool_item_set_related_action (GtkToolItem *item,
+ GtkAction *action)
+{
+ if (item->priv->action == action)
+ return;
+
+ gtk_activatable_do_set_related_action (GTK_ACTIVATABLE (item), action);
+
+ item->priv->action = action;
+
+ if (action)
+ {
+ gtk_tool_item_rebuild_menu (item);
+ }
+}
+
+static void
+gtk_tool_item_set_use_action_appearance (GtkToolItem *item,
+ gboolean use_appearance)
+{
+ if (item->priv->use_action_appearance != use_appearance)
+ {
+ item->priv->use_action_appearance = use_appearance;
+
+ gtk_activatable_sync_action_properties (GTK_ACTIVATABLE (item), item->priv->action);
+ }
+}
+
+