[gimp] app: various tool options and tool preset fixes
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: various tool options and tool preset fixes
- Date: Mon, 23 Jan 2012 21:46:37 +0000 (UTC)
commit 569b262e2ddb2e8cf89bd08e92eb40e3533a3741
Author: Michael Natterer <mitch gimp org>
Date: Mon Jan 23 22:40:49 2012 +0100
app: various tool options and tool preset fixes
- move the code that sets the tool options' "defined" and "serialize"
properties from GimpToolInto to GimpToolOptions so they are always
set correctly.
- make GimpToolOptions fix broken serialized NULL tools automatically.
- make sure a GimpToolPreset's tool options always has a tool set. If all
fails, set a NULL tool explicitly and let the logic in GimpToolOptions
find the right tool.
- set GimpToolPreset's "use" booleans to FALSE for context properties
that have no effect on the tool.
- set GimpToolPresetEditor's toggle insensitive for these properties.
app/core/gimptoolinfo.c | 9 ---
app/core/gimptooloptions.c | 17 +++++--
app/core/gimptoolpreset.c | 100 ++++++++++++++++++++++++++++++------
app/widgets/gimptoolpreseteditor.c | 88 ++++++++++++++++++++++---------
4 files changed, 160 insertions(+), 54 deletions(-)
---
diff --git a/app/core/gimptoolinfo.c b/app/core/gimptoolinfo.c
index 013d82e..57dc665 100644
--- a/app/core/gimptoolinfo.c
+++ b/app/core/gimptoolinfo.c
@@ -292,15 +292,6 @@ gimp_tool_info_new (Gimp *gimp,
"tool", tool_info,
"tool-info", tool_info, NULL);
- if (tool_info->context_props)
- {
- gimp_context_define_properties (GIMP_CONTEXT (tool_info->tool_options),
- tool_info->context_props, FALSE);
- }
-
- gimp_context_set_serialize_properties (GIMP_CONTEXT (tool_info->tool_options),
- tool_info->context_props);
-
if (tool_info->tool_options_type != GIMP_TYPE_TOOL_OPTIONS)
{
GimpContainer *presets;
diff --git a/app/core/gimptooloptions.c b/app/core/gimptooloptions.c
index b8981d7..21ef6b2 100644
--- a/app/core/gimptooloptions.c
+++ b/app/core/gimptooloptions.c
@@ -137,7 +137,7 @@ gimp_tool_options_check_tool_info (GimpToolOptions *options,
GimpToolInfo *tool_info,
gboolean warn)
{
- if (G_OBJECT_TYPE (options) == tool_info->tool_options_type)
+ if (tool_info && G_OBJECT_TYPE (options) == tool_info->tool_options_type)
{
return tool_info;
}
@@ -145,7 +145,7 @@ gimp_tool_options_check_tool_info (GimpToolOptions *options,
{
GList *list;
- for (list = gimp_get_tool_info_iter (tool_info->gimp);
+ for (list = gimp_get_tool_info_iter (GIMP_CONTEXT (options)->gimp);
list;
list = g_list_next (list))
{
@@ -157,7 +157,7 @@ gimp_tool_options_check_tool_info (GimpToolOptions *options,
g_printerr ("%s: correcting bogus deserialized tool "
"type '%s' with right type '%s'\n",
g_type_name (G_OBJECT_TYPE (options)),
- gimp_object_get_name (tool_info),
+ tool_info ? gimp_object_get_name (tool_info) : "NULL",
gimp_object_get_name (new_info));
return new_info;
@@ -205,7 +205,16 @@ gimp_tool_options_set_property (GObject *object,
tool_info = gimp_tool_options_check_tool_info (options, tool_info, TRUE);
if (! options->tool_info)
- options->tool_info = g_value_dup_object (value);
+ {
+ options->tool_info = g_object_ref (tool_info);
+
+ if (tool_info->context_props)
+ gimp_context_define_properties (GIMP_CONTEXT (options),
+ tool_info->context_props, FALSE);
+
+ gimp_context_set_serialize_properties (GIMP_CONTEXT (options),
+ tool_info->context_props);
+ }
}
break;
diff --git a/app/core/gimptoolpreset.c b/app/core/gimptoolpreset.c
index a4a248b..650a479 100644
--- a/app/core/gimptoolpreset.c
+++ b/app/core/gimptoolpreset.c
@@ -335,9 +335,10 @@ gimp_tool_preset_deserialize_property (GimpConfig *config,
{
case PROP_TOOL_OPTIONS:
{
- GObject *options;
- gchar *type_name;
- GType type;
+ GObject *options;
+ gchar *type_name;
+ GType type;
+ GimpContextPropMask serialize_props;
if (! gimp_scanner_parse_string (scanner, &type_name))
{
@@ -381,10 +382,37 @@ gimp_tool_preset_deserialize_property (GimpConfig *config,
break;
}
- /* this is a hack */
- g_object_set (options,
- "tool-info", gimp_context_get_tool (GIMP_CONTEXT (options)),
- NULL);
+ /* we need both tool and tool-info on the options */
+ if (gimp_context_get_tool (GIMP_CONTEXT (options)))
+ {
+ g_object_set (options,
+ "tool-info",
+ gimp_context_get_tool (GIMP_CONTEXT (options)),
+ NULL);
+ }
+ else if (GIMP_TOOL_OPTIONS (options)->tool_info)
+ {
+ g_object_set (options,
+ "tool", GIMP_TOOL_OPTIONS (options)->tool_info,
+ NULL);
+ }
+ else
+ {
+ /* if we have none, the options set_property() logic will
+ * replace the NULL with its best guess
+ */
+ g_object_set (options,
+ "tool", NULL,
+ "tool-info", NULL,
+ NULL);
+ }
+
+ serialize_props =
+ gimp_context_get_serialize_properties (GIMP_CONTEXT (options));
+
+ gimp_context_set_serialize_properties (GIMP_CONTEXT (options),
+ serialize_props |
+ GIMP_CONTEXT_TOOL_MASK);
g_value_take_object (value, options);
}
@@ -413,9 +441,39 @@ gimp_tool_preset_set_options (GimpToolPreset *preset,
if (options)
{
+ GimpContextPropMask serialize_props;
+
preset->tool_options =
GIMP_TOOL_OPTIONS (gimp_config_duplicate (GIMP_CONFIG (options)));
+ serialize_props =
+ gimp_context_get_serialize_properties (GIMP_CONTEXT (preset->tool_options));
+
+ gimp_context_set_serialize_properties (GIMP_CONTEXT (preset->tool_options),
+ serialize_props |
+ GIMP_CONTEXT_TOOL_MASK);
+
+ if (! (serialize_props & GIMP_CONTEXT_FOREGROUND_MASK))
+ g_object_set (preset, "use-fg-bg", FALSE, NULL);
+
+ if (! (serialize_props & GIMP_CONTEXT_BRUSH_MASK))
+ g_object_set (preset, "use-brush", FALSE, NULL);
+
+ if (! (serialize_props & GIMP_CONTEXT_DYNAMICS_MASK))
+ g_object_set (preset, "use-dynamics", FALSE, NULL);
+
+ if (! (serialize_props & GIMP_CONTEXT_GRADIENT_MASK))
+ g_object_set (preset, "use-gradient", FALSE, NULL);
+
+ if (! (serialize_props & GIMP_CONTEXT_PATTERN_MASK))
+ g_object_set (preset, "use-pattern", FALSE, NULL);
+
+ if (! (serialize_props & GIMP_CONTEXT_PALETTE_MASK))
+ g_object_set (preset, "use-palette", FALSE, NULL);
+
+ if (! (serialize_props & GIMP_CONTEXT_FONT_MASK))
+ g_object_set (preset, "use-font", FALSE, NULL);
+
g_signal_connect (preset->tool_options, "notify",
G_CALLBACK (gimp_tool_preset_options_notify),
preset);
@@ -461,27 +519,37 @@ gimp_tool_preset_new (GimpContext *context,
GimpContextPropMask
gimp_tool_preset_get_prop_mask (GimpToolPreset *preset)
{
- GimpContextPropMask use_props = 0;
+ GimpContextPropMask serialize_props;
+ GimpContextPropMask use_props = 0;
g_return_val_if_fail (GIMP_IS_TOOL_PRESET (preset), 0);
+ serialize_props =
+ gimp_context_get_serialize_properties (GIMP_CONTEXT (preset->tool_options));
+
if (preset->use_fg_bg)
{
- use_props |= GIMP_CONTEXT_FOREGROUND_MASK;
- use_props |= GIMP_CONTEXT_BACKGROUND_MASK;
+ use_props |= (GIMP_CONTEXT_FOREGROUND_MASK & serialize_props);
+ use_props |= (GIMP_CONTEXT_BACKGROUND_MASK & serialize_props);
}
+
if (preset->use_brush)
- use_props |= GIMP_CONTEXT_BRUSH_MASK;
+ use_props |= (GIMP_CONTEXT_BRUSH_MASK & serialize_props);
+
if (preset->use_dynamics)
- use_props |= GIMP_CONTEXT_DYNAMICS_MASK;
+ use_props |= (GIMP_CONTEXT_DYNAMICS_MASK & serialize_props);
+
if (preset->use_pattern)
- use_props |= GIMP_CONTEXT_PATTERN_MASK;
+ use_props |= (GIMP_CONTEXT_PATTERN_MASK & serialize_props);
+
if (preset->use_palette)
- use_props |= GIMP_CONTEXT_PALETTE_MASK;
+ use_props |= (GIMP_CONTEXT_PALETTE_MASK & serialize_props);
+
if (preset->use_gradient)
- use_props |= GIMP_CONTEXT_GRADIENT_MASK;
+ use_props |= (GIMP_CONTEXT_GRADIENT_MASK & serialize_props);
+
if (preset->use_font)
- use_props |= GIMP_CONTEXT_FONT_MASK;
+ use_props |= (GIMP_CONTEXT_FONT_MASK & serialize_props);
return use_props;
}
diff --git a/app/widgets/gimptoolpreseteditor.c b/app/widgets/gimptoolpreseteditor.c
index 867244c..40ba34e 100644
--- a/app/widgets/gimptoolpreseteditor.c
+++ b/app/widgets/gimptoolpreseteditor.c
@@ -43,6 +43,14 @@ struct _GimpToolPresetEditorPrivate
GtkWidget *tool_icon;
GtkWidget *tool_label;
+
+ GtkWidget *fg_bg_toggle;
+ GtkWidget *brush_toggle;
+ GtkWidget *dynamics_toggle;
+ GtkWidget *gradient_toggle;
+ GtkWidget *pattern_toggle;
+ GtkWidget *palette_toggle;
+ GtkWidget *font_toggle;
};
@@ -146,38 +154,45 @@ gimp_tool_preset_editor_constructed (GObject *object)
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
- button = gimp_prop_check_button_new (G_OBJECT (preset), "use-fg-bg",
- _("Apply stored FG/BG"));
+ button = editor->priv->fg_bg_toggle =
+ gimp_prop_check_button_new (G_OBJECT (preset), "use-fg-bg",
+ _("Apply stored FG/BG"));
gtk_box_pack_start (GTK_BOX (data_editor), button, FALSE, FALSE, 0);
gtk_widget_show (button);
- button = gimp_prop_check_button_new (G_OBJECT (preset), "use-brush",
- _("Apply stored brush"));
+ button = editor->priv->brush_toggle =
+ gimp_prop_check_button_new (G_OBJECT (preset), "use-brush",
+ _("Apply stored brush"));
gtk_box_pack_start (GTK_BOX (data_editor), button, FALSE, FALSE, 0);
gtk_widget_show (button);
- button = gimp_prop_check_button_new (G_OBJECT (preset), "use-dynamics",
- _("Apply stored dynamics"));
+ button = editor->priv->dynamics_toggle =
+ gimp_prop_check_button_new (G_OBJECT (preset), "use-dynamics",
+ _("Apply stored dynamics"));
gtk_box_pack_start (GTK_BOX (data_editor), button, FALSE, FALSE, 0);
gtk_widget_show (button);
- button = gimp_prop_check_button_new (G_OBJECT (preset), "use-gradient",
- _("Apply stored gradient"));
+ button = editor->priv->gradient_toggle =
+ gimp_prop_check_button_new (G_OBJECT (preset), "use-gradient",
+ _("Apply stored gradient"));
gtk_box_pack_start (GTK_BOX (data_editor), button, FALSE, FALSE, 0);
gtk_widget_show (button);
- button = gimp_prop_check_button_new (G_OBJECT (preset), "use-pattern",
- _("Apply stored pattern"));
+ button = editor->priv->pattern_toggle =
+ gimp_prop_check_button_new (G_OBJECT (preset), "use-pattern",
+ _("Apply stored pattern"));
gtk_box_pack_start (GTK_BOX (data_editor), button, FALSE, FALSE, 0);
gtk_widget_show (button);
- button = gimp_prop_check_button_new (G_OBJECT (preset), "use-palette",
- _("Apply stored palette"));
+ button = editor->priv->palette_toggle =
+ gimp_prop_check_button_new (G_OBJECT (preset), "use-palette",
+ _("Apply stored palette"));
gtk_box_pack_start (GTK_BOX (data_editor), button, FALSE, FALSE, 0);
gtk_widget_show (button);
- button = gimp_prop_check_button_new (G_OBJECT (preset), "use-font",
- _("Apply stored font"));
+ button = editor->priv->font_toggle =
+ gimp_prop_check_button_new (G_OBJECT (preset), "use-font",
+ _("Apply stored font"));
gtk_box_pack_start (GTK_BOX (data_editor), button, FALSE, FALSE, 0);
gtk_widget_show (button);
@@ -249,33 +264,56 @@ gimp_tool_preset_editor_new (GimpContext *context,
static void
gimp_tool_preset_editor_sync_data (GimpToolPresetEditor *editor)
{
- GimpDataEditor *data_editor = GIMP_DATA_EDITOR (editor);
- GimpToolInfo *tool_info;
- const gchar *stock_id;
- gchar *label;
-
- g_signal_handlers_block_by_func (editor->priv->tool_preset_model,
+ GimpToolPresetEditorPrivate *priv = editor->priv;
+ GimpDataEditor *data_editor = GIMP_DATA_EDITOR (editor);
+ GimpToolPreset *preset;
+ GimpToolInfo *tool_info;
+ GimpContextPropMask serialize_props;
+ const gchar *stock_id;
+ gchar *label;
+
+ g_signal_handlers_block_by_func (priv->tool_preset_model,
gimp_tool_preset_editor_notify_model,
editor);
gimp_config_copy (GIMP_CONFIG (data_editor->data),
- GIMP_CONFIG (editor->priv->tool_preset_model),
+ GIMP_CONFIG (priv->tool_preset_model),
GIMP_CONFIG_PARAM_SERIALIZE);
- g_signal_handlers_unblock_by_func (editor->priv->tool_preset_model,
+ g_signal_handlers_unblock_by_func (priv->tool_preset_model,
gimp_tool_preset_editor_notify_model,
editor);
- tool_info = editor->priv->tool_preset_model->tool_options->tool_info;
+ tool_info = priv->tool_preset_model->tool_options->tool_info;
stock_id = gimp_viewable_get_stock_id (GIMP_VIEWABLE (tool_info));
label = g_strdup_printf (_("%s Preset"), tool_info->blurb);
- gtk_image_set_from_stock (GTK_IMAGE (editor->priv->tool_icon),
+ gtk_image_set_from_stock (GTK_IMAGE (priv->tool_icon),
stock_id, GTK_ICON_SIZE_MENU);
- gtk_label_set_text (GTK_LABEL (editor->priv->tool_label), label);
+ gtk_label_set_text (GTK_LABEL (priv->tool_label), label);
g_free (label);
+
+ preset = GIMP_TOOL_PRESET (data_editor->data);
+
+ serialize_props =
+ gimp_context_get_serialize_properties (GIMP_CONTEXT (preset->tool_options));
+
+ gtk_widget_set_sensitive (priv->fg_bg_toggle,
+ (serialize_props & GIMP_CONTEXT_FOREGROUND_MASK) != 0);
+ gtk_widget_set_sensitive (priv->brush_toggle,
+ (serialize_props & GIMP_CONTEXT_BRUSH_MASK) != 0);
+ gtk_widget_set_sensitive (priv->dynamics_toggle,
+ (serialize_props & GIMP_CONTEXT_DYNAMICS_MASK) != 0);
+ gtk_widget_set_sensitive (priv->gradient_toggle,
+ (serialize_props & GIMP_CONTEXT_GRADIENT_MASK) != 0);
+ gtk_widget_set_sensitive (priv->pattern_toggle,
+ (serialize_props & GIMP_CONTEXT_PATTERN_MASK) != 0);
+ gtk_widget_set_sensitive (priv->palette_toggle,
+ (serialize_props & GIMP_CONTEXT_PALETTE_MASK) != 0);
+ gtk_widget_set_sensitive (priv->font_toggle,
+ (serialize_props & GIMP_CONTEXT_FONT_MASK) != 0);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]