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:
Jehan
2025-02-14 19:49:00 +01:00
parent c4c3a2f25d
commit 059e9344a1
2 changed files with 37 additions and 27 deletions

View File

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

View File

@ -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,6 +319,8 @@ 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);
} }
if (proc->image_types_val)
{
switch (image_type) switch (image_type)
{ {
case GIMP_RGB_IMAGE: case GIMP_RGB_IMAGE:
@ -339,16 +342,22 @@ gimp_plug_in_procedure_get_sensitive (GimpProcedure *procedure,
sensitive = proc->image_types_val & GIMP_PLUG_IN_INDEXEDA_IMAGE; sensitive = proc->image_types_val & GIMP_PLUG_IN_INDEXEDA_IMAGE;
break; break;
default: default:
sensitive = FALSE;
break; 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,6 +1100,9 @@ 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));
if (sensitivity_mask == 0)
proc->sensitivity_mask = GIMP_PROCEDURE_SENSITIVE_DRAWABLE;
else
proc->sensitivity_mask = sensitivity_mask; proc->sensitivity_mask = sensitivity_mask;
} }