static void plug_in_actions_add_proc (GimpActionGroup *group, GimpPlugInProcedure *proc) { GimpProcedureActionEntry entry; const gchar *locale_domain; GList *list; locale_domain = gimp_plug_in_procedure_get_locale_domain (proc); entry.name = gimp_object_get_name (proc); entry.icon_name = gimp_viewable_get_icon_name (GIMP_VIEWABLE (proc)); entry.label = gimp_procedure_get_menu_label (GIMP_PROCEDURE (proc)); entry.accelerator = NULL; entry.tooltip = gimp_procedure_get_blurb (GIMP_PROCEDURE (proc)); entry.procedure = GIMP_PROCEDURE (proc); entry.help_id = gimp_procedure_get_help_id (GIMP_PROCEDURE (proc)); gimp_action_group_add_procedure_actions (group, &entry, 1, G_CALLBACK (plug_in_run_cmd_callback)); for (list = proc->menu_paths; list; list = g_list_next (list)) { const gchar *original = list->data; const gchar *translated = dgettext (locale_domain, original); if (plug_in_actions_check_translation (original, translated)) plug_in_actions_build_path (group, original, translated); else plug_in_actions_build_path (group, original, original); } if (proc->image_types_val) { GimpContext *context = gimp_get_user_context (group->gimp); GimpImage *image = gimp_context_get_image (context); GimpDrawable *drawable = NULL; gboolean sensitive; const gchar *tooltip; if (image) drawable = gimp_image_get_active_drawable (image); sensitive = gimp_procedure_get_sensitive (GIMP_PROCEDURE (proc), GIMP_OBJECT (drawable), &tooltip); gimp_action_group_set_action_sensitive (group, gimp_object_get_name (proc), sensitive); if (! sensitive && drawable && tooltip) gimp_action_group_set_action_tooltip (group, gimp_object_get_name (proc), tooltip); } }
void filters_actions_setup (GimpActionGroup *group) { GimpProcedureActionEntry *entries; gint n_entries; gint i; gimp_action_group_add_actions (group, "filters-action", filters_menu_actions, G_N_ELEMENTS (filters_menu_actions)); gimp_action_group_add_string_actions (group, "filters-action", filters_actions, G_N_ELEMENTS (filters_actions), G_CALLBACK (filters_filter_cmd_callback)); gimp_action_group_add_enum_actions (group, "filters-action", filters_repeat_actions, G_N_ELEMENTS (filters_repeat_actions), G_CALLBACK (filters_repeat_cmd_callback)); for (i = 0; i < G_N_ELEMENTS (filters_actions); i++) { const GimpStringActionEntry *entry = &filters_actions[i]; const gchar *description; description = gegl_operation_get_key (entry->value, "description"); if (description) gimp_action_group_set_action_tooltip (group, entry->name, description); } n_entries = gimp_filter_history_size (group->gimp); entries = g_new0 (GimpProcedureActionEntry, n_entries); for (i = 0; i < n_entries; i++) { entries[i].name = g_strdup_printf ("filter-recent-%02d", i + 1); entries[i].icon_name = NULL; entries[i].label = ""; entries[i].accelerator = ""; entries[i].tooltip = NULL; entries[i].procedure = NULL; entries[i].help_id = GIMP_HELP_FILTER_RESHOW; } gimp_action_group_add_procedure_actions (group, entries, n_entries, G_CALLBACK (filters_history_cmd_callback)); for (i = 0; i < n_entries; i++) { gimp_action_group_set_action_visible (group, entries[i].name, FALSE); g_free ((gchar *) entries[i].name); } g_free (entries); g_signal_connect_object (group->gimp, "filter-history-changed", G_CALLBACK (filters_actions_history_changed), group, 0); filters_actions_history_changed (group->gimp, group); }