Issue #3503 - Display Preset names on Filter Dialogs

Don't clear the preset combo right after a preset was selected.
Instead, clear it as soon as any change is made to the settings in the
dialog. This way the last chosen preset's name stays in the combo as
long as the current settings are identical to the preset.
This commit is contained in:
Michael Natterer 2019-06-26 14:53:43 +02:00
parent e2bacf918c
commit 0afcaefec5
3 changed files with 49 additions and 6 deletions

View file

@ -163,6 +163,9 @@ static void gimp_filter_tool_flush (GimpDrawableFilter *filter,
static void gimp_filter_tool_config_notify (GObject *object,
const GParamSpec *pspec,
GimpFilterTool *filter_tool);
static void gimp_filter_tool_unset_setting (GObject *object,
const GParamSpec *pspec,
GimpFilterTool *filter_tool);
static void gimp_filter_tool_mask_changed (GimpImage *image,
GimpFilterTool *filter_tool);
@ -1001,6 +1004,9 @@ gimp_filter_tool_halt (GimpFilterTool *filter_tool)
g_signal_handlers_disconnect_by_func (filter_tool->config,
gimp_filter_tool_config_notify,
filter_tool);
g_signal_handlers_disconnect_by_func (filter_tool->config,
gimp_filter_tool_unset_setting,
filter_tool);
g_clear_object (&filter_tool->config);
}
@ -1140,6 +1146,18 @@ gimp_filter_tool_config_notify (GObject *object,
pspec);
}
static void
gimp_filter_tool_unset_setting (GObject *object,
const GParamSpec *pspec,
GimpFilterTool *filter_tool)
{
g_signal_handlers_disconnect_by_func (filter_tool->config,
gimp_filter_tool_unset_setting,
filter_tool);
gimp_settings_box_unset (GIMP_SETTINGS_BOX (filter_tool->settings_box));
}
static void
gimp_filter_tool_mask_changed (GimpImage *image,
GimpFilterTool *filter_tool)
@ -1421,6 +1439,9 @@ gimp_filter_tool_get_operation (GimpFilterTool *filter_tool)
g_signal_handlers_disconnect_by_func (filter_tool->config,
gimp_filter_tool_config_notify,
filter_tool);
g_signal_handlers_disconnect_by_func (filter_tool->config,
gimp_filter_tool_unset_setting,
filter_tool);
g_clear_object (&filter_tool->config);
}
@ -1516,10 +1537,22 @@ gimp_filter_tool_set_config (GimpFilterTool *filter_tool,
g_return_if_fail (GIMP_IS_FILTER_TOOL (filter_tool));
g_return_if_fail (GIMP_IS_SETTINGS (config));
/* if the user didn't change a setting since the last set_config(),
* this handler is still connected
*/
g_signal_handlers_disconnect_by_func (filter_tool->config,
gimp_filter_tool_unset_setting,
filter_tool);
GIMP_FILTER_TOOL_GET_CLASS (filter_tool)->set_config (filter_tool, config);
if (filter_tool->widget)
gimp_filter_tool_reset_widget (filter_tool, filter_tool->widget);
if (filter_tool->settings_box)
g_signal_connect_object (filter_tool->config, "notify",
G_CALLBACK (gimp_filter_tool_unset_setting),
G_OBJECT (filter_tool), 0);
}
void

View file

@ -553,12 +553,8 @@ gimp_settings_box_setting_selected (GimpContainerView *view,
GimpSettingsBox *box)
{
if (object)
{
g_signal_emit (box, settings_box_signals[SELECTED], 0,
object);
gimp_container_view_select_item (view, NULL);
}
}
static gboolean
@ -961,3 +957,15 @@ gimp_settings_box_add_current (GimpSettingsBox *box,
gimp_operation_config_serialize (private->gimp, private->container, NULL);
}
void
gimp_settings_box_unset (GimpSettingsBox *box)
{
GimpSettingsBoxPrivate *private;
g_return_if_fail (GIMP_IS_SETTINGS_BOX (box));
private = GET_PRIVATE (box);
gimp_container_view_select_item (GIMP_CONTAINER_VIEW (private->combo), NULL);
}

View file

@ -70,5 +70,7 @@ GtkWidget * gimp_settings_box_get_combo (GimpSettingsBox *box);
void gimp_settings_box_add_current (GimpSettingsBox *box,
gint max_recent);
void gimp_settings_box_unset (GimpSettingsBox *box);
#endif /* __GIMP_SETTINGS_BOX_H__ */