[gimp] Bug 793090 - GIMP crashes when invoking filter without an image



commit 4a26d4a3e680504f68e43f24722a38475c77c17d
Author: Michael Natterer <mitch gimp org>
Date:   Thu Feb 1 14:35:46 2018 +0100

    Bug 793090 - GIMP crashes when invoking filter without an image
    
    filters-commands.c always needs an image and a drawable, so use
    return_if_no_drawable(), not return_if_no_display().
    
    Also fix the sensitivity of the shadows-highlights actions, which made
    this bug triggerable at all.

 app/actions/filters-actions.c  |    1 +
 app/actions/filters-commands.c |   31 ++++++++++++++++++-------------
 2 files changed, 19 insertions(+), 13 deletions(-)
---
diff --git a/app/actions/filters-actions.c b/app/actions/filters-actions.c
index d16ca64..47a79a2 100644
--- a/app/actions/filters-actions.c
+++ b/app/actions/filters-actions.c
@@ -914,6 +914,7 @@ filters_actions_update (GimpActionGroup *group,
   SET_SENSITIVE ("filters-saturation",              writable && !gray);
   SET_SENSITIVE ("filters-semi-flatten",            writable && alpha);
   SET_SENSITIVE ("filters-sepia",                   writable && !gray);
+  SET_SENSITIVE ("filters-shadows-highlights",      writable);
   SET_SENSITIVE ("filters-shift",                   writable);
   SET_SENSITIVE ("filters-sinus",                   writable);
   SET_SENSITIVE ("filters-slic",                    writable);
diff --git a/app/actions/filters-commands.c b/app/actions/filters-commands.c
index 9f3296b..76766dc 100644
--- a/app/actions/filters-commands.c
+++ b/app/actions/filters-commands.c
@@ -32,6 +32,7 @@
 
 #include "core/gimp.h"
 #include "core/gimp-filter-history.h"
+#include "core/gimpimage.h"
 #include "core/gimpprogress.h"
 #include "core/gimpsettings.h"
 
@@ -61,18 +62,19 @@ filters_apply_cmd_callback (GtkAction   *action,
                             const gchar *operation_str,
                             gpointer     data)
 {
-  GimpDisplay   *display;
+  GimpImage     *image;
+  GimpDrawable  *drawable;
   gchar         *operation;
   GimpObject    *settings;
   GimpProcedure *procedure;
-  return_if_no_display (display, data);
+  return_if_no_drawable (image, drawable, data);
 
-  operation = filters_parse_operation (action_data_get_gimp (data),
+  operation = filters_parse_operation (image->gimp,
                                        operation_str,
                                        gtk_action_get_icon_name (action),
                                        &settings);
 
-  procedure = gimp_gegl_procedure_new (action_data_get_gimp (data),
+  procedure = gimp_gegl_procedure_new (image->gimp,
                                        GIMP_RUN_NONINTERACTIVE, settings,
                                        operation,
                                        gtk_action_get_name (action),
@@ -87,7 +89,7 @@ filters_apply_cmd_callback (GtkAction   *action,
   if (settings)
     g_object_unref (settings);
 
-  gimp_filter_history_add (action_data_get_gimp (data), procedure);
+  gimp_filter_history_add (image->gimp, procedure);
   filters_history_cmd_callback (NULL, procedure, data);
 
   g_object_unref (procedure);
@@ -98,11 +100,12 @@ filters_apply_interactive_cmd_callback (GtkAction   *action,
                                         const gchar *operation,
                                         gpointer     data)
 {
-  GimpDisplay   *display;
+  GimpImage     *image;
+  GimpDrawable  *drawable;
   GimpProcedure *procedure;
-  return_if_no_display (display, data);
+  return_if_no_drawable (image, drawable, data);
 
-  procedure = gimp_gegl_procedure_new (action_data_get_gimp (data),
+  procedure = gimp_gegl_procedure_new (image->gimp,
                                        GIMP_RUN_INTERACTIVE, NULL,
                                        operation,
                                        gtk_action_get_name (action),
@@ -112,7 +115,7 @@ filters_apply_interactive_cmd_callback (GtkAction   *action,
                                        g_object_get_qdata (G_OBJECT (action),
                                                            GIMP_HELP_ID));
 
-  gimp_filter_history_add (action_data_get_gimp (data), procedure);
+  gimp_filter_history_add (image->gimp, procedure);
   filters_history_cmd_callback (NULL, procedure, data);
 
   g_object_unref (procedure);
@@ -123,16 +126,18 @@ filters_repeat_cmd_callback (GtkAction *action,
                              gint       value,
                              gpointer   data)
 {
-  Gimp          *gimp;
+  GimpImage     *image;
+  GimpDrawable  *drawable;
   GimpDisplay   *display;
   GimpProcedure *procedure;
-  return_if_no_gimp (gimp, data);
+  return_if_no_drawable (image, drawable, data);
   return_if_no_display (display, data);
 
-  procedure = gimp_filter_history_nth (gimp, 0);
+  procedure = gimp_filter_history_nth (image->gimp, 0);
 
   if (procedure)
-    filters_run_procedure (gimp, display, procedure, (GimpRunMode) value);
+    filters_run_procedure (image->gimp, display, procedure,
+                           (GimpRunMode) value);
 }
 
 void


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