gboolean gimp_plug_in_manager_register_thumb_loader (GimpPlugInManager *manager, const gchar *load_proc, const gchar *thumb_proc) { GimpPlugInProcedure *file_proc; GSList *list; g_return_val_if_fail (GIMP_IS_PLUG_IN_MANAGER (manager), FALSE); g_return_val_if_fail (load_proc, FALSE); g_return_val_if_fail (thumb_proc, FALSE); if (manager->current_plug_in && manager->current_plug_in->plug_in_def) list = manager->current_plug_in->plug_in_def->procedures; else list = manager->plug_in_procedures; file_proc = gimp_plug_in_procedure_find (list, load_proc); if (! file_proc) return FALSE; gimp_plug_in_procedure_set_thumb_loader (file_proc, thumb_proc); return TRUE; }
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); }
void gimp_plug_in_def_add_procedure (GimpPlugInDef *plug_in_def, GimpPlugInProcedure *proc) { GimpPlugInProcedure *overridden; g_return_if_fail (GIMP_IS_PLUG_IN_DEF (plug_in_def)); g_return_if_fail (GIMP_IS_PLUG_IN_PROCEDURE (proc)); overridden = gimp_plug_in_procedure_find (plug_in_def->procedures, gimp_object_get_name (proc)); if (overridden) gimp_plug_in_def_remove_procedure (plug_in_def, overridden); proc->mtime = plug_in_def->mtime; gimp_plug_in_procedure_set_locale_domain (proc, plug_in_def->locale_domain_name); gimp_plug_in_procedure_set_help_domain (proc, plug_in_def->help_domain_name); plug_in_def->procedures = g_slist_append (plug_in_def->procedures, g_object_ref (proc)); }
gboolean gimp_plug_in_manager_register_mime_type (GimpPlugInManager *manager, const gchar *name, const gchar *mime_type) { GimpPlugInProcedure *file_proc; GSList *list; g_return_val_if_fail (GIMP_IS_PLUG_IN_MANAGER (manager), FALSE); g_return_val_if_fail (name != NULL, FALSE); g_return_val_if_fail (mime_type != NULL, FALSE); if (manager->current_plug_in && manager->current_plug_in->plug_in_def) list = manager->current_plug_in->plug_in_def->procedures; else list = manager->plug_in_procedures; file_proc = gimp_plug_in_procedure_find (list, name); if (! file_proc) return FALSE; gimp_plug_in_procedure_set_mime_type (file_proc, mime_type); return TRUE; }
gboolean gimp_plug_in_manager_register_save_handler (GimpPlugInManager *manager, const gchar *name, const gchar *extensions, const gchar *prefixes) { GimpPlugInProcedure *file_proc; GimpProcedure *procedure; GSList *list; g_return_val_if_fail (GIMP_IS_PLUG_IN_MANAGER (manager), FALSE); g_return_val_if_fail (name != NULL, FALSE); if (manager->current_plug_in && manager->current_plug_in->plug_in_def) list = manager->current_plug_in->plug_in_def->procedures; else list = manager->plug_in_procedures; file_proc = gimp_plug_in_procedure_find (list, name); if (! file_proc) { gimp_message (manager->gimp, NULL, GIMP_MESSAGE_ERROR, "attempt to register nonexistent save handler \"%s\"", name); return FALSE; } procedure = GIMP_PROCEDURE (file_proc); if ((procedure->num_args < 5) || ! GIMP_IS_PARAM_SPEC_INT32 (procedure->args[0]) || ! GIMP_IS_PARAM_SPEC_IMAGE_ID (procedure->args[1]) || ! GIMP_IS_PARAM_SPEC_DRAWABLE_ID (procedure->args[2]) || ! G_IS_PARAM_SPEC_STRING (procedure->args[3]) || ! G_IS_PARAM_SPEC_STRING (procedure->args[4])) { gimp_message (manager->gimp, NULL, GIMP_MESSAGE_ERROR, "save handler \"%s\" does not take the standard " "save handler args", name); return FALSE; } gimp_plug_in_procedure_set_file_proc (file_proc, extensions, prefixes, NULL); if (file_procedure_in_group (file_proc, FILE_PROCEDURE_GROUP_SAVE)) { if (! g_slist_find (manager->save_procs, file_proc)) manager->save_procs = g_slist_prepend (manager->save_procs, file_proc); } if (file_procedure_in_group (file_proc, FILE_PROCEDURE_GROUP_EXPORT)) { if (! g_slist_find (manager->export_procs, file_proc)) manager->export_procs = g_slist_prepend (manager->export_procs, file_proc); } return TRUE; }
gboolean gimp_plug_in_manager_register_load_handler (GimpPlugInManager *manager, const gchar *name, const gchar *extensions, const gchar *prefixes, const gchar *magics) { GimpPlugInProcedure *file_proc; GimpProcedure *procedure; GSList *list; g_return_val_if_fail (GIMP_IS_PLUG_IN_MANAGER (manager), FALSE); g_return_val_if_fail (name != NULL, FALSE); if (manager->current_plug_in && manager->current_plug_in->plug_in_def) list = manager->current_plug_in->plug_in_def->procedures; else list = manager->plug_in_procedures; file_proc = gimp_plug_in_procedure_find (list, name); if (! file_proc) { gimp_message (manager->gimp, NULL, GIMP_MESSAGE_ERROR, "attempt to register nonexistent load handler \"%s\"", name); return FALSE; } procedure = GIMP_PROCEDURE (file_proc); if ((procedure->num_args < 3) || (procedure->num_values < 1) || ! GIMP_IS_PARAM_SPEC_INT32 (procedure->args[0]) || ! G_IS_PARAM_SPEC_STRING (procedure->args[1]) || ! G_IS_PARAM_SPEC_STRING (procedure->args[2]) || ! GIMP_IS_PARAM_SPEC_IMAGE_ID (procedure->values[0])) { gimp_message (manager->gimp, NULL, GIMP_MESSAGE_ERROR, "load handler \"%s\" does not take the standard " "load handler args", name); return FALSE; } gimp_plug_in_procedure_set_file_proc (file_proc, extensions, prefixes, magics); if (! g_slist_find (manager->load_procs, file_proc)) manager->load_procs = g_slist_prepend (manager->load_procs, file_proc); return TRUE; }
static GValueArray * plugin_icon_register_invoker (GimpProcedure *procedure, Gimp *gimp, GimpContext *context, GimpProgress *progress, const GValueArray *args, GError **error) { gboolean success = TRUE; const gchar *procedure_name; gint32 icon_type; gint32 icon_data_length; const guint8 *icon_data; procedure_name = g_value_get_string (&args->values[0]); icon_type = g_value_get_enum (&args->values[1]); icon_data_length = g_value_get_int (&args->values[2]); icon_data = gimp_value_get_int8array (&args->values[3]); if (success) { GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in; if (plug_in && plug_in->call_mode == GIMP_PLUG_IN_CALL_QUERY) { GimpPlugInProcedure *proc; gchar *canonical; canonical = gimp_canonicalize_identifier (procedure_name); proc = gimp_plug_in_procedure_find (plug_in->plug_in_def->procedures, canonical); g_free (canonical); if (proc) gimp_plug_in_procedure_set_icon (proc, icon_type, icon_data, icon_data_length); else success = FALSE; } else { success = FALSE; } } return gimp_procedure_get_return_values (procedure, success, error ? *error : NULL); }
static void gimp_plug_in_handle_proc_uninstall (GimpPlugIn *plug_in, GPProcUninstall *proc_uninstall) { GimpPlugInProcedure *proc; gchar *canonical; g_return_if_fail (proc_uninstall != NULL); g_return_if_fail (proc_uninstall->name != NULL); canonical = gimp_canonicalize_identifier (proc_uninstall->name); proc = gimp_plug_in_procedure_find (plug_in->temp_procedures, canonical); if (proc) gimp_plug_in_remove_temp_proc (plug_in, GIMP_TEMPORARY_PROCEDURE (proc)); g_free (canonical); }
/* called from the PDB (gimp_plugin_menu_register) */ gboolean gimp_plug_in_menu_register (GimpPlugIn *plug_in, const gchar *proc_name, const gchar *menu_path) { GimpPlugInProcedure *proc = NULL; GError *error = NULL; g_return_val_if_fail (GIMP_IS_PLUG_IN (plug_in), FALSE); g_return_val_if_fail (proc_name != NULL, FALSE); g_return_val_if_fail (menu_path != NULL, FALSE); if (plug_in->plug_in_def) proc = gimp_plug_in_procedure_find (plug_in->plug_in_def->procedures, proc_name); if (! proc) proc = gimp_plug_in_procedure_find (plug_in->temp_procedures, proc_name); if (! proc) { gimp_message (plug_in->manager->gimp, NULL, GIMP_MESSAGE_ERROR, "Plug-in \"%s\"\n(%s)\n" "attempted to register the menu item \"%s\" " "for the procedure \"%s\".\n" "It has however not installed that procedure. This " "is not allowed.", gimp_object_get_name (plug_in), gimp_filename_to_utf8 (plug_in->prog), menu_path, proc_name); return FALSE; } switch (GIMP_PROCEDURE (proc)->proc_type) { case GIMP_INTERNAL: return FALSE; case GIMP_PLUGIN: case GIMP_EXTENSION: if (plug_in->call_mode != GIMP_PLUG_IN_CALL_QUERY && plug_in->call_mode != GIMP_PLUG_IN_CALL_INIT) return FALSE; case GIMP_TEMPORARY: break; } if (! proc->menu_label) { gimp_message (plug_in->manager->gimp, NULL, GIMP_MESSAGE_ERROR, "Plug-in \"%s\"\n(%s)\n" "attempted to register the menu item \"%s\" " "for procedure \"%s\".\n" "The menu label given in gimp_install_procedure() " "already contained a path. To make this work, " "pass just the menu's label to " "gimp_install_procedure().", gimp_object_get_name (plug_in), gimp_filename_to_utf8 (plug_in->prog), menu_path, proc_name); return FALSE; } if (! strlen (proc->menu_label)) { gimp_message (plug_in->manager->gimp, NULL, GIMP_MESSAGE_ERROR, "Plug-in \"%s\"\n(%s)\n" "attempted to register the procedure \"%s\" " "in the menu \"%s\", but the procedure has no label. " "This is not allowed.", gimp_object_get_name (plug_in), gimp_filename_to_utf8 (plug_in->prog), proc_name, menu_path); return FALSE; } if (! gimp_plug_in_procedure_add_menu_path (proc, menu_path, &error)) { gimp_message_literal (plug_in->manager->gimp, NULL, GIMP_MESSAGE_ERROR, error->message); g_clear_error (&error); return FALSE; } return TRUE; }