app: fix plug-in procedure sensitivity with no image types set.
In particular, when setting a sensitivity mask but no image types, the procedure was always sensitive. Also make gimp_plug_in_procedure_get_sensitive() more robust.
This commit is contained in:
@ -117,9 +117,7 @@ plug_in_actions_update (GimpActionGroup *group,
|
|||||||
{
|
{
|
||||||
GimpPlugInProcedure *proc = list->data;
|
GimpPlugInProcedure *proc = list->data;
|
||||||
|
|
||||||
if (proc->menu_label &&
|
if (proc->menu_label && ! proc->file_proc)
|
||||||
! proc->file_proc &&
|
|
||||||
proc->image_types_val)
|
|
||||||
{
|
{
|
||||||
GimpProcedure *procedure = GIMP_PROCEDURE (proc);
|
GimpProcedure *procedure = GIMP_PROCEDURE (proc);
|
||||||
gboolean sensitive;
|
gboolean sensitive;
|
||||||
|
@ -142,6 +142,7 @@ gimp_plug_in_procedure_init (GimpPlugInProcedure *proc)
|
|||||||
GIMP_PROCEDURE (proc)->proc_type = GIMP_PDB_PROC_TYPE_PLUGIN;
|
GIMP_PROCEDURE (proc)->proc_type = GIMP_PDB_PROC_TYPE_PLUGIN;
|
||||||
|
|
||||||
proc->icon_data_length = -1;
|
proc->icon_data_length = -1;
|
||||||
|
proc->sensitivity_mask = GIMP_PROCEDURE_SENSITIVE_DRAWABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -318,37 +319,45 @@ gimp_plug_in_procedure_get_sensitive (GimpProcedure *procedure,
|
|||||||
image_type = gimp_babl_format_get_image_type (format);
|
image_type = gimp_babl_format_get_image_type (format);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (image_type)
|
if (proc->image_types_val)
|
||||||
{
|
{
|
||||||
case GIMP_RGB_IMAGE:
|
switch (image_type)
|
||||||
sensitive = proc->image_types_val & GIMP_PLUG_IN_RGB_IMAGE;
|
{
|
||||||
break;
|
case GIMP_RGB_IMAGE:
|
||||||
case GIMP_RGBA_IMAGE:
|
sensitive = proc->image_types_val & GIMP_PLUG_IN_RGB_IMAGE;
|
||||||
sensitive = proc->image_types_val & GIMP_PLUG_IN_RGBA_IMAGE;
|
break;
|
||||||
break;
|
case GIMP_RGBA_IMAGE:
|
||||||
case GIMP_GRAY_IMAGE:
|
sensitive = proc->image_types_val & GIMP_PLUG_IN_RGBA_IMAGE;
|
||||||
sensitive = proc->image_types_val & GIMP_PLUG_IN_GRAY_IMAGE;
|
break;
|
||||||
break;
|
case GIMP_GRAY_IMAGE:
|
||||||
case GIMP_GRAYA_IMAGE:
|
sensitive = proc->image_types_val & GIMP_PLUG_IN_GRAY_IMAGE;
|
||||||
sensitive = proc->image_types_val & GIMP_PLUG_IN_GRAYA_IMAGE;
|
break;
|
||||||
break;
|
case GIMP_GRAYA_IMAGE:
|
||||||
case GIMP_INDEXED_IMAGE:
|
sensitive = proc->image_types_val & GIMP_PLUG_IN_GRAYA_IMAGE;
|
||||||
sensitive = proc->image_types_val & GIMP_PLUG_IN_INDEXED_IMAGE;
|
break;
|
||||||
break;
|
case GIMP_INDEXED_IMAGE:
|
||||||
case GIMP_INDEXEDA_IMAGE:
|
sensitive = proc->image_types_val & GIMP_PLUG_IN_INDEXED_IMAGE;
|
||||||
sensitive = proc->image_types_val & GIMP_PLUG_IN_INDEXEDA_IMAGE;
|
break;
|
||||||
break;
|
case GIMP_INDEXEDA_IMAGE:
|
||||||
default:
|
sensitive = proc->image_types_val & GIMP_PLUG_IN_INDEXEDA_IMAGE;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
sensitive = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sensitive = (image_type != -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! image &&
|
if (! image &&
|
||||||
(proc->sensitivity_mask & GIMP_PROCEDURE_SENSITIVE_NO_IMAGE) != 0)
|
(proc->sensitivity_mask & GIMP_PROCEDURE_SENSITIVE_NO_IMAGE) != 0)
|
||||||
sensitive = TRUE;
|
sensitive = TRUE;
|
||||||
else if (g_list_length (drawables) == 1 && proc->sensitivity_mask != 0 &&
|
else if (g_list_length (drawables) == 1 &&
|
||||||
(proc->sensitivity_mask & GIMP_PROCEDURE_SENSITIVE_DRAWABLE) == 0)
|
(proc->sensitivity_mask & GIMP_PROCEDURE_SENSITIVE_DRAWABLE) == 0)
|
||||||
sensitive = FALSE;
|
sensitive = FALSE;
|
||||||
else if (g_list_length (drawables) == 0 &&
|
else if (image && g_list_length (drawables) == 0 &&
|
||||||
(proc->sensitivity_mask & GIMP_PROCEDURE_SENSITIVE_NO_DRAWABLES) == 0)
|
(proc->sensitivity_mask & GIMP_PROCEDURE_SENSITIVE_NO_DRAWABLES) == 0)
|
||||||
sensitive = FALSE;
|
sensitive = FALSE;
|
||||||
else if (g_list_length (drawables) > 1 &&
|
else if (g_list_length (drawables) > 1 &&
|
||||||
@ -1091,7 +1100,10 @@ gimp_plug_in_procedure_set_sensitivity_mask (GimpPlugInProcedure *proc,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (GIMP_IS_PLUG_IN_PROCEDURE (proc));
|
g_return_if_fail (GIMP_IS_PLUG_IN_PROCEDURE (proc));
|
||||||
|
|
||||||
proc->sensitivity_mask = sensitivity_mask;
|
if (sensitivity_mask == 0)
|
||||||
|
proc->sensitivity_mask = GIMP_PROCEDURE_SENSITIVE_DRAWABLE;
|
||||||
|
else
|
||||||
|
proc->sensitivity_mask = sensitivity_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GSList *
|
static GSList *
|
||||||
|
Reference in New Issue
Block a user