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); } }
const gchar * gimp_plug_in_procedure_get_label (GimpPlugInProcedure *proc) { const gchar *path; gchar *stripped; gchar *ellipsis; gchar *label; g_return_val_if_fail (GIMP_IS_PLUG_IN_PROCEDURE (proc), NULL); if (proc->label) return proc->label; if (proc->menu_label) path = dgettext (gimp_plug_in_procedure_get_locale_domain (proc), proc->menu_label); else if (proc->menu_paths) path = dgettext (gimp_plug_in_procedure_get_locale_domain (proc), proc->menu_paths->data); else return NULL; stripped = gimp_strip_uline (path); if (proc->menu_label) label = g_strdup (stripped); else label = g_path_get_basename (stripped); g_free (stripped); ellipsis = strstr (label, "..."); if (! ellipsis) ellipsis = strstr (label, "\342\200\246" /* U+2026 HORIZONTAL ELLIPSIS */); if (ellipsis && ellipsis == (label + strlen (label) - 3)) *ellipsis = '\0'; proc->label = label; return proc->label; }
const gchar * gimp_plug_in_procedure_get_blurb (const GimpPlugInProcedure *proc) { GimpProcedure *procedure; g_return_val_if_fail (GIMP_IS_PLUG_IN_PROCEDURE (proc), NULL); procedure = GIMP_PROCEDURE (proc); /* do not to pass the empty string to gettext() */ if (procedure->blurb && strlen (procedure->blurb)) return dgettext (gimp_plug_in_procedure_get_locale_domain (proc), procedure->blurb); return NULL; }
static void plug_in_actions_menu_path_added (GimpPlugInProcedure *plug_in_proc, const gchar *menu_path, GimpActionGroup *group) { const gchar *locale_domain; const gchar *path_translated; #if 0 g_print ("%s: %s (%s)\n", G_STRFUNC, gimp_object_get_name (GIMP_OBJECT (plug_in_proc)), menu_path); #endif locale_domain = gimp_plug_in_procedure_get_locale_domain (plug_in_proc); path_translated = dgettext (locale_domain, menu_path); if (plug_in_actions_check_translation (menu_path, path_translated)) plug_in_actions_build_path (group, menu_path, path_translated); else plug_in_actions_build_path (group, menu_path, menu_path); }
static void plug_in_actions_add_proc (GimpActionGroup *group, GimpPlugInProcedure *proc) { GimpPlugInActionEntry entry; const gchar *locale_domain; const gchar *label; gchar *path_original = NULL; gchar *path_translated = NULL; locale_domain = gimp_plug_in_procedure_get_locale_domain (proc); if (proc->menu_label) { label = dgettext (locale_domain, proc->menu_label); } else { gchar *p1, *p2; path_original = proc->menu_paths->data; path_translated = dgettext (locale_domain, path_original); path_original = g_strdup (path_original); if (plug_in_actions_check_translation (path_original, path_translated)) path_translated = g_strdup (path_translated); else path_translated = g_strdup (path_original); p1 = strrchr (path_original, '/'); p2 = strrchr (path_translated, '/'); *p1 = '\0'; *p2 = '\0'; label = p2 + 1; } entry.name = GIMP_OBJECT (proc)->name; entry.stock_id = gimp_plug_in_procedure_get_stock_id (proc); entry.label = label; entry.accelerator = NULL; entry.tooltip = gimp_plug_in_procedure_get_blurb (proc); entry.procedure = proc; entry.help_id = gimp_plug_in_procedure_get_help_id (proc); #if 0 g_print ("adding plug-in action '%s' (%s)\n", GIMP_OBJECT (proc)->name, label); #endif gimp_action_group_add_plug_in_actions (group, &entry, 1, G_CALLBACK (plug_in_run_cmd_callback)); g_free ((gchar *) entry.help_id); if (proc->menu_label) { GList *list; 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); } } else { plug_in_actions_build_path (group, path_original, path_translated); g_free (path_original); g_free (path_translated); } }