[gimp] Issue #3503 - Display Preset names on Filter Dialogs



commit 0afcaefec5640b8102e0d433b1451f75fb960154
Author: Michael Natterer <mitch gimp org>
Date:   Wed Jun 26 14:53:43 2019 +0200

    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.

 app/tools/gimpfiltertool.c    | 33 +++++++++++++++++++++++++++++++++
 app/widgets/gimpsettingsbox.c | 20 ++++++++++++++------
 app/widgets/gimpsettingsbox.h |  2 ++
 3 files changed, 49 insertions(+), 6 deletions(-)
---
diff --git a/app/tools/gimpfiltertool.c b/app/tools/gimpfiltertool.c
index 922cdad2c5..9112f169d4 100644
--- a/app/tools/gimpfiltertool.c
+++ b/app/tools/gimpfiltertool.c
@@ -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
diff --git a/app/widgets/gimpsettingsbox.c b/app/widgets/gimpsettingsbox.c
index 521e7f4fbe..2cc59192b2 100644
--- a/app/widgets/gimpsettingsbox.c
+++ b/app/widgets/gimpsettingsbox.c
@@ -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);
-    }
+    g_signal_emit (box, settings_box_signals[SELECTED], 0,
+                   object);
 }
 
 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);
+}
diff --git a/app/widgets/gimpsettingsbox.h b/app/widgets/gimpsettingsbox.h
index 5f4e546608..7879083bda 100644
--- a/app/widgets/gimpsettingsbox.h
+++ b/app/widgets/gimpsettingsbox.h
@@ -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__  */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]