[gimp] Bug 777880 - better handling of sensitivity functions for channel combobox on threshold, levels and



commit 0d4dd11e2a8840ce1dbc7a28edb78984483cbf26
Author: Thomas Manni <thomas manni free fr>
Date:   Sun Jan 29 14:07:06 2017 +0100

    Bug 777880 - better handling of sensitivity functions for channel combobox on threshold, levels and 
curves tools
    
    - set the filter_tool->drawable before showing the tool gui.
    - set the sensitivity functions for channel combobox of threshold,
      levels and curves tools dialogs only once during dialog creations.
    - use the filter_tool->drawable inside the sensitivity functions

 app/tools/gimpcurvestool.c    |   10 ++++++----
 app/tools/gimpfiltertool.c    |    2 +-
 app/tools/gimplevelstool.c    |   10 ++++++----
 app/tools/gimpthresholdtool.c |   14 +++++++++-----
 4 files changed, 22 insertions(+), 14 deletions(-)
---
diff --git a/app/tools/gimpcurvestool.c b/app/tools/gimpcurvestool.c
index 8045936..53d7506 100644
--- a/app/tools/gimpcurvestool.c
+++ b/app/tools/gimpcurvestool.c
@@ -222,9 +222,6 @@ gimp_curves_tool_initialize (GimpTool     *tool,
       return FALSE;
     }
 
-  gimp_int_combo_box_set_sensitivity (GIMP_INT_COMBO_BOX (c_tool->channel_menu),
-                                      curves_menu_sensitivity, drawable, NULL);
-
   histogram = gimp_histogram_new (FALSE);
   gimp_drawable_calculate_histogram (drawable, histogram);
   gimp_histogram_view_set_background (GIMP_HISTOGRAM_VIEW (c_tool->graph),
@@ -471,6 +468,8 @@ gimp_curves_tool_dialog (GimpFilterTool *filter_tool)
                                  config->channel);
   gimp_enum_combo_box_set_icon_prefix (GIMP_ENUM_COMBO_BOX (tool->channel_menu),
                                        "gimp-channel");
+  gimp_int_combo_box_set_sensitivity (GIMP_INT_COMBO_BOX (tool->channel_menu),
+                                      curves_menu_sensitivity, filter_tool, NULL);
   gtk_box_pack_start (GTK_BOX (hbox), tool->channel_menu, FALSE, FALSE, 0);
   gtk_widget_show (tool->channel_menu);
 
@@ -822,9 +821,12 @@ static gboolean
 curves_menu_sensitivity (gint      value,
                          gpointer  data)
 {
-  GimpDrawable         *drawable = GIMP_DRAWABLE (data);
+  GimpDrawable         *drawable = GIMP_FILTER_TOOL (data)->drawable;
   GimpHistogramChannel  channel  = value;
 
+  if (!drawable)
+    return FALSE;
+
   switch (channel)
     {
     case GIMP_HISTOGRAM_VALUE:
diff --git a/app/tools/gimpfiltertool.c b/app/tools/gimpfiltertool.c
index 5e85031..3bbf409 100644
--- a/app/tools/gimpfiltertool.c
+++ b/app/tools/gimpfiltertool.c
@@ -484,9 +484,9 @@ gimp_filter_tool_initialize (GimpTool     *tool,
   gimp_tool_gui_set_shell (filter_tool->gui, shell);
   gimp_tool_gui_set_viewable (filter_tool->gui, GIMP_VIEWABLE (drawable));
 
+  filter_tool->drawable = drawable;
   gimp_tool_gui_show (filter_tool->gui);
 
-  filter_tool->drawable = drawable;
   gimp_filter_tool_create_map (filter_tool);
 
   return TRUE;
diff --git a/app/tools/gimplevelstool.c b/app/tools/gimplevelstool.c
index 2b38baf..6dca751 100644
--- a/app/tools/gimplevelstool.c
+++ b/app/tools/gimplevelstool.c
@@ -214,9 +214,6 @@ gimp_levels_tool_initialize (GimpTool     *tool,
       return FALSE;
     }
 
-  gimp_int_combo_box_set_sensitivity (GIMP_INT_COMBO_BOX (l_tool->channel_menu),
-                                      levels_menu_sensitivity, drawable, NULL);
-
   gimp_drawable_calculate_histogram (drawable, l_tool->histogram);
   gimp_histogram_view_set_histogram (GIMP_HISTOGRAM_VIEW (l_tool->histogram_view),
                                      l_tool->histogram);
@@ -376,6 +373,8 @@ gimp_levels_tool_dialog (GimpFilterTool *filter_tool)
 
   gimp_enum_combo_box_set_icon_prefix (GIMP_ENUM_COMBO_BOX (tool->channel_menu),
                                        "gimp-channel");
+  gimp_int_combo_box_set_sensitivity (GIMP_INT_COMBO_BOX (tool->channel_menu),
+                                      levels_menu_sensitivity, filter_tool, NULL);
   gtk_box_pack_start (GTK_BOX (hbox), tool->channel_menu, FALSE, FALSE, 0);
   gtk_widget_show (tool->channel_menu);
 
@@ -918,9 +917,12 @@ static gboolean
 levels_menu_sensitivity (gint      value,
                          gpointer  data)
 {
-  GimpDrawable         *drawable = GIMP_DRAWABLE (data);
+  GimpDrawable         *drawable = GIMP_FILTER_TOOL (data)->drawable;
   GimpHistogramChannel  channel  = value;
 
+  if (!drawable)
+    return FALSE;
+
   switch (channel)
     {
     case GIMP_HISTOGRAM_VALUE:
diff --git a/app/tools/gimpthresholdtool.c b/app/tools/gimpthresholdtool.c
index c1e59dc..131ab7d 100644
--- a/app/tools/gimpthresholdtool.c
+++ b/app/tools/gimpthresholdtool.c
@@ -162,10 +162,6 @@ gimp_threshold_tool_initialize (GimpTool     *tool,
       return FALSE;
     }
 
-  gimp_int_combo_box_set_sensitivity (GIMP_INT_COMBO_BOX (t_tool->channel_menu),
-                                      gimp_threshold_tool_channel_sensitive,
-                                      drawable, NULL);
-
   gimp_drawable_calculate_histogram (drawable, t_tool->histogram);
   gimp_histogram_view_set_histogram (t_tool->histogram_box->view,
                                      t_tool->histogram);
@@ -230,6 +226,11 @@ gimp_threshold_tool_dialog (GimpFilterTool *filter_tool)
                                                        "channel", -1, -1);
   gimp_enum_combo_box_set_icon_prefix (GIMP_ENUM_COMBO_BOX (t_tool->channel_menu),
                                        "gimp-channel");
+
+  gimp_int_combo_box_set_sensitivity (GIMP_INT_COMBO_BOX (t_tool->channel_menu),
+                                      gimp_threshold_tool_channel_sensitive,
+                                      filter_tool, NULL);
+
   gtk_box_pack_start (GTK_BOX (hbox), t_tool->channel_menu, FALSE, FALSE, 0);
   gtk_widget_show (t_tool->channel_menu);
 
@@ -331,9 +332,12 @@ static gboolean
 gimp_threshold_tool_channel_sensitive (gint     value,
                                        gpointer data)
 {
-  GimpDrawable         *drawable = GIMP_DRAWABLE (data);
+  GimpDrawable         *drawable = GIMP_FILTER_TOOL (data)->drawable;
   GimpHistogramChannel  channel  = value;
 
+  if (!drawable)
+    return FALSE;
+
   switch (channel)
     {
     case GIMP_HISTOGRAM_VALUE:


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