app: move some stuff out of app/file/

file-procedure.[ch] is gone and its functions moved to
GimpPlugInManager where they belong (the manager keeps around the
lists of load, save and export procedures).

Utility functions from file-utils.[ch] that have nothing to do with
image files moved to core/gimp-utils.[ch].
This commit is contained in:
Michael Natterer
2016-01-03 20:05:27 +01:00
parent 87a668a4da
commit 5455b8bfd0
30 changed files with 478 additions and 322 deletions

View File

@ -284,8 +284,9 @@ file_actions_update (GimpActionGroup *group,
show_overwrite =
(source &&
gimp_plug_in_manager_file_has_exporter (gimp->plug_in_manager,
source));
gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_EXPORT,
source, NULL));
#define SET_VISIBLE(action,condition) \
gimp_action_group_set_action_visible (group, action, (condition) != 0)

View File

@ -36,10 +36,9 @@
#include "core/gimpprogress.h"
#include "core/gimptemplate.h"
#include "plug-in/gimppluginmanager.h"
#include "plug-in/gimppluginmanager-file.h"
#include "file/file-open.h"
#include "file/file-procedure.h"
#include "file/file-save.h"
#include "file/gimp-file.h"
@ -258,8 +257,9 @@ file_save_cmd_callback (GtkAction *action,
if (file && ! save_proc)
{
save_proc =
file_procedure_find (image->gimp->plug_in_manager->save_procs,
file, NULL);
gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_SAVE,
file, NULL);
}
if (file && save_proc)
@ -357,8 +357,9 @@ file_save_cmd_callback (GtkAction *action,
if (file && ! export_proc)
{
export_proc =
file_procedure_find (image->gimp->plug_in_manager->export_procs,
file, NULL);
gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_EXPORT,
file, NULL);
}
if (file && export_proc)

View File

@ -745,6 +745,90 @@ gimp_file_is_executable (GFile *file)
return executable;
}
/**
* gimp_file_get_extension:
* @file: A #GFile
*
* Returns @file's extension (including the .), or NULL if there is no
* extension. Note that this function handles compressed files too,
* e.g. for "file.png.gz" it will return ".png.gz".
*
* Returns: The @file's extension. Free with g_free() when no longer needed.
**/
gchar *
gimp_file_get_extension (GFile *file)
{
gchar *uri;
gint uri_len;
gchar *ext = NULL;
gint search_len;
g_return_val_if_fail (G_IS_FILE (file), NULL);
uri = g_file_get_uri (file);
uri_len = strlen (uri);
if (g_str_has_suffix (uri, ".gz"))
search_len = uri_len - 3;
else if (g_str_has_suffix (uri, ".bz2"))
search_len = uri_len - 4;
else if (g_str_has_suffix (uri, ".xz"))
search_len = uri_len - 3;
else
search_len = uri_len;
ext = g_strrstr_len (uri, search_len, ".");
if (ext)
ext = g_strdup (ext);
g_free (uri);
return ext;
}
GFile *
gimp_file_with_new_extension (GFile *file,
GFile *ext_file)
{
gchar *uri;
gchar *file_ext;
gint file_ext_len = 0;
gchar *ext_file_ext = NULL;
gchar *uri_without_ext;
gchar *new_uri;
GFile *ret;
g_return_val_if_fail (G_IS_FILE (file), NULL);
g_return_val_if_fail (ext_file == NULL || G_IS_FILE (ext_file), NULL);
uri = g_file_get_uri (file);
file_ext = gimp_file_get_extension (file);
if (file_ext)
{
file_ext_len = strlen (file_ext);
g_free (file_ext);
}
if (ext_file)
ext_file_ext = gimp_file_get_extension (ext_file);
uri_without_ext = g_strndup (uri, strlen (uri) - file_ext_len);
g_free (uri);
new_uri = g_strconcat (uri_without_ext, ext_file_ext, NULL);
ret = g_file_new_for_uri (new_uri);
g_free (ext_file_ext);
g_free (uri_without_ext);
g_free (new_uri);
return ret;
}
/* debug stuff */

View File

