+static void
+gtk_tool_button_activatable_interface_init (GtkActivatableIface *iface)
+{
+ parent_activatable_iface = g_type_interface_peek_parent (iface);
+ iface->update = gtk_tool_button_update;
+ iface->sync_action_properties = gtk_tool_button_sync_action_properties;
+}
+
+static void
+gtk_tool_button_update (GtkActivatable *activatable,
+ GtkAction *action,
+ const gchar *property_name)
+{
+ GtkToolButton *button;
+ GtkWidget *image;
+
+ parent_activatable_iface->update (activatable, action, property_name);
+
+ if (!gtk_activatable_get_use_action_appearance (activatable))
+ return;
+
+ button = GTK_TOOL_BUTTON (activatable);
+
+ if (strcmp (property_name, "short-label") == 0)
+ gtk_tool_button_set_label (button, gtk_action_get_short_label (action));
+ else if (strcmp (property_name, "stock-id") == 0)
+ gtk_tool_button_set_stock_id (button, gtk_action_get_stock_id (action));
+ else if (strcmp (property_name, "gicon") == 0)
+ {
+ const gchar *stock_id = gtk_action_get_stock_id (action);
+ GIcon *icon = gtk_action_get_gicon (action);
+ GtkIconSize icon_size = GTK_ICON_SIZE_BUTTON;
+
+ if ((stock_id && gtk_icon_factory_lookup_default (stock_id)) || !icon)
+ image = NULL;
+ else
+ {
+ image = gtk_tool_button_get_icon_widget (button);
+ icon_size = gtk_tool_item_get_icon_size (GTK_TOOL_ITEM (button));
+
+ if (!image)
+ image = gtk_image_new ();
+ }
+
+ gtk_tool_button_set_icon_widget (button, image);
+ gtk_image_set_from_gicon (GTK_IMAGE (image), icon, icon_size);
+
+ }
+ else if (strcmp (property_name, "icon-name") == 0)
+ gtk_tool_button_set_icon_name (button, gtk_action_get_icon_name (action));
+}
+
+static void
+gtk_tool_button_sync_action_properties (GtkActivatable *activatable,
+ GtkAction *action)
+{
+ GtkToolButton *button;
+ GIcon *icon;
+ const gchar *stock_id;
+
+ parent_activatable_iface->sync_action_properties (activatable, action);
+
+ if (!action)
+ return;
+
+ if (!gtk_activatable_get_use_action_appearance (activatable))
+ return;
+
+ button = GTK_TOOL_BUTTON (activatable);
+ stock_id = gtk_action_get_stock_id (action);
+
+ gtk_tool_button_set_label (button, gtk_action_get_short_label (action));
+ gtk_tool_button_set_use_underline (button, TRUE);
+ gtk_tool_button_set_stock_id (button, stock_id);
+ gtk_tool_button_set_icon_name (button, gtk_action_get_icon_name (action));
+
+ if (stock_id && gtk_icon_factory_lookup_default (stock_id))
+ gtk_tool_button_set_icon_widget (button, NULL);
+ else if ((icon = gtk_action_get_gicon (action)) != NULL)
+ {
+ GtkIconSize icon_size = gtk_tool_item_get_icon_size (GTK_TOOL_ITEM (button));
+ GtkWidget *image = gtk_tool_button_get_icon_widget (button);
+
+ if (!image)
+ {
+ image = gtk_image_new ();
+ gtk_widget_show (image);
+ gtk_tool_button_set_icon_widget (button, image);
+ }
+
+ gtk_image_set_from_gicon (GTK_IMAGE (image), icon, icon_size);
+ }
+ else if (gtk_action_get_icon_name (action))
+ gtk_tool_button_set_icon_name (button, gtk_action_get_icon_name (action));
+ else
+ gtk_tool_button_set_label (button, gtk_action_get_short_label (action));
+}
+