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.
This commit is contained in:
Michael Natterer 2018-02-01 14:35:46 +01:00
parent 11df85d783
commit 4a26d4a3e6
2 changed files with 19 additions and 13 deletions

View File

@ -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);

View File

@ -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