diff --git a/app/tools/gimpselectionoptions.c b/app/tools/gimpselectionoptions.c index 5d8e279c6f..dfcea7d9ef 100644 --- a/app/tools/gimpselectionoptions.c +++ b/app/tools/gimpselectionoptions.c @@ -26,6 +26,10 @@ #include "tools-types.h" +#include "config/gimpguiconfig.h" + +#include "core/gimp.h" + #include "widgets/gimppropwidgets.h" #include "widgets/gimpwidgets-utils.h" @@ -45,14 +49,18 @@ enum }; -static void gimp_selection_options_set_property (GObject *object, - guint property_id, - const GValue *value, - GParamSpec *pspec); -static void gimp_selection_options_get_property (GObject *object, - guint property_id, - GValue *value, - GParamSpec *pspec); +static void gimp_selection_options_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec); +static void gimp_selection_options_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec); +static void gimp_selection_options_style_updated (GimpGuiConfig *config, + GParamSpec *pspec, + GtkWidget *box); + G_DEFINE_TYPE (GimpSelectionOptions, gimp_selection_options, @@ -202,9 +210,11 @@ gimp_selection_options_get_modifiers (GimpChannelOps operation) GtkWidget * gimp_selection_options_gui (GimpToolOptions *tool_options) { - GObject *config = G_OBJECT (tool_options); - GimpSelectionOptions *options = GIMP_SELECTION_OPTIONS (tool_options); - GtkWidget *vbox = gimp_tool_options_gui (tool_options); + GObject *config = G_OBJECT (tool_options); + GimpContext *context = GIMP_CONTEXT (tool_options); + GimpGuiConfig *gui_config = GIMP_GUI_CONFIG (context->gimp->config); + GimpSelectionOptions *options = GIMP_SELECTION_OPTIONS (tool_options); + GtkWidget *vbox = gimp_tool_options_gui (tool_options); GtkWidget *button; /* the selection operation radio buttons */ @@ -228,6 +238,17 @@ gimp_selection_options_gui (GimpToolOptions *tool_options) box = gimp_prop_enum_icon_box_new (config, "operation", "gimp-selection", 0, 0); + + g_signal_connect_object (gui_config, + "notify::override-theme-icon-size", + G_CALLBACK (gimp_selection_options_style_updated), + box, G_CONNECT_AFTER); + g_signal_connect_object (gui_config, + "notify::custom-icon-size", + G_CALLBACK (gimp_selection_options_style_updated), + box, G_CONNECT_AFTER); + gimp_selection_options_style_updated (gui_config, NULL, box); + gtk_box_pack_start (GTK_BOX (hbox), box, FALSE, FALSE, 0); children = gtk_container_get_children (GTK_CONTAINER (box)); @@ -288,3 +309,32 @@ gimp_selection_options_gui (GimpToolOptions *tool_options) return vbox; } + +static void +gimp_selection_options_style_updated (GimpGuiConfig *config, + GParamSpec *pspec, + GtkWidget *box) +{ + GtkIconSize icon_size = GTK_ICON_SIZE_MENU; + + if (config->override_icon_size) + { + switch (config->custom_icon_size) + { + case GIMP_ICON_SIZE_LARGE: + icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR; + break; + + case GIMP_ICON_SIZE_HUGE: + icon_size = GTK_ICON_SIZE_DND; + break; + + case GIMP_ICON_SIZE_MEDIUM: + case GIMP_ICON_SIZE_SMALL: + default: + icon_size = GTK_ICON_SIZE_MENU; + } + } + + gimp_enum_icon_box_set_icon_size (box, icon_size); +} diff --git a/libgimpwidgets/gimpenumwidgets.c b/libgimpwidgets/gimpenumwidgets.c index 0d11ce27f1..ee9adde2fa 100644 --- a/libgimpwidgets/gimpenumwidgets.c +++ b/libgimpwidgets/gimpenumwidgets.c @@ -474,3 +474,36 @@ gimp_enum_icon_box_set_child_padding (GtkWidget *icon_box, g_list_free (children); } + +/** + * gimp_enum_icon_box_set_icon_size: + * @icon_box: an icon box widget + * @icon_size: the #GtkIconSize enum + * + * Sets the icon size of all buttons in a box created by + * gimp_enum_icon_box_new(). + * + * Since: 3.0 + **/ +void +gimp_enum_icon_box_set_icon_size (GtkWidget *icon_box, + GtkIconSize icon_size) +{ + GList *children; + GList *list; + + g_return_if_fail (GTK_IS_CONTAINER (icon_box)); + + children = gtk_container_get_children (GTK_CONTAINER (icon_box)); + + for (list = children; list; list = g_list_next (list)) + { + GtkWidget *child = gtk_bin_get_child (GTK_BIN (list->data)); + + g_object_set (child, + "icon-size", icon_size, + NULL); + } + + g_list_free (children); +} diff --git a/libgimpwidgets/gimpenumwidgets.h b/libgimpwidgets/gimpenumwidgets.h index a864e09cea..f7277a44ca 100644 --- a/libgimpwidgets/gimpenumwidgets.h +++ b/libgimpwidgets/gimpenumwidgets.h @@ -76,6 +76,8 @@ GtkWidget * gimp_enum_icon_box_new_with_range (GType enum_type, void gimp_enum_icon_box_set_child_padding (GtkWidget *icon_box, gint xpad, gint ypad); +void gimp_enum_icon_box_set_icon_size (GtkWidget *icon_box, + GtkIconSize icon_size); G_END_DECLS diff --git a/libgimpwidgets/gimpwidgets.def b/libgimpwidgets/gimpwidgets.def index 5972b685f3..8a92999875 100644 --- a/libgimpwidgets/gimpwidgets.def +++ b/libgimpwidgets/gimpwidgets.def @@ -179,6 +179,7 @@ EXPORTS gimp_enum_icon_box_new gimp_enum_icon_box_new_with_range gimp_enum_icon_box_set_child_padding + gimp_enum_icon_box_set_icon_size gimp_enum_label_get_type gimp_enum_label_new gimp_enum_label_set_value