void gimp_plug_in_add_temp_proc (GimpPlugIn *plug_in, GimpTemporaryProcedure *proc) { GimpPlugInProcedure *overridden; const gchar *locale_domain; const gchar *help_domain; g_return_if_fail (GIMP_IS_PLUG_IN (plug_in)); g_return_if_fail (GIMP_IS_TEMPORARY_PROCEDURE (proc)); overridden = gimp_plug_in_procedure_find (plug_in->temp_procedures, gimp_object_get_name (proc)); if (overridden) gimp_plug_in_remove_temp_proc (plug_in, GIMP_TEMPORARY_PROCEDURE (overridden)); locale_domain = gimp_plug_in_manager_get_locale_domain (plug_in->manager, plug_in->prog, NULL); help_domain = gimp_plug_in_manager_get_help_domain (plug_in->manager, plug_in->prog, NULL); gimp_plug_in_procedure_set_locale_domain (GIMP_PLUG_IN_PROCEDURE (proc), locale_domain); gimp_plug_in_procedure_set_help_domain (GIMP_PLUG_IN_PROCEDURE (proc), help_domain); plug_in->temp_procedures = g_slist_prepend (plug_in->temp_procedures, g_object_ref (proc)); gimp_plug_in_manager_add_temp_proc (plug_in->manager, proc); }
static void plug_in_actions_menu_branch_added (GimpPlugInManager *manager, const gchar *progname, const gchar *menu_path, const gchar *menu_label, GimpActionGroup *group) { const gchar *locale_domain; const gchar *path_translated; const gchar *label_translated; gchar *full; gchar *full_translated; locale_domain = gimp_plug_in_manager_get_locale_domain (group->gimp->plug_in_manager, progname, NULL); path_translated = dgettext (locale_domain, menu_path); label_translated = dgettext (locale_domain, menu_label); full = g_strconcat (menu_path, "/", menu_label, NULL); full_translated = g_strconcat (path_translated, "/", label_translated, NULL); if (plug_in_actions_check_translation (full, full_translated)) plug_in_actions_build_path (group, full, full_translated); else plug_in_actions_build_path (group, full, full); g_free (full_translated); g_free (full); }
void gimp_plug_in_manager_restore (GimpPlugInManager *manager, GimpContext *context, GimpInitStatusFunc status_callback) { Gimp *gimp; gchar *pluginrc; GSList *list; GError *error = NULL; g_return_if_fail (GIMP_IS_PLUG_IN_MANAGER (manager)); g_return_if_fail (GIMP_IS_CONTEXT (context)); g_return_if_fail (status_callback != NULL); gimp = manager->gimp; /* need a GimpPDBContext for calling gimp_plug_in_manager_run_foo() */ context = gimp_pdb_context_new (gimp, context, TRUE); /* search for binaries in the plug-in directory path */ gimp_plug_in_manager_search (manager, status_callback); /* read the pluginrc file for cached data */ pluginrc = gimp_plug_in_manager_get_pluginrc (manager); gimp_plug_in_manager_read_pluginrc (manager, pluginrc, status_callback); /* query any plug-ins that changed since we last wrote out pluginrc */ gimp_plug_in_manager_query_new (manager, context, status_callback); /* initialize the plug-ins */ gimp_plug_in_manager_init_plug_ins (manager, context, status_callback); /* add the procedures to manager->plug_in_procedures */ for (list = manager->plug_in_defs; list; list = list->next) { GimpPlugInDef *plug_in_def = list->data; GSList *list2; for (list2 = plug_in_def->procedures; list2; list2 = list2->next) { gimp_plug_in_manager_add_procedure (manager, list2->data); } } /* write the pluginrc file if necessary */ if (manager->write_pluginrc) { if (gimp->be_verbose) g_print ("Writing '%s'\n", gimp_filename_to_utf8 (pluginrc)); if (! plug_in_rc_write (manager->plug_in_defs, pluginrc, &error)) { gimp_message_literal (gimp, NULL, GIMP_MESSAGE_ERROR, error->message); g_clear_error (&error); } manager->write_pluginrc = FALSE; } g_free (pluginrc); /* create locale and help domain lists */ for (list = manager->plug_in_defs; list; list = list->next) { GimpPlugInDef *plug_in_def = list->data; if (plug_in_def->locale_domain_name) gimp_plug_in_manager_add_locale_domain (manager, plug_in_def->prog, plug_in_def->locale_domain_name, plug_in_def->locale_domain_path); else /* set the default plug-in locale domain */ gimp_plug_in_def_set_locale_domain (plug_in_def, gimp_plug_in_manager_get_locale_domain (manager, plug_in_def->prog, NULL), NULL); if (plug_in_def->help_domain_name) gimp_plug_in_manager_add_help_domain (manager, plug_in_def->prog, plug_in_def->help_domain_name, plug_in_def->help_domain_uri); } /* we're done with the plug-in-defs */ g_slist_free_full (manager->plug_in_defs, (GDestroyNotify) g_object_unref); manager->plug_in_defs = NULL; /* bind plug-in text domains */ gimp_plug_in_manager_bind_text_domains (manager); /* add the plug-in procs to the procedure database */ for (list = manager->plug_in_procedures; list; list = list->next) { gimp_plug_in_manager_add_to_db (manager, context, list->data); } /* sort the load, save and export procedures */ manager->load_procs = g_slist_sort_with_data (manager->load_procs, gimp_plug_in_manager_file_proc_compare, manager); manager->save_procs = g_slist_sort_with_data (manager->save_procs, gimp_plug_in_manager_file_proc_compare, manager); manager->export_procs = g_slist_sort_with_data (manager->export_procs, gimp_plug_in_manager_file_proc_compare, manager); gimp_plug_in_manager_run_extensions (manager, context, status_callback); g_object_unref (context); }
void plug_in_menus_setup (GimpUIManager *manager, const gchar *ui_path) { GimpPlugInManager *plug_in_manager; GTree *menu_entries; GSList *list; guint merge_id; gint i; g_return_if_fail (GIMP_IS_UI_MANAGER (manager)); g_return_if_fail (ui_path != NULL); plug_in_manager = manager->gimp->plug_in_manager; merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (manager)); for (i = 0; i < manager->gimp->config->plug_in_history_size; i++) { gchar *action_name; gchar *action_path; action_name = g_strdup_printf ("plug-in-recent-%02d", i + 1); action_path = g_strdup_printf ("%s/Filters/Recently Used/Plug-Ins", ui_path); gtk_ui_manager_add_ui (GTK_UI_MANAGER (manager), merge_id, action_path, action_name, action_name, GTK_UI_MANAGER_MENUITEM, FALSE); g_free (action_name); g_free (action_path); } menu_entries = g_tree_new_full ((GCompareDataFunc) strcmp, NULL, g_free, (GDestroyNotify) plug_in_menu_entry_free); for (list = plug_in_manager->plug_in_procedures; list; list = g_slist_next (list)) { GimpPlugInProcedure *plug_in_proc = list->data; if (! plug_in_proc->prog) continue; g_signal_connect_object (plug_in_proc, "menu-path-added", G_CALLBACK (plug_in_menus_menu_path_added), manager, 0); if (plug_in_proc->menu_paths && ! plug_in_proc->file_proc) { GList *path; for (path = plug_in_proc->menu_paths; path; path = g_list_next (path)) { if (g_str_has_prefix (path->data, manager->name)) { PlugInMenuEntry *entry = g_slice_new0 (PlugInMenuEntry); const gchar *progname; const gchar *locale_domain; entry->proc = plug_in_proc; entry->menu_path = path->data; progname = gimp_plug_in_procedure_get_progname (plug_in_proc); locale_domain = gimp_plug_in_manager_get_locale_domain (plug_in_manager, progname, NULL); if (plug_in_proc->menu_label) { gchar *menu; menu = g_strconcat (dgettext (locale_domain, path->data), "/", dgettext (locale_domain, plug_in_proc->menu_label), NULL); plug_in_menus_tree_insert (menu_entries, menu, entry); g_free (menu); } else { plug_in_menus_tree_insert (menu_entries, dgettext (locale_domain, path->data), entry); } } } } } g_object_set_data (G_OBJECT (manager), "ui-path", (gpointer) ui_path); g_tree_foreach (menu_entries, (GTraverseFunc) plug_in_menus_tree_traverse, manager); g_object_set_data (G_OBJECT (manager), "ui-path", NULL); g_tree_destroy (menu_entries); g_signal_connect_object (manager->gimp->pdb, "register-procedure", G_CALLBACK (plug_in_menus_register_procedure), manager, 0); g_signal_connect_object (manager->gimp->pdb, "unregister-procedure", G_CALLBACK (plug_in_menus_unregister_procedure), manager, 0); }