@ -76,6 +76,9 @@ void gimp_constrain_line (gdouble start_x,
gint gimp_file_compare (GFile *file1,
GFile *file2);
gboolean gimp_file_is_executable (GFile *file);
gchar * gimp_file_get_extension (GFile *file);
GFile * gimp_file_with_new_extension (GFile *file,
GFile *ext_file);
GimpImage * gimp_create_image_from_buffer (Gimp *gimp,
GeglBuffer *buffer,

View File

@ -39,6 +39,7 @@
#include "gimp.h"
#include "gimp-memsize.h"
#include "gimp-parasites.h"
#include "gimp-utils.h"
#include "gimpcontext.h"
#include "gimpdrawablestack.h"
#include "gimpgrid.h"
@ -72,8 +73,6 @@
#include "gimptemplate.h"
#include "gimpundostack.h"
#include "file/file-utils.h"
#include "vectors/gimpvectors.h"
#include "gimp-log.h"
@ -2168,7 +2167,7 @@ gimp_image_format_display_uri (GimpImage *image,
}
if (display_file)
display_file = file_utils_file_with_new_ext (display_file, NULL);
display_file = gimp_file_with_new_extension (display_file, NULL);
uri_format = "[%s]";
}

View File

@ -35,7 +35,6 @@
#include "core/gimpprogress.h"
#include "file/file-open.h"
#include "file/file-utils.h"
#include "file/gimp-file.h"
#include "widgets/gimpfiledialog.h"

View File

@ -32,10 +32,9 @@
#include "core/gimpimage.h"
#include "core/gimpprogress.h"
#include "plug-in/gimppluginmanager.h"
#include "plug-in/gimppluginmanager-file.h"
#include "plug-in/gimppluginprocedure.h"
#include "file/file-procedure.h"
#include "file/file-save.h"
#include "file/gimp-file.h"
@ -78,8 +77,9 @@ static CheckUriResult file_save_dialog_check_file (GtkWidget
GimpPlugInProcedure **ret_save_proc);
static gboolean file_save_dialog_no_overwrite_confirmation (GimpFileDialog *dialog,
Gimp *gimp);
static GSList * file_save_dialog_get_procs (GimpFileDialog *dialog,
Gimp *gimp);
static GimpPlugInProcedure *
file_save_dialog_find_procedure (GimpFileDialog *dialog,
GFile *file);
static gboolean file_save_dialog_switch_dialogs (GimpFileDialog *file_dialog,
Gimp *gimp,
const gchar *basename);
@ -295,12 +295,8 @@ file_save_dialog_check_file (GtkWidget *dialog,
basename_file = g_file_new_for_uri (basename);
save_proc = file_dialog->file_proc;
uri_proc = file_procedure_find (file_save_dialog_get_procs (file_dialog,
gimp),
file, NULL);
basename_proc = file_procedure_find (file_save_dialog_get_procs (file_dialog,
gimp),
basename_file, NULL);
uri_proc = file_save_dialog_find_procedure (file_dialog, file);
basename_proc = file_save_dialog_find_procedure (file_dialog, basename_file);
g_object_unref (basename_file);
@ -539,9 +535,7 @@ file_save_dialog_no_overwrite_confirmation (GimpFileDialog *file_dialog,
basename_file = g_file_new_for_uri (basename);
save_proc = file_dialog->file_proc;
basename_proc = file_procedure_find (file_save_dialog_get_procs (file_dialog,
gimp),
basename_file, NULL);
basename_proc = file_save_dialog_find_procedure (file_dialog, basename_file);
g_object_unref (basename_file);
@ -558,13 +552,19 @@ file_save_dialog_no_overwrite_confirmation (GimpFileDialog *file_dialog,
return uri_will_change || unknown_ext;
}
static GSList *
file_save_dialog_get_procs (GimpFileDialog *file_dialog,
Gimp *gimp)
static GimpPlugInProcedure *
file_save_dialog_find_procedure (GimpFileDialog *file_dialog,
GFile *file)
{
return (GIMP_IS_SAVE_DIALOG (file_dialog) ?
gimp->plug_in_manager->save_procs :
gimp->plug_in_manager->export_procs);
GimpPlugInManager *manager = file_dialog->gimp->plug_in_manager;
GimpFileProcedureGroup group;
if (GIMP_IS_SAVE_DIALOG (file_dialog))
group = GIMP_FILE_PROCEDURE_GROUP_SAVE;
else
group = GIMP_FILE_PROCEDURE_GROUP_EXPORT;
return gimp_plug_in_manager_file_procedure_find (manager, group, file, NULL);
}
static gboolean
@ -582,17 +582,21 @@ file_save_dialog_switch_dialogs (GimpFileDialog *file_dialog,
Gimp *gimp,
const gchar *basename)
{
GimpPlugInProcedure *proc_in_other_group;
GFile *file;
gboolean switch_dialogs = FALSE;
GimpPlugInProcedure *proc_in_other_group;
GimpFileProcedureGroup other_group;
GFile *file;
gboolean switch_dialogs = FALSE;
file = g_file_new_for_uri (basename);
if (GIMP_IS_EXPORT_DIALOG (file_dialog))
other_group = GIMP_FILE_PROCEDURE_GROUP_SAVE;
else
other_group = GIMP_FILE_PROCEDURE_GROUP_EXPORT;
proc_in_other_group =
file_procedure_find (GIMP_IS_EXPORT_DIALOG (file_dialog) ?
gimp->plug_in_manager->save_procs :
gimp->plug_in_manager->export_procs,
file, NULL);
gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
other_group, file, NULL);
g_object_unref (file);

View File

@ -13,14 +13,12 @@ AM_CPPFLAGS = \
noinst_LIBRARIES = libappfile.a
libappfile_a_SOURCES = \
file-open.c \
file-open.h \
file-procedure.c \
file-procedure.h \
file-remote.c \
file-remote.h \
file-save.c \
file-save.h \
file-utils.c \
file-utils.h \
file-open.c \
file-open.h \
file-remote.c \
file-remote.h \
file-save.c \
file-save.h \
file-utils.c \
file-utils.h \
gimp-file.h

View File

@ -46,27 +46,25 @@
#include "pdb/gimppdb.h"
#include "plug-in/gimppluginmanager.h"
#include "plug-in/gimppluginmanager-file.h"
#include "plug-in/gimppluginprocedure.h"
#include "file-open.h"
#include "file-procedure.h"
#include "file-remote.h"
#include "file-utils.h"
#include "gimp-file.h"
#include "gimp-intl.h"
static void file_open_sanitize_image (GimpImage *image,
gboolean as_new);
static void file_open_convert_items (GimpImage *dest_image,
const gchar *basename,
GList *items);
static GList * file_open_get_layers (const GimpImage *image,
gboolean merge_visible,
gint *n_visible);
static gboolean file_open_file_proc_is_import (const GimpPlugInProcedure *file_proc);
static void file_open_sanitize_image (GimpImage *image,
gboolean as_new);
static void file_open_convert_items (GimpImage *dest_image,
const gchar *basename,
GList *items);
static GList * file_open_get_layers (const GimpImage *image,
gboolean merge_visible,
gint *n_visible);
static gboolean file_open_file_proc_is_import (GimpPlugInProcedure *file_proc);
/* public functions */
@ -136,8 +134,9 @@ file_open_image (Gimp *gimp,
}
if (! file_proc)
file_proc = file_procedure_find (gimp->plug_in_manager->load_procs, file,
error);
file_proc = gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_OPEN,
file, error);
if (! file_proc)
return NULL;
@ -320,8 +319,9 @@ file_open_thumbnail (Gimp *gimp,
*format = NULL;
*num_layers = -1;
file_proc = file_procedure_find (gimp->plug_in_manager->load_procs, file,
NULL);
file_proc = gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_OPEN,
file, NULL);
if (! file_proc || ! file_proc->thumb_loader)
return NULL;
@ -791,7 +791,7 @@ file_open_get_layers (const GimpImage *image,
}
static gboolean
file_open_file_proc_is_import (const GimpPlugInProcedure *file_proc)
file_open_file_proc_is_import (GimpPlugInProcedure *file_proc)
{
return !(file_proc &&
file_proc->mime_type &&

View File

@ -44,7 +44,6 @@
#include "file-remote.h"
#include "file-save.h"
#include "file-utils.h"
#include "gimp-file.h"
#include "gimp-intl.h"

View File

@ -35,9 +35,8 @@
#include "core/gimpimage.h"
#include "core/gimpimagefile.h"
#include "plug-in/gimppluginmanager.h"
#include "plug-in/gimppluginmanager-file.h"
#include "file-procedure.h"
#include "file-utils.h"
#include "gimp-intl.h"
@ -105,8 +104,9 @@ file_utils_filename_to_file (Gimp *gimp,
file = g_file_new_for_uri (filename);
/* check for prefixes like http or ftp */
if (file_procedure_find_by_prefix (gimp->plug_in_manager->load_procs,
file))
if (gimp_plug_in_manager_file_procedure_find_by_prefix (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_OPEN,
file))
{
if (g_utf8_validate (filename, -1, NULL))
{
@ -155,90 +155,6 @@ file_utils_filename_to_file (Gimp *gimp,
return file;
}
GFile *
file_utils_file_with_new_ext (GFile *file,
GFile *ext_file)
{
gchar *uri;
gchar *file_ext;
gint file_ext_len = 0;
gchar *ext_file_ext = NULL;
gchar *uri_without_ext;
gchar *new_uri;
GFile *ret;
g_return_val_if_fail (G_IS_FILE (file), NULL);
g_return_val_if_fail (ext_file == NULL || G_IS_FILE (ext_file), NULL);
uri = g_file_get_uri (file);
file_ext = file_utils_file_get_ext (file);
if (file_ext)
{
file_ext_len = strlen (file_ext);
g_free (file_ext);
}
if (ext_file)
ext_file_ext = file_utils_file_get_ext (ext_file);
uri_without_ext = g_strndup (uri, strlen (uri) - file_ext_len);
g_free (uri);
new_uri = g_strconcat (uri_without_ext, ext_file_ext, NULL);
ret = g_file_new_for_uri (new_uri);
g_free (ext_file_ext);
g_free (uri_without_ext);
g_free (new_uri);
return ret;
}
/**
* file_utils_file_get_ext:
* @file:
*
* Returns the position of the extension (including the .), or NULL
* if there is no extension.
*
* Returns:
**/
gchar *
file_utils_file_get_ext (GFile *file)
{
gchar *uri;
gint uri_len;
gchar *ext = NULL;
gint search_len;
g_return_val_if_fail (G_IS_FILE (file), NULL);
uri = g_file_get_uri (file);
uri_len = strlen (uri);
if (g_str_has_suffix (uri, ".gz"))
search_len = uri_len - 3;
else if (g_str_has_suffix (uri, ".bz2"))
search_len = uri_len - 4;
else if (g_str_has_suffix (uri, ".xz"))
search_len = uri_len - 3;
else
search_len = uri_len;
ext = g_strrstr_len (uri, search_len, ".");
if (ext)
ext = g_strdup (ext);
g_free (uri);
return ext;
}
GdkPixbuf *
file_utils_load_thumbnail (const gchar *filename)
{

View File

@ -25,10 +25,6 @@ GFile * file_utils_filename_to_file (Gimp *gimp,
const gchar *filename,
GError **error);
GFile * file_utils_file_with_new_ext (GFile *file,
GFile *ext_file);
gchar * file_utils_file_get_ext (GFile *file);
GdkPixbuf * file_utils_load_thumbnail (const gchar *filename);
gboolean file_utils_save_thumbnail (GimpImage *image,
const gchar *filename);

View File

@ -47,9 +47,7 @@
#include "text/gimpfont.h"
#include "plug-in/gimppluginmanager.h"
#include "file/file-procedure.h"
#include "plug-in/gimppluginmanager-file.h"
#include "widgets/gimpactiongroup.h"
#include "widgets/gimpbrushselect.h"
@ -734,8 +732,9 @@ gui_recent_list_load (Gimp *gimp)
const gchar *mime_type = gtk_recent_info_get_mime_type (info);
if (mime_type &&
file_procedure_find_by_mime_type (gimp->plug_in_manager->load_procs,
mime_type))
gimp_plug_in_manager_file_procedure_find_by_mime_type (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_OPEN,
mime_type))
{
GimpImagefile *imagefile;
GFile *file;

View File

@ -38,11 +38,9 @@
#include "core/gimplayer.h"
#include "core/gimpparamspecs.h"
#include "file/file-open.h"
#include "file/file-procedure.h"
#include "file/file-save.h"
#include "file/file-utils.h"
#include "plug-in/gimppluginmanager-file.h"
#include "plug-in/gimppluginmanager.h"
#include "plug-in/gimppluginprocedure.h"
#include "gimppdb.h"
@ -73,8 +71,9 @@ file_load_invoker (GimpProcedure *procedure,
return gimp_procedure_get_return_values (procedure, FALSE,
error ? *error : NULL);
file_proc = file_procedure_find (gimp->plug_in_manager->load_procs,
file, error);
file_proc = gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_OPEN,
file, error);
if (! file_proc)
{
@ -279,12 +278,14 @@ file_save_invoker (GimpProcedure *procedure,
return gimp_procedure_get_return_values (procedure, FALSE,
error ? *error : NULL);
file_proc = file_procedure_find (gimp->plug_in_manager->save_procs,
file, NULL);
file_proc = gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_SAVE,
file, NULL);
if (! file_proc)
file_proc = file_procedure_find (gimp->plug_in_manager->export_procs,
file, error);
file_proc = gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_EXPORT,
file, error);
if (! file_proc)
{

View File

@ -46,6 +46,8 @@ libappplug_in_a_SOURCES = \
gimppluginmanager-data.h \
gimppluginmanager-file.c \
gimppluginmanager-file.h \
gimppluginmanager-file-procedure.c \
gimppluginmanager-file-procedure.h \
gimppluginmanager-help-domain.c \
gimppluginmanager-help-domain.h \
gimppluginmanager-locale-domain.c \

View File

@ -2,7 +2,7 @@
* Copyright (C) 1995, 1996, 1997 Spencer Kimball and Peter Mattis
* Copyright (C) 1997 Josh MacDonald
*
* file-procedure.c
* gimppluginmanager-file-procedure.c
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -28,12 +28,12 @@
#include "libgimpbase/gimpbase.h"
#include "core/core-types.h"
#include "plug-in-types.h"
#include "plug-in/gimppluginprocedure.h"
#include "core/gimp-utils.h"
#include "file-procedure.h"
#include "file-utils.h"
#include "gimppluginmanager-file-procedure.h"
#include "gimppluginprocedure.h"
#include "gimp-intl.h"
@ -252,40 +252,6 @@ file_procedure_find_by_mime_type (GSList *procs,
return NULL;
}
gboolean
file_procedure_in_group (GimpPlugInProcedure *file_proc,
FileProcedureGroup group)
{
const gchar *name = gimp_object_get_name (file_proc);
gboolean is_xcf_save = FALSE;
gboolean is_filter = FALSE;
is_xcf_save = (strcmp (name, "gimp-xcf-save") == 0);
is_filter = (strcmp (name, "file-gz-save") == 0 ||
strcmp (name, "file-bz2-save") == 0 ||
strcmp (name, "file-xz-save") == 0);
switch (group)
{
case FILE_PROCEDURE_GROUP_SAVE:
/* Only .xcf shall pass */
return is_xcf_save || is_filter;
case FILE_PROCEDURE_GROUP_EXPORT:
/* Anything but .xcf shall pass */
return ! is_xcf_save;
case FILE_PROCEDURE_GROUP_OPEN:
/* No filter applied for Open */
return TRUE;
default:
case FILE_PROCEDURE_GROUP_ANY:
return TRUE;
}
}
/* private functions */
@ -328,7 +294,7 @@ file_proc_find_by_extension (GSList *procs,
gboolean skip_magic,
gboolean uri_procs_only)
{
gchar *ext = file_utils_file_get_ext (file);
gchar *ext = gimp_file_get_extension (file);
if (ext)
{

View File

@ -1,7 +1,7 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* file-procedure.h
* gimppluginmanager-file-procedure.h
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -17,32 +17,21 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __FILE_PROCEDURE_H__
#define __FILE_PROCEDURE_H__
#ifndef __GIMP_PLUG_IN_MANAGER_FILE_PROCEDURE_H__
#define __GIMP_PLUG_IN_MANAGER_FILE_PROCEDURE_H__
typedef enum
{
FILE_PROCEDURE_GROUP_ANY,
FILE_PROCEDURE_GROUP_OPEN,
FILE_PROCEDURE_GROUP_SAVE,
FILE_PROCEDURE_GROUP_EXPORT
} FileProcedureGroup;
GimpPlugInProcedure *file_procedure_find (GSList *procs,
GFile *file,
GError **error);
GimpPlugInProcedure *file_procedure_find_by_prefix (GSList *procs,
GFile *file);
GimpPlugInProcedure *file_procedure_find_by_extension (GSList *procs,
GFile *file);
GimpPlugInProcedure *file_procedure_find_by_mime_type (GSList *procs,
const gchar *mime_type);
GimpPlugInProcedure *file_procedure_find (GSList *procs,
GFile *file,
GError **error);
GimpPlugInProcedure *file_procedure_find_by_prefix (GSList *procs,
GFile *file);
GimpPlugInProcedure *file_procedure_find_by_extension (GSList *procs,
GFile *file);
GimpPlugInProcedure *file_procedure_find_by_mime_type (GSList *procs,
const gchar *mime_type);
gboolean file_procedure_in_group (GimpPlugInProcedure *file_proc,
FileProcedureGroup group);
#endif /* __FILE_PROCEDURE_H__ */
#endif /* __GIMP_PLUG_IN_MANAGER_FILE_PROCEDURE_H__ */

View File

@ -19,6 +19,8 @@
#include "config.h"
#include <string.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gegl.h>
@ -27,15 +29,18 @@
#include "core/gimp.h"
#include "core/gimpparamspecs.h"
#include "file/file-procedure.h"
#include "gimpplugin.h"
#include "gimpplugindef.h"
#include "gimppluginmanager.h"
#include "gimppluginmanager-file.h"
#include "gimppluginmanager-file-procedure.h"
#include "gimppluginprocedure.h"
static gboolean file_procedure_in_group (GimpPlugInProcedure *file_proc,
GimpFileProcedureGroup group);
/* public functions */
gboolean
@ -137,13 +142,13 @@ gimp_plug_in_manager_register_save_handler (GimpPlugInManager *manager,
gimp_plug_in_procedure_set_file_proc (file_proc,
extensions, prefixes, NULL);
if (file_procedure_in_group (file_proc, FILE_PROCEDURE_GROUP_SAVE))
if (file_procedure_in_group (file_proc, GIMP_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 (file_procedure_in_group (file_proc, GIMP_FILE_PROCEDURE_GROUP_EXPORT))
{
if (! g_slist_find (manager->export_procs, file_proc))
manager->export_procs = g_slist_prepend (manager->export_procs, file_proc);
@ -231,9 +236,137 @@ gimp_plug_in_manager_register_thumb_loader (GimpPlugInManager *manager,
return TRUE;
}
gboolean
gimp_plug_in_manager_file_has_exporter (GimpPlugInManager *manager,
GFile *file)
GimpPlugInProcedure *
gimp_plug_in_manager_file_procedure_find (GimpPlugInManager *manager,
GimpFileProcedureGroup group,
GFile *file,
GError **error)
{
return file_procedure_find (manager->export_procs, file, NULL) != NULL;
g_return_val_if_fail (GIMP_IS_PLUG_IN_MANAGER (manager), NULL);
g_return_val_if_fail (G_IS_FILE (file), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
switch (group)
{
case GIMP_FILE_PROCEDURE_GROUP_OPEN:
return file_procedure_find (manager->load_procs, file, error);
case GIMP_FILE_PROCEDURE_GROUP_SAVE:
return file_procedure_find (manager->save_procs, file, error);
case GIMP_FILE_PROCEDURE_GROUP_EXPORT:
return file_procedure_find (manager->export_procs, file, error);
default:
g_return_val_if_reached (NULL);
}
}
GimpPlugInProcedure *
gimp_plug_in_manager_file_procedure_find_by_prefix (GimpPlugInManager *manager,
GimpFileProcedureGroup group,
GFile *file)
{
g_return_val_if_fail (GIMP_IS_PLUG_IN_MANAGER (manager), NULL);
g_return_val_if_fail (G_IS_FILE (file), NULL);
switch (group)
{
case GIMP_FILE_PROCEDURE_GROUP_OPEN:
return file_procedure_find_by_prefix (manager->load_procs, file);
case GIMP_FILE_PROCEDURE_GROUP_SAVE:
return file_procedure_find_by_prefix (manager->save_procs, file);
case GIMP_FILE_PROCEDURE_GROUP_EXPORT:
return file_procedure_find_by_prefix (manager->export_procs, file);
default:
g_return_val_if_reached (NULL);
}
}
GimpPlugInProcedure *
gimp_plug_in_manager_file_procedure_find_by_extension (GimpPlugInManager *manager,
GimpFileProcedureGroup group,
GFile *file)
{
g_return_val_if_fail (GIMP_IS_PLUG_IN_MANAGER (manager), NULL);
g_return_val_if_fail (G_IS_FILE (file), NULL);
switch (group)
{
case GIMP_FILE_PROCEDURE_GROUP_OPEN:
return file_procedure_find_by_extension (manager->load_procs, file);
case GIMP_FILE_PROCEDURE_GROUP_SAVE:
return file_procedure_find_by_extension (manager->save_procs, file);
case GIMP_FILE_PROCEDURE_GROUP_EXPORT:
return file_procedure_find_by_extension (manager->export_procs, file);
default:
g_return_val_if_reached (NULL);
}
}
GimpPlugInProcedure *
gimp_plug_in_manager_file_procedure_find_by_mime_type (GimpPlugInManager *manager,
GimpFileProcedureGroup group,
const gchar *mime_type)
{
g_return_val_if_fail (GIMP_IS_PLUG_IN_MANAGER (manager), NULL);
g_return_val_if_fail (mime_type != NULL, NULL);
switch (group)
{
case GIMP_FILE_PROCEDURE_GROUP_OPEN:
return file_procedure_find_by_mime_type (manager->load_procs, mime_type);
case GIMP_FILE_PROCEDURE_GROUP_SAVE:
return file_procedure_find_by_mime_type (manager->save_procs, mime_type);
case GIMP_FILE_PROCEDURE_GROUP_EXPORT:
return file_procedure_find_by_mime_type (manager->export_procs, mime_type);
default:
g_return_val_if_reached (NULL);
}
}
/* private functions */
gboolean
file_procedure_in_group (GimpPlugInProcedure *file_proc,
GimpFileProcedureGroup group)
{
const gchar *name = gimp_object_get_name (file_proc);
gboolean is_xcf_save = FALSE;
gboolean is_filter = FALSE;
is_xcf_save = (strcmp (name, "gimp-xcf-save") == 0);
is_filter = (strcmp (name, "file-gz-save") == 0 ||
strcmp (name, "file-bz2-save") == 0 ||
strcmp (name, "file-xz-save") == 0);
switch (group)
{
case GIMP_FILE_PROCEDURE_GROUP_SAVE:
/* Only .xcf shall pass */
return is_xcf_save || is_filter;
case GIMP_FILE_PROCEDURE_GROUP_EXPORT:
/* Anything but .xcf shall pass */
return ! is_xcf_save;
case GIMP_FILE_PROCEDURE_GROUP_OPEN:
/* No filter applied for Open */
return TRUE;
default:
case GIMP_FILE_PROCEDURE_GROUP_ANY:
return TRUE;
}
}

View File

@ -41,8 +41,24 @@ gboolean gimp_plug_in_manager_register_handles_uri (GimpPlugInManager *manage
gboolean gimp_plug_in_manager_register_thumb_loader (GimpPlugInManager *manager,
const gchar *load_proc,
const gchar *thumb_proc);
gboolean gimp_plug_in_manager_file_has_exporter (GimpPlugInManager *manager,
GFile *file);
GimpPlugInProcedure *
gimp_plug_in_manager_file_procedure_find (GimpPlugInManager *manager,
GimpFileProcedureGroup group,
GFile *file,
GError **error);
GimpPlugInProcedure *
gimp_plug_in_manager_file_procedure_find_by_prefix (GimpPlugInManager *manager,
GimpFileProcedureGroup group,
GFile *file);
GimpPlugInProcedure *
gimp_plug_in_manager_file_procedure_find_by_extension (GimpPlugInManager *manager,
GimpFileProcedureGroup group,
GFile *file);
GimpPlugInProcedure *
gimp_plug_in_manager_file_procedure_find_by_mime_type (GimpPlugInManager *manager,
GimpFileProcedureGroup group,
const gchar *mime_type);
#endif /* __GIMP_PLUG_IN_MANAGER_FILE_H__ */

View File

@ -78,6 +78,39 @@ gimp_plug_in_call_mode_get_type (void)
return type;
}
GType
gimp_file_procedure_group_get_type (void)
{
static const GEnumValue values[] =
{
{ GIMP_FILE_PROCEDURE_GROUP_ANY, "GIMP_FILE_PROCEDURE_GROUP_ANY", "any" },
{ GIMP_FILE_PROCEDURE_GROUP_OPEN, "GIMP_FILE_PROCEDURE_GROUP_OPEN", "open" },
{ GIMP_FILE_PROCEDURE_GROUP_SAVE, "GIMP_FILE_PROCEDURE_GROUP_SAVE", "save" },
{ GIMP_FILE_PROCEDURE_GROUP_EXPORT, "GIMP_FILE_PROCEDURE_GROUP_EXPORT", "export" },
{ 0, NULL, NULL }
};
static const GimpEnumDesc descs[] =
{
{ GIMP_FILE_PROCEDURE_GROUP_ANY, "GIMP_FILE_PROCEDURE_GROUP_ANY", NULL },
{ GIMP_FILE_PROCEDURE_GROUP_OPEN, "GIMP_FILE_PROCEDURE_GROUP_OPEN", NULL },
{ GIMP_FILE_PROCEDURE_GROUP_SAVE, "GIMP_FILE_PROCEDURE_GROUP_SAVE", NULL },
{ GIMP_FILE_PROCEDURE_GROUP_EXPORT, "GIMP_FILE_PROCEDURE_GROUP_EXPORT", NULL },
{ 0, NULL, NULL }
};
static GType type = 0;
if (G_UNLIKELY (! type))
{
type = g_enum_register_static ("GimpFileProcedureGroup", values);
gimp_type_set_translation_context (type, "file-procedure-group");
gimp_enum_set_value_descriptions (type, descs);
}
return type;
}
/* Generated data ends here */

View File

@ -47,4 +47,17 @@ typedef enum /*< pdb-skip >*/
} GimpPlugInCallMode;
#define GIMP_TYPE_FILE_PROCEDURE_GROUP (gimp_file_procedure_group_get_type ())
GType gimp_file_procedure_group_get_type (void) G_GNUC_CONST;
typedef enum /*< pdb-skip >*/
{
GIMP_FILE_PROCEDURE_GROUP_ANY,
GIMP_FILE_PROCEDURE_GROUP_OPEN,
GIMP_FILE_PROCEDURE_GROUP_SAVE,
GIMP_FILE_PROCEDURE_GROUP_EXPORT
} GimpFileProcedureGroup;
#endif /* __PLUG_IN_ENUMS_H__ */

View File

@ -15,6 +15,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <stdlib.h>
#include <string.h>
@ -28,11 +30,18 @@
#include "dialogs/dialogs-types.h"
#include "display/gimpdisplay.h"
#include "display/gimpdisplayshell.h"
#include "display/gimpdisplayshell-scale.h"
#include "display/gimpdisplayshell-transform.h"
#include "display/gimpimagewindow.h"
#include "core/gimp.h"
#include "core/gimpchannel.h"
#include "core/gimpcontext.h"
#include "core/gimpimage.h"
#include "core/gimplayer.h"
#include "core/gimptoolinfo.h"
#include "core/gimptooloptions.h"
#include "plug-in/gimppluginmanager-file.h"
#include "file/file-open.h"
#include "file/file-save.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpdock.h"
@ -47,20 +56,11 @@
#include "widgets/gimpuimanager.h"
#include "widgets/gimpwidgets-utils.h"
#include "file/file-open.h"
#include "file/file-procedure.h"
#include "file/file-save.h"
#include "file/file-utils.h"
#include "plug-in/gimppluginmanager.h"
#include "core/gimp.h"
#include "core/gimpchannel.h"
#include "core/gimpcontext.h"
#include "core/gimpimage.h"
#include "core/gimplayer.h"
#include "core/gimptoolinfo.h"
#include "core/gimptooloptions.h"
#include "display/gimpdisplay.h"
#include "display/gimpdisplayshell.h"
#include "display/gimpdisplayshell-scale.h"
#include "display/gimpdisplayshell-transform.h"
#include "display/gimpimagewindow.h"
#include "tests.h"
@ -218,9 +218,10 @@ saved_imported_file_files (gconstpointer data)
g_object_unref (import_file);
/* Save */
proc = file_procedure_find (image->gimp->plug_in_manager->save_procs,
save_file,
NULL /*error*/);
proc = gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_SAVE,
save_file,
NULL /*error*/);
file_save (gimp,
image,
NULL /*progress*/,
@ -261,9 +262,10 @@ exported_file_files (gconstpointer data)
save_file = g_file_new_for_path (save_filename);
g_free (save_filename);
proc = file_procedure_find (image->gimp->plug_in_manager->export_procs,
save_file,
NULL /*error*/);
proc = gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_EXPORT,
save_file,
NULL /*error*/);
file_save (gimp,
image,
NULL /*progress*/,
@ -331,9 +333,10 @@ clear_import_file_after_export (gconstpointer data)
save_file = g_file_new_for_path (save_filename);
g_free (save_filename);
proc = file_procedure_find (image->gimp->plug_in_manager->export_procs,
save_file,
NULL /*error*/);
proc = gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_EXPORT,
save_file,
NULL /*error*/);
file_save (gimp,
image,
NULL /*progress*/,

View File

@ -15,10 +15,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <string.h>
#include <gegl.h>
#include <gtk/gtk.h>
#include "libgimpbase/gimpbase.h"
@ -47,11 +48,10 @@
#include "vectors/gimpbezierstroke.h"
#include "vectors/gimpvectors.h"
#include "file/file-open.h"
#include "file/file-procedure.h"
#include "file/file-save.h"
#include "plug-in/gimppluginmanager-file.h"
#include "plug-in/gimppluginmanager.h"
#include "file/file-open.h"
#include "file/file-save.h"
#include "tests.h"
@ -254,9 +254,10 @@ gimp_test_load_image (Gimp *gimp,
GimpImage *image;
GimpPDBStatusType unused;
proc = file_procedure_find (gimp->plug_in_manager->load_procs,
file,
NULL /*error*/);
proc = gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_OPEN,
file,
NULL /*error*/);
image = file_open_image (gimp,
gimp_get_user_context (gimp),
NULL /*progress*/,
@ -309,9 +310,10 @@ gimp_write_and_read_file (Gimp *gimp,
file = g_file_new_for_path (filename);
g_free (filename);
proc = file_procedure_find (image->gimp->plug_in_manager->save_procs,
file,
NULL /*error*/);
proc = gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_SAVE,
file,
NULL /*error*/);
file_save (gimp,
image,
NULL /*progress*/,
@ -807,7 +809,7 @@ gimp_assert_mainimage (GimpImage *image,
g_assert (iter == NULL);
/* Sample points, we rely on the same ordering as when we added
* them, although this ordering is not a necessaity
* them, although this ordering is not a necessity
*/
iter = gimp_image_get_sample_points (image);
g_assert (iter != NULL);

View File

@ -39,13 +39,12 @@
#include "widgets-types.h"
#include "core/gimp.h"
#include "core/gimp-utils.h"
#include "core/gimpimage.h"
#include "plug-in/gimppluginmanager.h"
#include "plug-in/gimppluginmanager-file.h"
#include "file/file-procedure.h"
#include "file/file-save.h"
#include "file/file-utils.h"
#include "gimpdnd-xds.h"
#include "gimpfiledialog.h"
@ -95,7 +94,7 @@ gimp_dnd_xds_source_set (GdkDragContext *context,
if (file)
{
GFile *xcf_file = file_utils_file_with_new_ext (file, untitled);
GFile *xcf_file = gimp_file_with_new_extension (file, untitled);
basename = g_file_get_basename (xcf_file);
g_object_unref (xcf_file);
}
@ -153,12 +152,14 @@ gimp_dnd_xds_save_image (GdkDragContext *context,
file = g_file_new_for_uri (uri);
proc = file_procedure_find (image->gimp->plug_in_manager->save_procs,
file, NULL);
proc = gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_SAVE,
file, NULL);
if (! proc)
{
proc = file_procedure_find (image->gimp->plug_in_manager->export_procs,
file, NULL);
proc = gimp_plug_in_manager_file_procedure_find (image->gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_EXPORT,
file, NULL);
export = TRUE;
}

View File

@ -31,9 +31,9 @@
#include "widgets-types.h"
#include "core/gimp.h"
#include "core/gimp-utils.h"
#include "core/gimpimage.h"
#include "file/file-utils.h"
#include "file/gimp-file.h"
#include "pdb/gimppdb.h"
@ -191,7 +191,7 @@ gimp_export_dialog_set_image (GimpExportDialog *dialog,
if (ext_file)
{
GFile *tmp_file = file_utils_file_with_new_ext (name_file, ext_file);
GFile *tmp_file = gimp_file_with_new_extension (name_file, ext_file);
basename = g_path_get_basename (gimp_file_get_utf8_name (tmp_file));
g_object_unref (tmp_file);
g_object_unref (ext_file);

View File

@ -37,9 +37,7 @@
#include "core/gimpundostack.h"
#include "core/gimp-utils.h"
#include "file/file-procedure.h"
#include "plug-in/gimppluginmanager.h"
#include "plug-in/gimppluginmanager-file.h"
#include "plug-in/gimppluginprocedure.h"
#include "gimpimagepropview.h"
@ -356,20 +354,20 @@ static void
gimp_image_prop_view_label_set_filetype (GtkWidget *label,
GimpImage *image)
{
GimpPlugInManager *manager = image->gimp->plug_in_manager;
GimpPlugInProcedure *proc;
proc = gimp_image_get_save_proc (image);
GimpPlugInProcedure *proc = gimp_image_get_save_proc (image);
if (! proc)
proc = gimp_image_get_load_proc (image);
if (! proc)
{
GFile *file = gimp_image_get_file (image);
GimpPlugInManager *manager = image->gimp->plug_in_manager;
GFile *file = gimp_image_get_file (image);
if (file)
proc = file_procedure_find (manager->load_procs, file, NULL);
proc = gimp_plug_in_manager_file_procedure_find (manager,
GIMP_FILE_PROCEDURE_GROUP_OPEN,
file, NULL);
}
gtk_label_set_text (GTK_LABEL (label),

View File

@ -31,10 +31,10 @@
#include "widgets-types.h"
#include "core/gimp.h"
#include "core/gimp-utils.h"
#include "core/gimpimage.h"
#include "core/gimpimage-metadata.h"
#include "file/file-utils.h"
#include "file/gimp-file.h"
#include "pdb/gimppdb.h"
@ -311,7 +311,7 @@ gimp_save_dialog_set_image (GimpSaveDialog *dialog,
if (ext_file)
{
GFile *tmp_file = file_utils_file_with_new_ext (name_file, ext_file);
GFile *tmp_file = gimp_file_with_new_extension (name_file, ext_file);
basename = g_path_get_basename (gimp_file_get_utf8_name (tmp_file));
g_object_unref (tmp_file);
g_object_unref (ext_file);

View File

@ -36,9 +36,7 @@
#include "core/gimpprogress.h"
#include "core/gimpsubprogress.h"
#include "plug-in/gimppluginmanager.h"
#include "file/file-procedure.h"
#include "plug-in/gimppluginmanager-file.h"
#include "gimpfiledialog.h" /* eek */
#include "gimpthumbbox.h"
@ -727,8 +725,9 @@ gimp_thumb_box_auto_thumbnail (GimpThumbBox *box)
case GIMP_THUMB_STATE_OLD:
if (thumb->image_filesize < gimp->config->thumbnail_filesize_limit &&
! gimp_thumbnail_has_failed (thumb) &&
file_procedure_find_by_extension (gimp->plug_in_manager->load_procs,
file))
gimp_plug_in_manager_file_procedure_find_by_extension (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_OPEN,
file))
{
if (thumb->image_filesize > 0)
{

View File

@ -238,7 +238,6 @@ app/display/gimpnavigationeditor.c
app/display/gimpstatusbar.c
app/file/file-open.c
app/file/file-procedure.c
app/file/file-remote.c
app/file/file-save.c
app/file/file-utils.c
@ -324,6 +323,7 @@ app/plug-in/gimpplugin-message.c
app/plug-in/gimpplugin-progress.c
app/plug-in/gimppluginmanager.c
app/plug-in/gimppluginmanager-call.c
app/plug-in/gimppluginmanager-file-procedure.c
app/plug-in/gimppluginmanager-restore.c
app/plug-in/gimppluginprocedure.c
app/plug-in/gimppluginprocframe.c

View File

@ -65,8 +65,9 @@ HELP
return gimp_procedure_get_return_values (procedure, FALSE,
error ? *error : NULL);
file_proc = file_procedure_find (gimp->plug_in_manager->load_procs,
file, error);
file_proc = gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_OPEN,
file, error);
if (! file_proc)
{
@ -300,12 +301,14 @@ HELP
return gimp_procedure_get_return_values (procedure, FALSE,
error ? *error : NULL);
file_proc = file_procedure_find (gimp->plug_in_manager->save_procs,
file, NULL);
file_proc = gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_SAVE,
file, NULL);
if (! file_proc)
file_proc = file_procedure_find (gimp->plug_in_manager->export_procs,
file, error);
file_proc = gimp_plug_in_manager_file_procedure_find (gimp->plug_in_manager,
GIMP_FILE_PROCEDURE_GROUP_EXPORT,
file, error);
if (! file_proc)
{
@ -688,12 +691,10 @@ CODE
"libgimpconfig/gimpconfig.h"
"core/gimp.h"
"core/gimp-utils.h"
"plug-in/gimppluginmanager.h"
"plug-in/gimppluginmanager-file.h"
"plug-in/gimppluginprocedure.h"
"file/file-open.h"
"file/file-save.h"
"file/file-procedure.h"
"file/file-utils.h");
@procs = qw(file_load