Issue #12825: generate a help ID for any operation with "gimp:menu-path" key.

This is an alternative implementation for issue #12825, replacing commit
424ef17bac, after further discussion with Jacob.

Basically we don't need a new key "gimp:help-id" anymore. Instead, for
every action we add through a "gimp:menu-path" key AND when its name is
prefixed with "gegl:", we generate a help ID from the operation name.

The first few operations in such case already have a help page for them,
with corresponding help ID, in gimp-help repository.

In the future, we may expand this help ID generation rule to any
core operation (i.e. any operation prefixed with "gegl:") but for the
time being, we only do for the ones with a menu path, otherwise we'd
have too many missing pages.

Also fix again gimp_gegl_procedure_get_help_id() so that it searches a
help ID within all existing operations in the "filters" group, as I
realized that this was still broken in some cases.
This commit is contained in:
Jehan 2025-02-21 22:48:02 +01:00
parent 29ba885985
commit 6076c4d4a6
2 changed files with 37 additions and 7 deletions

View file

@ -804,7 +804,6 @@ filters_actions_setup (GimpActionGroup *group)
g_free (action_name);
action_name = g_strdup_printf ("filters-%s-%d", formatted_op_name, i++);
}
g_free (formatted_op_name);
title = gegl_operation_class_get_key (op_class, "title");
op_name = op_class->name;
@ -824,8 +823,12 @@ filters_actions_setup (GimpActionGroup *group)
entry.value = op_class->name;
entry.help_id = GIMP_HELP_TOOL_GEGL;
if (gegl_operation_class_get_key (op_class, "gimp:help-id"))
entry.help_id = gegl_operation_class_get_key (op_class, "gimp:help-id");
if (gegl_operation_class_get_key (op_class, "gimp:menu-path") &&
g_str_has_prefix (op_class->name, "gegl:"))
/* We automatically create an help ID from the operation name
* for all core GEGL operations with a menu path key.
*/
entry.help_id = formatted_op_name;
gimp_action_group_add_string_actions (group, "filters-action",
&entry, 1,
@ -859,6 +862,7 @@ filters_actions_setup (GimpActionGroup *group)
g_free (label);
g_free (action_name);
g_free (formatted_op_name);
}
g_object_set_data_full (G_OBJECT (group),

View file

@ -48,7 +48,11 @@
#include "core/gimpsettings.h"
#include "core/gimptoolinfo.h"
#include "widgets/gimpaction.h"
#include "widgets/gimpactiongroup.h"
#include "widgets/gimphelp-ids.h"
#include "widgets/gimpstringaction.h"
#include "widgets/gimpuimanager.h"
#include "tools/gimpoperationtool.h"
#include "tools/tool_manager.h"
@ -161,13 +165,35 @@ static const gchar *
gimp_gegl_procedure_get_help_id (GimpProcedure *procedure)
{
GimpGeglProcedure *proc = GIMP_GEGL_PROCEDURE (procedure);
GList *managers;
GimpActionGroup *group;
const gchar *help_id = NULL;
managers = gimp_ui_managers_from_name ("<Image>");
group = gimp_ui_manager_get_action_group (managers->data, "filters");
if (procedure->help_id)
return procedure->help_id;
else if (gegl_operation_get_key (proc->operation, "gimp:help-id"))
return gegl_operation_get_key (proc->operation, "gimp:help-id");
{
return procedure->help_id;
}
else if (group)
{
GList *actions;
GList *iter;
return GIMP_HELP_TOOL_GEGL;
actions = gimp_action_group_list_actions (group);
for (iter = actions; iter; iter = iter->next)
if (GIMP_IS_STRING_ACTION (iter->data) &&
g_strcmp0 (GIMP_STRING_ACTION (iter->data)->value, proc->operation) == 0)
{
help_id = gimp_action_get_help_id (iter->data);
break;
}
g_list_free (actions);
}
return help_id == NULL ? GIMP_HELP_TOOL_GEGL : help_id;
}
static const gchar *