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



commit 7b7e2ebecfe1db8600dc32e268bd5660090de90b
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.
    
    (cherry picked from commit 0afcaefec5640b8102e0d433b1451f75fb960154)

 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 963c820098..fe87a8ba90 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);
 
@@ -1017,6 +1020,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);
     }
 
@@ -1158,6 +1164,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)
@@ -1439,6 +1457,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);
     }
 
@@ -1534,10 +1555,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 6bb7cfd09c..cf8e51dc2d 100644
--- a/app/widgets/gimpsettingsbox.c
+++ b/app/widgets/gimpsettingsbox.c
@@ -563,12 +563,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 void
@@ -981,3 +977,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]