diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c index 7507156d43..137e19665c 100644 --- a/app/dialogs/preferences-dialog.c +++ b/app/dialogs/preferences-dialog.c @@ -90,6 +90,7 @@ static GtkWidget * prefs_dialog_new (Gimp *gimp, static void prefs_response (GtkWidget *widget, gint response_id, GtkWidget *dialog); +static void prefs_box_style_updated (GtkWidget *widget); static void prefs_color_management_reset (GtkWidget *widget, GObject *config); @@ -391,6 +392,14 @@ prefs_response (GtkWidget *widget, gtk_widget_destroy (dialog); } +static void +prefs_box_style_updated (GtkWidget *widget) +{ + GimpPrefsBox *box = GIMP_PREFS_BOX (widget); + + GTK_WIDGET_GET_CLASS (box)->style_updated (GTK_WIDGET (box)); +} + static void prefs_color_management_reset (GtkWidget *widget, GObject *config) @@ -1193,6 +1202,16 @@ prefs_dialog_new (Gimp *gimp, g_object_set_data (G_OBJECT (dialog), "prefs-box", prefs_box); + /* Notify the prefs box to update its tree icon sizes + * based on user preferences */ + g_signal_connect_object (config, + "notify::override-theme-icon-size", + G_CALLBACK (prefs_box_style_updated), + prefs_box, G_CONNECT_AFTER | G_CONNECT_SWAPPED); + g_signal_connect_object (config, + "notify::custom-icon-size", + G_CALLBACK (prefs_box_style_updated), + prefs_box, G_CONNECT_AFTER | G_CONNECT_SWAPPED); /**********************/ /* System Resources */ diff --git a/app/gui/themes.c b/app/gui/themes.c index 23c1572a74..91d5ec8abb 100644 --- a/app/gui/themes.c +++ b/app/gui/themes.c @@ -484,6 +484,8 @@ themes_apply_theme (Gimp *gimp, "\n" "* { -GimpColorNotebook-tab-icon-size: %s; }" "\n" + "* { -GimpPrefsBox-tab-icon-size: %s; }" + "\n" "* { -GimpEditor-button-icon-size: %s; }" "\n" "* { -GimpDisplayShell-button-icon-size: %s; }" @@ -496,8 +498,8 @@ themes_apply_theme (Gimp *gimp, "\n" "paned separator { padding: %dpx; }", tool_icon_size, tool_icon_size, tab_icon_size, tab_icon_size, - button_icon_size, button_icon_size, tool_icon_size, pal_padding, - tab_padding, sep_padding); + tab_icon_size, button_icon_size, button_icon_size, tool_icon_size, + pal_padding, tab_padding, sep_padding); } if (! error && config->font_relative_size != 1.0) diff --git a/app/widgets/gimpprefsbox.c b/app/widgets/gimpprefsbox.c index dafd5d7a06..d3217d1307 100644 --- a/app/widgets/gimpprefsbox.c +++ b/app/widgets/gimpprefsbox.c @@ -64,7 +64,13 @@ struct _GimpPrefsBoxPrivate #define GET_PRIVATE(obj) (((GimpPrefsBox *) (obj))->priv) -static void gimp_prefs_box_finalize (GObject *object); +static void gimp_prefs_box_finalize (GObject *object); + +static void gimp_prefs_box_style_updated (GtkWidget *widget); +static gboolean gimp_prefs_box_style_updated_foreach (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer data); static void gimp_prefs_box_tree_select_callback (GtkTreeSelection *sel, GimpPrefsBox *box); @@ -78,9 +84,21 @@ G_DEFINE_TYPE_WITH_PRIVATE (GimpPrefsBox, gimp_prefs_box, GTK_TYPE_BOX) static void gimp_prefs_box_class_init (GimpPrefsBoxClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->finalize = gimp_prefs_box_finalize; + + widget_class->style_updated = gimp_prefs_box_style_updated; + + gtk_widget_class_install_style_property (widget_class, + g_param_spec_enum ("tab-icon-size", + NULL, NULL, + GTK_TYPE_ICON_SIZE, + GTK_ICON_SIZE_BUTTON, + G_PARAM_READABLE)); + + gtk_widget_class_set_css_name (widget_class, "GimpPrefsBox"); } static void @@ -90,6 +108,7 @@ gimp_prefs_box_init (GimpPrefsBox *box) GtkTreeViewColumn *column; GtkCellRenderer *cell; GtkTreeSelection *sel; + GtkIconSize tab_icon_size; GtkWidget *frame; GtkWidget *hbox; GtkWidget *vbox; @@ -98,7 +117,11 @@ gimp_prefs_box_init (GimpPrefsBox *box) private = box->priv; - private->tree_icon_size = GTK_ICON_SIZE_BUTTON; + gtk_widget_style_get (GTK_WIDGET (box), + "tab-icon-size", &tab_icon_size, + NULL); + + private->tree_icon_size = tab_icon_size; private->page_icon_size = GTK_ICON_SIZE_DIALOG; gtk_orientable_set_orientation (GTK_ORIENTABLE (box), @@ -208,6 +231,37 @@ gimp_prefs_box_finalize (GObject *object) G_OBJECT_CLASS (parent_class)->finalize (object); } +static void +gimp_prefs_box_style_updated (GtkWidget *widget) +{ + GTK_WIDGET_CLASS (parent_class)->style_updated (widget); + + if (GET_PRIVATE (widget)->store) + gtk_tree_model_foreach (GTK_TREE_MODEL (GET_PRIVATE (widget)->store), + gimp_prefs_box_style_updated_foreach, + widget); +} + +static gboolean +gimp_prefs_box_style_updated_foreach (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + gpointer data) +{ + GimpPrefsBox *box = GIMP_PREFS_BOX (data); + GtkIconSize tab_icon_size; + + gtk_widget_style_get (GTK_WIDGET (box), + "tab-icon-size", &tab_icon_size, + NULL); + + gtk_tree_store_set (GTK_TREE_STORE (model), iter, + COLUMN_TREE_ICON_SIZE, tab_icon_size, + -1); + + return FALSE; +} + static void gimp_prefs_box_tree_select_callback (GtkTreeSelection *sel, GimpPrefsBox *box)