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; }
static GTokenType plug_in_file_proc_deserialize (GScanner *scanner, GimpPlugInProcedure *proc) { GTokenType token; gint symbol; gchar *value; if (! gimp_scanner_parse_token (scanner, G_TOKEN_LEFT_PAREN)) return G_TOKEN_LEFT_PAREN; if (! gimp_scanner_parse_token (scanner, G_TOKEN_SYMBOL)) return G_TOKEN_SYMBOL; symbol = GPOINTER_TO_INT (scanner->value.v_symbol); if (symbol != LOAD_PROC && symbol != SAVE_PROC) return G_TOKEN_SYMBOL; proc->file_proc = TRUE; g_scanner_set_scope (scanner, symbol); while (g_scanner_peek_next_token (scanner) == G_TOKEN_LEFT_PAREN) { token = g_scanner_get_next_token (scanner); if (token != G_TOKEN_LEFT_PAREN) return token; if (! gimp_scanner_parse_token (scanner, G_TOKEN_SYMBOL)) return G_TOKEN_SYMBOL; symbol = GPOINTER_TO_INT (scanner->value.v_symbol); if (symbol == MAGIC) { if (! gimp_scanner_parse_string_no_validate (scanner, &value)) return G_TOKEN_STRING; } else if (symbol != HANDLES_URI) { if (! gimp_scanner_parse_string (scanner, &value)) return G_TOKEN_STRING; } switch (symbol) { case EXTENSION: g_free (proc->extensions); proc->extensions = value; break; case PREFIX: g_free (proc->prefixes); proc->prefixes = value; break; case MAGIC: g_free (proc->magics); proc->magics = value; break; case MIME_TYPE: gimp_plug_in_procedure_set_mime_type (proc, value); g_free (value); break; case HANDLES_URI: gimp_plug_in_procedure_set_handles_uri (proc); break; case THUMB_LOADER: gimp_plug_in_procedure_set_thumb_loader (proc, value); g_free (value); break; default: return G_TOKEN_SYMBOL; } if (! gimp_scanner_parse_token (scanner, G_TOKEN_RIGHT_PAREN)) return G_TOKEN_RIGHT_PAREN; } if (! gimp_scanner_parse_token (scanner, G_TOKEN_RIGHT_PAREN)) return G_TOKEN_RIGHT_PAREN; g_scanner_set_scope (scanner, PLUG_IN_DEF); return G_TOKEN_LEFT_PAREN; }