+static void
+style_change_notify (GtkToolPalette *palette)
+{
+ GtkToolPalettePrivate* priv = palette->priv;
+
+ if (!priv->style_set)
+ {
+ /* pretend it was set, then unset, thus reverting to new default */
+ priv->style_set = TRUE;
+ gtk_tool_palette_unset_style (palette);
+ }
+}
+
+static void
+icon_size_change_notify (GtkToolPalette *palette)
+{
+ GtkToolPalettePrivate* priv = palette->priv;
+
+ if (!priv->icon_size_set)
+ {
+ /* pretend it was set, then unset, thus reverting to new default */
+ priv->icon_size_set = TRUE;
+ gtk_tool_palette_unset_icon_size (palette);
+ }
+}
+
+static void
+gtk_tool_palette_settings_change_notify (GtkSettings *settings,
+ const GParamSpec *pspec,
+ GtkToolPalette *palette)
+{
+ if (strcmp (pspec->name, "gtk-toolbar-style") == 0)
+ style_change_notify (palette);
+ else if (strcmp (pspec->name, "gtk-toolbar-icon-size") == 0)
+ icon_size_change_notify (palette);
+}
+
+static void
+gtk_tool_palette_screen_changed (GtkWidget *widget,
+ GdkScreen *previous_screen)
+{
+ GtkToolPalette *palette = GTK_TOOL_PALETTE (widget);
+ GtkToolPalettePrivate* priv = palette->priv;
+ GtkSettings *old_settings = priv->settings;
+ GtkSettings *settings;
+
+ if (gtk_widget_has_screen (GTK_WIDGET (palette)))
+ settings = gtk_widget_get_settings (GTK_WIDGET (palette));
+ else
+ settings = NULL;
+
+ if (settings == old_settings)
+ return;
+
+ if (old_settings)
+ {
+ g_signal_handler_disconnect (old_settings, priv->settings_connection);
+ priv->settings_connection = 0;
+ g_object_unref (old_settings);
+ }
+
+ if (settings)
+ {
+ priv->settings_connection =
+ g_signal_connect (settings, "notify",
+ G_CALLBACK (gtk_tool_palette_settings_change_notify),
+ palette);
+ priv->settings = g_object_ref (settings);
+ }
+ else
+ priv->settings = NULL;
+
+ gtk_tool_palette_reconfigured (palette);
+}
+
+