[gimp] app: change the image's various URIs to GFiles
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: change the image's various URIs to GFiles
- Date: Mon, 7 Jul 2014 22:01:23 +0000 (UTC)
commit ff6ea695694522655c442072d8bb7be5981176e4
Author: Michael Natterer <mitch gimp org>
Date: Mon Jul 7 23:56:56 2014 +0200
app: change the image's various URIs to GFiles
which gets rid of a lot of temporarily added GFile code again because
we don't need to convert between URI and GFile any longer.
app/actions/debug-commands.c | 2 +-
app/actions/file-actions.c | 15 +-
app/actions/file-commands.c | 64 ++------
app/core/gimpimage-duplicate.c | 80 +++++-----
app/core/gimpimage.c | 282 +++++++++++++++++--------------
app/core/gimpimage.h | 36 ++--
app/dialogs/file-save-dialog.c | 6 +-
app/dialogs/quit-dialog.c | 15 +-
app/display/gimpdisplayshell-close.c | 26 ++--
app/display/gimpdisplayshell-handlers.c | 19 +--
app/file/file-open.c | 18 +--
app/file/file-save.c | 12 +-
app/file/file-utils.c | 73 +++++---
app/file/file-utils.h | 4 +-
app/pdb/image-cmds.c | 22 ++-
app/widgets/gimpfiledialog.c | 252 ++++++++++------------------
app/widgets/gimpimagepropview.c | 30 +---
tools/pdbgen/pdb/image.pdb | 22 ++-
18 files changed, 450 insertions(+), 528 deletions(-)
---
diff --git a/app/actions/debug-commands.c b/app/actions/debug-commands.c
index a7b1f6c..de26878 100644
--- a/app/actions/debug-commands.c
+++ b/app/actions/debug-commands.c
@@ -340,7 +340,7 @@ debug_show_image_graph (GimpImage *source_image)
GIMP_RGB,
GIMP_PRECISION_U8_GAMMA,
FALSE);
- gimp_image_set_uri (new_image, new_name);
+ gimp_image_set_file (new_image, g_file_new_for_uri (new_name));
layer = gimp_layer_new_from_buffer (buffer,
new_image,
gimp_image_get_layer_format (new_image,
diff --git a/app/actions/file-actions.c b/app/actions/file-actions.c
index deef271..756ccb3 100644
--- a/app/actions/file-actions.c
+++ b/app/actions/file-actions.c
@@ -256,23 +256,18 @@ file_actions_update (GimpActionGroup *group,
Gimp *gimp = action_data_get_gimp (data);
GimpImage *image = action_data_get_image (data);
GimpDrawable *drawable = NULL;
+ GFile *file = NULL;
GFile *source = NULL;
GFile *export = NULL;
gboolean show_overwrite = FALSE;
if (image)
{
- const gchar *uri;
-
drawable = gimp_image_get_active_drawable (image);
- uri = gimp_image_get_imported_uri (image);
- if (uri)
- source = g_file_new_for_uri (uri);
-
- uri = gimp_image_get_exported_uri (image);
- if (uri)
- export = g_file_new_for_uri (uri);
+ file = gimp_image_get_file (image);
+ source = gimp_image_get_imported_file (image);
+ export = gimp_image_get_exported_file (image);
}
show_overwrite =
@@ -289,7 +284,7 @@ file_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("file-save-as", drawable);
SET_SENSITIVE ("file-save-a-copy", drawable);
SET_SENSITIVE ("file-save-and-close", drawable);
- SET_SENSITIVE ("file-revert", image && (gimp_image_get_uri (image) || source));
+ SET_SENSITIVE ("file-revert", image && (file || source));
SET_SENSITIVE ("file-export", drawable);
SET_VISIBLE ("file-export", ! show_overwrite);
SET_SENSITIVE ("file-overwrite", show_overwrite);
diff --git a/app/actions/file-commands.c b/app/actions/file-commands.c
index c285070..ca3467e 100644
--- a/app/actions/file-commands.c
+++ b/app/actions/file-commands.c
@@ -226,7 +226,6 @@ file_save_cmd_callback (GtkAction *action,
GimpImage *image;
GtkWidget *widget;
GimpSaveMode save_mode;
- const gchar *uri;
GFile *file = NULL;
gboolean saved = FALSE;
return_if_no_gimp (gimp, data);
@@ -240,10 +239,7 @@ file_save_cmd_callback (GtkAction *action,
if (! gimp_image_get_active_drawable (image))
return;
- uri = gimp_image_get_uri (image);
-
- if (uri)
- file = g_file_new_for_uri (uri);
+ file = gimp_image_get_file (image);
switch (save_mode)
{
@@ -303,17 +299,16 @@ file_save_cmd_callback (GtkAction *action,
case GIMP_SAVE_MODE_EXPORT:
case GIMP_SAVE_MODE_OVERWRITE:
{
- const gchar *uri = NULL;
GFile *file = NULL;
GimpPlugInProcedure *export_proc = NULL;
gboolean overwrite = FALSE;
if (save_mode == GIMP_SAVE_MODE_EXPORT)
{
- uri = gimp_image_get_exported_uri (image);
+ file = gimp_image_get_exported_file (image);
export_proc = gimp_image_get_export_proc (image);
- if (! uri)
+ if (! file)
{
/* Behave as if Export As... was invoked */
file_export_dialog_show (gimp, image, widget);
@@ -324,14 +319,11 @@ file_save_cmd_callback (GtkAction *action,
}
else if (save_mode == GIMP_SAVE_MODE_OVERWRITE)
{
- uri = gimp_image_get_imported_uri (image);
+ file = gimp_image_get_imported_file (image);
overwrite = TRUE;
}
- if (uri)
- file = g_file_new_for_uri (uri);
-
if (file && ! export_proc)
{
export_proc =
@@ -349,9 +341,6 @@ file_save_cmd_callback (GtkAction *action,
overwrite, ! overwrite,
TRUE);
}
-
- if (file)
- g_object_unref (file);
}
break;
}
@@ -393,19 +382,19 @@ file_revert_cmd_callback (GtkAction *action,
GimpDisplay *display;
GimpImage *image;
GtkWidget *dialog;
- const gchar *uri;
+ GFile *file;
return_if_no_display (display, data);
image = gimp_display_get_image (display);
- uri = gimp_image_get_uri (image);
+ file = gimp_image_get_file (image);
- if (! uri)
- uri = gimp_image_get_imported_uri (image);
+ if (! file)
+ file = gimp_image_get_imported_file (image);
dialog = g_object_get_data (G_OBJECT (image), REVERT_DATA_KEY);
- if (! uri)
+ if (! file)
{
gimp_message_literal (image->gimp,
G_OBJECT (display), GIMP_MESSAGE_ERROR,
@@ -418,8 +407,6 @@ file_revert_cmd_callback (GtkAction *action,
}
else
{
- gchar *filename;
-
dialog =
gimp_message_dialog_new (_("Revert Image"), "document-revert",
GTK_WIDGET (gimp_display_get_shell (display)),
@@ -444,13 +431,10 @@ file_revert_cmd_callback (GtkAction *action,
G_CALLBACK (file_revert_confirm_response),
display);
- filename = file_utils_uri_display_name (uri);
-
gimp_message_box_set_primary_text (GIMP_MESSAGE_DIALOG (dialog)->box,
_("Revert '%s' to '%s'?"),
gimp_image_get_display_name (image),
- filename);
- g_free (filename);
+ gimp_file_get_utf8_name (file));
gimp_message_box_set_text (GIMP_MESSAGE_DIALOG (dialog)->box,
_("By reverting the image to the state saved "
@@ -531,19 +515,11 @@ file_open_dialog_show (Gimp *gimp,
if (dialog)
{
if (! file && image)
- {
- const gchar *uri = gimp_image_get_uri (image);
- if (uri)
- file = g_file_new_for_uri (uri);
- }
+ file = gimp_image_get_file (image);
if (! file)
- {
- file = g_object_get_data (G_OBJECT (gimp),
- GIMP_FILE_OPEN_LAST_FILE_KEY);
- if (file)
- g_object_ref (file);
- }
+ file = g_object_get_data (G_OBJECT (gimp),
+ GIMP_FILE_OPEN_LAST_FILE_KEY);
if (file)
gtk_file_chooser_set_file (GTK_FILE_CHOOSER (dialog), file, NULL);
@@ -559,9 +535,6 @@ file_open_dialog_show (Gimp *gimp,
gtk_window_present (GTK_WINDOW (dialog));
}
-
- if (file)
- g_object_unref (file);
}
static GtkWidget *
@@ -780,17 +753,14 @@ file_revert_confirm_response (GtkWidget *dialog,
{
Gimp *gimp = old_image->gimp;
GimpImage *new_image;
- const gchar *uri;
GFile *file;
GimpPDBStatusType status;
GError *error = NULL;
- uri = gimp_image_get_uri (old_image);
+ file = gimp_image_get_file (old_image);
- if (! uri)
- uri = gimp_image_get_imported_uri (old_image);
-
- file = g_file_new_for_uri (uri);
+ if (! file)
+ file = gimp_image_get_imported_file (old_image);
new_image = file_open_image (gimp, gimp_get_user_context (gimp),
GIMP_PROGRESS (display),
@@ -813,7 +783,5 @@ file_revert_confirm_response (GtkWidget *dialog,
gimp_file_get_utf8_name (file), error->message);
g_clear_error (&error);
}
-
- g_object_unref (file);
}
}
diff --git a/app/core/gimpimage-duplicate.c b/app/core/gimpimage-duplicate.c
index 2219f44..da4469b 100644
--- a/app/core/gimpimage-duplicate.c
+++ b/app/core/gimpimage-duplicate.c
@@ -46,38 +46,38 @@
#include "vectors/gimpvectors.h"
-static void gimp_image_duplicate_resolution (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_save_source_uri (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_colormap (GimpImage *image,
- GimpImage *new_image);
-static GimpItem * gimp_image_duplicate_item (GimpItem *item,
- GimpImage *new_image);
-static GimpLayer * gimp_image_duplicate_layers (GimpImage *image,
- GimpImage *new_image);
-static GimpChannel * gimp_image_duplicate_channels (GimpImage *image,
- GimpImage *new_image);
-static GimpVectors * gimp_image_duplicate_vectors (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_floating_sel (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_mask (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_components (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_guides (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_sample_points (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_grid (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_metadata (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_quick_mask (GimpImage *image,
- GimpImage *new_image);
-static void gimp_image_duplicate_parasites (GimpImage *image,
- GimpImage *new_image);
+static void gimp_image_duplicate_resolution (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_save_source_file (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_colormap (GimpImage *image,
+ GimpImage *new_image);
+static GimpItem * gimp_image_duplicate_item (GimpItem *item,
+ GimpImage *new_image);
+static GimpLayer * gimp_image_duplicate_layers (GimpImage *image,
+ GimpImage *new_image);
+static GimpChannel * gimp_image_duplicate_channels (GimpImage *image,
+ GimpImage *new_image);
+static GimpVectors * gimp_image_duplicate_vectors (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_floating_sel (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_mask (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_components (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_guides (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_sample_points (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_grid (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_metadata (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_quick_mask (GimpImage *image,
+ GimpImage *new_image);
+static void gimp_image_duplicate_parasites (GimpImage *image,
+ GimpImage *new_image);
GimpImage *
@@ -102,8 +102,7 @@ gimp_image_duplicate (GimpImage *image)
gimp_image_undo_disable (new_image);
/* Store the source uri to be used by the save dialog */
- gimp_image_duplicate_save_source_uri (image, new_image);
-
+ gimp_image_duplicate_save_source_file (image, new_image);
/* Copy the colormap if necessary */
gimp_image_duplicate_colormap (image, new_image);
@@ -175,12 +174,15 @@ gimp_image_duplicate_resolution (GimpImage *image,
}
static void
-gimp_image_duplicate_save_source_uri (GimpImage *image,
- GimpImage *new_image)
+gimp_image_duplicate_save_source_file (GimpImage *image,
+ GimpImage *new_image)
{
- g_object_set_data_full (G_OBJECT (new_image), "gimp-image-source-uri",
- g_strdup (gimp_image_get_uri (image)),
- (GDestroyNotify) g_free);
+ GFile *file = gimp_image_get_file (image);
+
+ if (file)
+ g_object_set_data_full (G_OBJECT (new_image), "gimp-image-source-file",
+ g_object_ref (file),
+ (GDestroyNotify) g_object_unref);
}
static void
diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c
index aa22707..c1a83d5 100644
--- a/app/core/gimpimage.c
+++ b/app/core/gimpimage.c
@@ -86,11 +86,6 @@
#define TRC(x)
#endif
-/* Data keys for GimpImage */
-#define GIMP_FILE_EXPORT_URI_KEY "gimp-file-export-uri"
-#define GIMP_FILE_SAVE_A_COPY_URI_KEY "gimp-file-save-a-copy-uri"
-#define GIMP_FILE_IMPORT_SOURCE_URI_KEY "gimp-file-import-source-uri"
-
enum
{
@@ -419,9 +414,9 @@ gimp_image_class_init (GimpImageClass *klass)
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpImageClass, saved),
NULL, NULL,
- gimp_marshal_VOID__STRING,
+ gimp_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
- G_TYPE_STRING);
+ G_TYPE_FILE);
gimp_image_signals[EXPORTED] =
g_signal_new ("exported",
@@ -429,9 +424,9 @@ gimp_image_class_init (GimpImageClass *klass)
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpImageClass, exported),
NULL, NULL,
- gimp_marshal_VOID__STRING,
+ gimp_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
- G_TYPE_STRING);
+ G_TYPE_FILE);
gimp_image_signals[GUIDE_ADDED] =
g_signal_new ("guide-added",
@@ -1086,7 +1081,19 @@ gimp_image_name_changed (GimpObject *object)
*/
name = gimp_object_get_name (object);
if (name && strlen (name) == 0)
- gimp_object_name_free (object);
+ {
+ gimp_object_name_free (object);
+ name = NULL;
+ }
+
+ if (private->file)
+ {
+ g_object_unref (private->file);
+ private->file = NULL;
+ }
+
+ if (name)
+ private->file = g_file_new_for_uri (name);
}
static gint64
@@ -1809,12 +1816,22 @@ gimp_image_get_by_ID (Gimp *gimp,
}
void
-gimp_image_set_uri (GimpImage *image,
- const gchar *uri)
+gimp_image_set_file (GimpImage *image,
+ GFile *file)
{
g_return_if_fail (GIMP_IS_IMAGE (image));
+ g_return_if_fail (file == NULL || G_IS_FILE (file));
- gimp_object_set_name (GIMP_OBJECT (image), uri);
+ if (file)
+ {
+ gchar *uri = g_file_get_uri (file);
+ gimp_object_set_name (GIMP_OBJECT (image), uri);
+ g_free (uri);
+ }
+ else
+ {
+ gimp_object_set_name (GIMP_OBJECT (image), NULL);
+ }
}
static void
@@ -1851,25 +1868,25 @@ gimp_image_get_uri_or_untitled (const GimpImage *image)
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
- uri = gimp_image_get_uri (image);
+ uri = gimp_object_get_name (image);
return uri ? uri : gimp_image_get_string_untitled ();
}
/**
- * gimp_image_get_uri:
+ * gimp_image_get_file:
* @image: A #GimpImage.
*
- * Get the URI of the XCF image, or NULL if there is no URI.
+ * Get the file of the XCF image, or NULL if there is no file.
*
- * Returns: The URI, or NULL.
+ * Returns: The file, or NULL.
**/
-const gchar *
-gimp_image_get_uri (const GimpImage *image)
+GFile *
+gimp_image_get_file (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
- return gimp_object_get_name (image);
+ return GIMP_IMAGE_GET_PRIVATE (image)->file;
}
void
@@ -1887,132 +1904,148 @@ gimp_image_set_filename (GimpImage *image,
}
else
{
- gimp_image_set_uri (image, NULL);
+ gimp_image_set_file (image, NULL);
}
}
/**
- * gimp_image_get_imported_uri:
+ * gimp_image_get_imported_file:
* @image: A #GimpImage.
*
- * Returns: The URI of the imported image, or NULL if the image has
+ * Returns: The file of the imported image, or NULL if the image has
* been saved as XCF after it was imported.
**/
-const gchar *
-gimp_image_get_imported_uri (const GimpImage *image)
+GFile *
+gimp_image_get_imported_file (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
- return g_object_get_data (G_OBJECT (image),
- GIMP_FILE_IMPORT_SOURCE_URI_KEY);
+ return GIMP_IMAGE_GET_PRIVATE (image)->imported_file;
}
/**
- * gimp_image_get_exported_uri:
+ * gimp_image_get_exported_file:
* @image: A #GimpImage.
*
- * Returns: The URI of the image last exported from this XCF file, or
+ * Returns: The file of the image last exported from this XCF file, or
* NULL if the image has never been exported.
**/
-const gchar *
-gimp_image_get_exported_uri (const GimpImage *image)
+GFile *
+gimp_image_get_exported_file (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
- return g_object_get_data (G_OBJECT (image),
- GIMP_FILE_EXPORT_URI_KEY);
+ return GIMP_IMAGE_GET_PRIVATE (image)->exported_file;
}
/**
- * gimp_image_get_save_a_copy_uri:
+ * gimp_image_get_save_a_copy_file:
* @image: A #GimpImage.
*
* Returns: The URI of the last copy that was saved of this XCF file.
**/
-const gchar *
-gimp_image_get_save_a_copy_uri (const GimpImage *image)
+GFile *
+gimp_image_get_save_a_copy_file (const GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
- return g_object_get_data (G_OBJECT (image),
- GIMP_FILE_SAVE_A_COPY_URI_KEY);
+ return GIMP_IMAGE_GET_PRIVATE (image)->save_a_copy_file;
}
/**
- * gimp_image_get_any_uri:
+ * gimp_image_get_any_file:
* @image: A #GimpImage.
*
- * Returns: The XCF file URI, the imported file URI, or the exported
- * file URI, in that order of precedence.
+ * Returns: The XCF file, the imported file, or the exported file, in
+ * that order of precedence.
**/
-const gchar *
-gimp_image_get_any_uri (const GimpImage *image)
+GFile *
+gimp_image_get_any_file (const GimpImage *image)
{
- const gchar *uri;
+ GFile *file;
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
- uri = gimp_image_get_uri (image);
- if (! uri)
+ file = gimp_image_get_file (image);
+ if (! file)
{
- uri = gimp_image_get_imported_uri (image);
- if (! uri)
+ file = gimp_image_get_imported_file (image);
+ if (! file)
{
- uri = gimp_image_get_exported_uri (image);
+ file = gimp_image_get_exported_file (image);
}
}
- return uri;
+ return file;
}
/**
* gimp_image_set_imported_uri:
* @image: A #GimpImage.
- * @uri:
+ * @file:
*
* Sets the URI this file was imported from.
**/
void
-gimp_image_set_imported_uri (GimpImage *image,
- const gchar *uri)
+gimp_image_set_imported_file (GimpImage *image,
+ GFile *file)
{
+ GimpImagePrivate *private;
+
g_return_if_fail (GIMP_IS_IMAGE (image));
+ g_return_if_fail (file == NULL || G_IS_FILE (file));
- if (gimp_image_get_imported_uri (image) == uri)
- return;
+ private = GIMP_IMAGE_GET_PRIVATE (image);
- g_object_set_data_full (G_OBJECT (image), GIMP_FILE_IMPORT_SOURCE_URI_KEY,
- g_strdup (uri), (GDestroyNotify) g_free);
+ if (private->imported_file != file)
+ {
+ if (private->imported_file)
+ g_object_unref (private->imported_file);
- gimp_object_name_changed (GIMP_OBJECT (image));
+ private->imported_file = file;
+
+ if (private->imported_file)
+ g_object_ref (private->imported_file);
+
+ gimp_object_name_changed (GIMP_OBJECT (image));
+ }
}
/**
- * gimp_image_set_exported_uri:
+ * gimp_image_set_exported_file:
* @image: A #GimpImage.
- * @uri:
+ * @file:
*
- * Sets the URI this file was last exported to. Note that saving as
+ * Sets the file this image was last exported to. Note that saving as
* XCF is not "exporting".
**/
void
-gimp_image_set_exported_uri (GimpImage *image,
- const gchar *uri)
+gimp_image_set_exported_file (GimpImage *image,
+ GFile *file)
{
+ GimpImagePrivate *private;
+
g_return_if_fail (GIMP_IS_IMAGE (image));
+ g_return_if_fail (file == NULL || G_IS_FILE (file));
- if (gimp_image_get_exported_uri (image) == uri)
- return;
+ private = GIMP_IMAGE_GET_PRIVATE (image);
+
+ if (private->exported_file != file)
+ {
+ if (private->exported_file)
+ g_object_unref (private->exported_file);
+
+ private->exported_file = file;
- g_object_set_data_full (G_OBJECT (image),
- GIMP_FILE_EXPORT_URI_KEY,
- g_strdup (uri), (GDestroyNotify) g_free);
+ if (private->exported_file)
+ g_object_ref (private->exported_file);
- gimp_object_name_changed (GIMP_OBJECT (image));
+ gimp_object_name_changed (GIMP_OBJECT (image));
+ }
}
/**
- * gimp_image_set_save_a_copy_uri:
+ * gimp_image_set_save_a_copy_file:
* @image: A #GimpImage.
* @uri:
*
@@ -2020,32 +2053,41 @@ gimp_image_set_exported_uri (GimpImage *image,
* "save a copy" action.
**/
void
-gimp_image_set_save_a_copy_uri (GimpImage *image,
- const gchar *uri)
+gimp_image_set_save_a_copy_file (GimpImage *image,
+ GFile *file)
{
+ GimpImagePrivate *private;
+
g_return_if_fail (GIMP_IS_IMAGE (image));
+ g_return_if_fail (file == NULL || G_IS_FILE (file));
- if (gimp_image_get_save_a_copy_uri (image) == uri)
- return;
+ private = GIMP_IMAGE_GET_PRIVATE (image);
+
+ if (private->save_a_copy_file != file)
+ {
+ if (private->save_a_copy_file)
+ g_object_unref (private->save_a_copy_file);
+
+ private->save_a_copy_file = file;
- g_object_set_data_full (G_OBJECT (image),
- GIMP_FILE_SAVE_A_COPY_URI_KEY,
- g_strdup (uri), (GDestroyNotify) g_free);
+ if (private->save_a_copy_file)
+ g_object_ref (private->save_a_copy_file);
+ }
}
gchar *
gimp_image_get_filename (const GimpImage *image)
{
- const gchar *uri;
+ GFile *file;
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
- uri = gimp_image_get_uri (image);
+ file = gimp_image_get_file (image);
- if (! uri)
+ if (! file)
return NULL;
- return g_filename_from_uri (uri, NULL, NULL);
+ return g_file_get_path (file);
}
static gchar *
@@ -2054,9 +2096,10 @@ gimp_image_format_display_uri (GimpImage *image,
{
const gchar *uri_format = NULL;
const gchar *export_status = NULL;
- const gchar *uri;
- const gchar *source;
- const gchar *dest;
+ GFile *file = NULL;
+ GFile *source = NULL;
+ GFile *dest = NULL;
+ GFile *display_file = NULL;
gboolean is_imported;
gboolean is_exported;
gchar *display_uri = NULL;
@@ -2065,29 +2108,29 @@ gimp_image_format_display_uri (GimpImage *image,
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
- uri = gimp_image_get_uri (image);
- source = gimp_image_get_imported_uri (image);
- dest = gimp_image_get_exported_uri (image);
+ file = gimp_image_get_file (image);
+ source = gimp_image_get_imported_file (image);
+ dest = gimp_image_get_exported_file (image);
is_imported = (source != NULL);
is_exported = (dest != NULL);
- if (uri)
+ if (file)
{
- display_uri = g_strdup (uri);
- uri_format = "%s";
+ display_file = g_object_ref (file);
+ uri_format = "%s";
}
else
{
if (is_imported)
- display_uri = g_strdup (source);
+ display_file = source;
/* Calculate filename suffix */
if (! gimp_image_is_export_dirty (image))
{
if (is_exported)
{
- display_uri = g_strdup (dest);
+ display_file = dest;
export_status = _(" (exported)");
}
else if (is_imported)
@@ -2104,32 +2147,21 @@ gimp_image_format_display_uri (GimpImage *image,
export_status = _(" (imported)");
}
- if (display_uri)
- {
- gchar *tmp = file_utils_uri_with_new_ext (display_uri, NULL);
- g_free (display_uri);
- display_uri = tmp;
- }
+ if (display_file)
+ display_file = file_utils_file_with_new_ext (display_file, NULL);
uri_format = "[%s]";
}
- if (! display_uri)
- {
- display_uri = g_strdup (gimp_image_get_string_untitled ());
- }
- else if (basename)
- {
- tmp = file_utils_uri_display_basename (display_uri);
- g_free (display_uri);
- display_uri = tmp;
- }
+ if (! display_file)
+ display_file = g_file_new_for_uri (gimp_image_get_string_untitled ());
+
+ if (basename)
+ display_uri = g_path_get_basename (gimp_file_get_utf8_name (display_file));
else
- {
- tmp = file_utils_uri_display_name (display_uri);
- g_free (display_uri);
- display_uri = tmp;
- }
+ display_uri = g_strdup (gimp_file_get_utf8_name (display_file));
+
+ g_object_unref (display_file);
format_string = g_strconcat (uri_format, export_status, NULL);
@@ -3015,37 +3047,37 @@ gimp_image_get_dirty_time (const GimpImage *image)
/**
* gimp_image_saved:
* @image:
- * @uri:
+ * @file:
*
* Emits the "saved" signal, indicating that @image was saved to the
- * location specified by @uri.
+ * location specified by @file.
*/
void
-gimp_image_saved (GimpImage *image,
- const gchar *uri)
+gimp_image_saved (GimpImage *image,
+ GFile *file)
{
g_return_if_fail (GIMP_IS_IMAGE (image));
- g_return_if_fail (uri != NULL);
+ g_return_if_fail (G_IS_FILE (file));
- g_signal_emit (image, gimp_image_signals[SAVED], 0, uri);
+ g_signal_emit (image, gimp_image_signals[SAVED], 0, file);
}
/**
* gimp_image_exported:
* @image:
- * @uri:
+ * @file:
*
* Emits the "exported" signal, indicating that @image was exported to the
- * location specified by @uri.
+ * location specified by @file.
*/
void
-gimp_image_exported (GimpImage *image,
- const gchar *uri)
+gimp_image_exported (GimpImage *image,
+ GFile *file)
{
g_return_if_fail (GIMP_IS_IMAGE (image));
- g_return_if_fail (uri != NULL);
+ g_return_if_fail (G_IS_FILE (file));
- g_signal_emit (image, gimp_image_signals[EXPORTED], 0, uri);
+ g_signal_emit (image, gimp_image_signals[EXPORTED], 0, file);
}
diff --git a/app/core/gimpimage.h b/app/core/gimpimage.h
index bc0900f..87c8532 100644
--- a/app/core/gimpimage.h
+++ b/app/core/gimpimage.h
@@ -74,9 +74,9 @@ struct _GimpImageClass
void (* dirty) (GimpImage *image,
GimpDirtyMask dirty_mask);
void (* saved) (GimpImage *image,
- const gchar *uri);
+ GFile *file);
void (* exported) (GimpImage *image,
- const gchar *uri);
+ GFile *file);
void (* guide_added) (GimpImage *image,
GimpGuide *guide);
@@ -132,21 +132,21 @@ gint gimp_image_get_ID (const GimpImage *image);
GimpImage * gimp_image_get_by_ID (Gimp *gimp,
gint id);
-const gchar * gimp_image_get_uri (const GimpImage *image);
+GFile * gimp_image_get_file (const GimpImage *image);
const gchar * gimp_image_get_uri_or_untitled (const GimpImage *image);
-const gchar * gimp_image_get_imported_uri (const GimpImage *image);
-const gchar * gimp_image_get_exported_uri (const GimpImage *image);
-const gchar * gimp_image_get_save_a_copy_uri (const GimpImage *image);
-const gchar * gimp_image_get_any_uri (const GimpImage *image);
-
-void gimp_image_set_uri (GimpImage *image,
- const gchar *uri);
-void gimp_image_set_imported_uri (GimpImage *image,
- const gchar *uri);
-void gimp_image_set_exported_uri (GimpImage *image,
- const gchar *uri);
-void gimp_image_set_save_a_copy_uri (GimpImage *image,
- const gchar *uri);
+GFile * gimp_image_get_imported_file (const GimpImage *image);
+GFile * gimp_image_get_exported_file (const GimpImage *image);
+GFile * gimp_image_get_save_a_copy_file (const GimpImage *image);
+GFile * gimp_image_get_any_file (const GimpImage *image);
+
+void gimp_image_set_file (GimpImage *image,
+ GFile *file);
+void gimp_image_set_imported_file (GimpImage *image,
+ GFile *file);
+void gimp_image_set_exported_file (GimpImage *image,
+ GFile *file);
+void gimp_image_set_save_a_copy_file (GimpImage *image,
+ GFile *file);
void gimp_image_set_filename (GimpImage *image,
const gchar *filename);
@@ -162,12 +162,12 @@ void gimp_image_set_save_proc (GimpImage *image,
GimpPlugInProcedure *proc);
GimpPlugInProcedure * gimp_image_get_save_proc (const GimpImage *image);
void gimp_image_saved (GimpImage *image,
- const gchar *uri);
+ GFile *file);
void gimp_image_set_export_proc (GimpImage *image,
GimpPlugInProcedure *proc);
GimpPlugInProcedure * gimp_image_get_export_proc (const GimpImage *image);
void gimp_image_exported (GimpImage *image,
- const gchar *uri);
+ GFile *file);
void gimp_image_set_resolution (GimpImage *image,
gdouble xres,
diff --git a/app/dialogs/file-save-dialog.c b/app/dialogs/file-save-dialog.c
index 416aa44..fcb23bb 100644
--- a/app/dialogs/file-save-dialog.c
+++ b/app/dialogs/file-save-dialog.c
@@ -214,11 +214,7 @@ file_save_dialog_response (GtkWidget *save_dialog,
* file_save()
*/
if (dialog->save_a_copy)
- {
- gchar *uri = g_file_get_uri (file);
- gimp_image_set_save_a_copy_uri (dialog->image, uri);
- g_free (uri);
- }
+ gimp_image_set_save_a_copy_file (dialog->image, file);
if (! dialog->export)
g_object_set_data_full (G_OBJECT (dialog->image->gimp),
diff --git a/app/dialogs/quit-dialog.c b/app/dialogs/quit-dialog.c
index 10fdde0..b861421 100644
--- a/app/dialogs/quit-dialog.c
+++ b/app/dialogs/quit-dialog.c
@@ -22,6 +22,7 @@
#include <gegl.h>
#include <gtk/gtk.h>
+#include "libgimpbase/gimpbase.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "dialogs-types.h"
@@ -403,24 +404,22 @@ quit_close_all_dialog_name_cell_func (GtkTreeViewColumn *tree_column,
}
else
{
- const gchar *uri;
- gchar *filename;
+ GFile *file;
+ const gchar *filename;
gchar *escaped_name;
gchar *escaped_filename;
gchar *exported;
gchar *markup;
- uri = gimp_image_get_exported_uri (image);
- if (! uri)
- uri = gimp_image_get_imported_uri (image);
+ file = gimp_image_get_exported_file (image);
+ if (! file)
+ file = gimp_image_get_imported_file (image);
- filename = file_utils_uri_to_utf8_filename (uri);
+ filename = gimp_file_get_utf8_name (file);
escaped_name = g_markup_escape_text (name, -1);
escaped_filename = g_markup_escape_text (filename, -1);
- g_free (filename);
-
exported = g_strdup_printf (_("Exported to %s"), escaped_filename);
markup = g_strdup_printf ("%s\n<i>%s</i>", escaped_name, exported);
g_free (exported);
diff --git a/app/display/gimpdisplayshell-close.c b/app/display/gimpdisplayshell-close.c
index aa51239..effaf79 100644
--- a/app/display/gimpdisplayshell-close.c
+++ b/app/display/gimpdisplayshell-close.c
@@ -22,6 +22,7 @@
#include <gegl.h>
#include <gtk/gtk.h>
+#include "libgimpbase/gimpbase.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "display-types.h"
@@ -56,7 +57,7 @@ static void gimp_display_shell_close_dialog (GimpDisplayShell *shell,
static void gimp_display_shell_close_name_changed (GimpImage *image,
GimpMessageBox *box);
static void gimp_display_shell_close_exported (GimpImage *image,
- const gchar *uri,
+ GFile *file,
GimpMessageBox *box);
static gboolean gimp_display_shell_close_time_changed (GimpMessageBox *box);
static void gimp_display_shell_close_response (GtkWidget *widget,
@@ -156,7 +157,7 @@ gimp_display_shell_close_dialog (GimpDisplayShell *shell,
gchar *accel_string;
gchar *hint;
gchar *markup;
- const gchar *uri;
+ GFile *file;
if (shell->close_dialog)
{
@@ -164,7 +165,7 @@ gimp_display_shell_close_dialog (GimpDisplayShell *shell,
return;
}
- uri = gimp_image_get_uri (image);
+ file = gimp_image_get_file (image);
title = g_strdup_printf (_("Close %s"), gimp_image_get_display_name (image));
@@ -179,7 +180,7 @@ gimp_display_shell_close_dialog (GimpDisplayShell *shell,
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
_("_Discard Changes"), GTK_RESPONSE_CLOSE,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- (uri ?
+ (file ?
GTK_STOCK_SAVE :
GTK_STOCK_SAVE_AS), RESPONSE_SAVE,
NULL);
@@ -281,7 +282,7 @@ gimp_display_shell_close_name_changed (GimpImage *image,
static void
gimp_display_shell_close_exported (GimpImage *image,
- const gchar *uri,
+ GFile *file,
GimpMessageBox *box)
{
gimp_display_shell_close_time_changed (box);
@@ -342,19 +343,14 @@ gimp_display_shell_close_time_changed (GimpMessageBox *box)
if (! gimp_image_is_export_dirty (image))
{
- const gchar *uri;
- gchar *filename;
+ GFile *file;
- uri = gimp_image_get_exported_uri (image);
- if (! uri)
- uri = gimp_image_get_imported_uri (image);
-
- filename = file_utils_uri_to_utf8_filename (uri);
+ file = gimp_image_get_exported_file (image);
+ if (! file)
+ file = gimp_image_get_imported_file (image);
export_text = g_strdup_printf (_("The image has been exported to '%s'."),
- filename);
-
- g_free (filename);
+ gimp_file_get_utf8_name (file));
}
if (time_text && export_text)
diff --git a/app/display/gimpdisplayshell-handlers.c b/app/display/gimpdisplayshell-handlers.c
index 44cf989..6f11d3b 100644
--- a/app/display/gimpdisplayshell-handlers.c
+++ b/app/display/gimpdisplayshell-handlers.c
@@ -20,6 +20,7 @@
#include <gegl.h>
#include <gtk/gtk.h>
+#include "libgimpbase/gimpbase.h"
#include "libgimpcolor/gimpcolor.h"
#include "libgimpmath/gimpmath.h"
#include "libgimpwidgets/gimpwidgets.h"
@@ -43,8 +44,6 @@
#include "vectors/gimpvectors.h"
-#include "file/file-utils.h"
-
#include "widgets/gimpwidgets-utils.h"
#include "gimpcanvasguide.h"
@@ -120,10 +119,10 @@ static void gimp_display_shell_invalidate_preview_handler (GimpImage *i
static void gimp_display_shell_profile_changed_handler (GimpColorManaged *image,
GimpDisplayShell *shell);
static void gimp_display_shell_saved_handler (GimpImage *image,
- const gchar *uri,
+ GFile *file,
GimpDisplayShell *shell);
static void gimp_display_shell_exported_handler (GimpImage *image,
- const gchar *uri,
+ GFile *file,
GimpDisplayShell *shell);
static void gimp_display_shell_active_vectors_handler (GimpImage *image,
@@ -786,30 +785,26 @@ gimp_display_shell_profile_changed_handler (GimpColorManaged *image,
static void
gimp_display_shell_saved_handler (GimpImage *image,
- const gchar *uri,
+ GFile *file,
GimpDisplayShell *shell)
{
GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell);
- gchar *filename = file_utils_uri_display_name (uri);
gimp_statusbar_push_temp (statusbar, GIMP_MESSAGE_INFO,
"document-save", _("Image saved to '%s'"),
- filename);
- g_free (filename);
+ gimp_file_get_utf8_name (file));
}
static void
gimp_display_shell_exported_handler (GimpImage *image,
- const gchar *uri,
+ GFile *file,
GimpDisplayShell *shell)
{
GimpStatusbar *statusbar = gimp_display_shell_get_statusbar (shell);
- gchar *filename = file_utils_uri_display_name (uri);
gimp_statusbar_push_temp (statusbar, GIMP_MESSAGE_INFO,
"document-save", _("Image exported to '%s'"),
- filename);
- g_free (filename);
+ gimp_file_get_utf8_name (file));
}
static void
diff --git a/app/file/file-open.c b/app/file/file-open.c
index 09f875c..0a1150d 100644
--- a/app/file/file-open.c
+++ b/app/file/file-open.c
@@ -209,12 +209,10 @@ file_open_image (Gimp *gimp,
if (file_open_file_proc_is_import (file_proc))
{
/* Remember the import source */
- gchar *uri = g_file_get_uri (file);
- gimp_image_set_imported_uri (image, uri);
- g_free (uri);
+ gimp_image_set_imported_file (image, file);
/* We shall treat this file as an Untitled file */
- gimp_image_set_uri (image, NULL);
+ gimp_image_set_file (image, NULL);
}
}
@@ -493,8 +491,7 @@ file_open_with_proc_and_display (Gimp *gimp,
{
GimpDocumentList *documents = GIMP_DOCUMENT_LIST (gimp->documents);
GimpImagefile *imagefile;
- const gchar *any_uri;
- gchar *uri;
+ GFile *any_file;
imagefile = gimp_document_list_add_file (documents, file, mime_type);
@@ -502,10 +499,9 @@ file_open_with_proc_and_display (Gimp *gimp,
* resulting image's uri match. Use any_uri() here so we
* create thumbnails for both XCF and imported images.
*/
- any_uri = gimp_image_get_any_uri (image);
- uri = g_file_get_uri (file);
+ any_file = gimp_image_get_any_file (image);
- if (any_uri && ! strcmp (uri, any_uri))
+ if (any_file && g_file_equal (file, any_file))
{
/* no need to save a thumbnail if there's a good one already */
if (! gimp_imagefile_check_thumbnail (imagefile))
@@ -514,8 +510,6 @@ file_open_with_proc_and_display (Gimp *gimp,
NULL);
}
}
-
- g_free (uri);
}
/* announce that we opened this image */
@@ -668,7 +662,7 @@ file_open_sanitize_image (GimpImage *image,
gboolean as_new)
{
if (as_new)
- gimp_image_set_uri (image, NULL);
+ gimp_image_set_file (image, NULL);
/* clear all undo steps */
gimp_image_undo_free (image);
diff --git a/app/file/file-save.c b/app/file/file-save.c
index bfc52c6..f578805 100644
--- a/app/file/file-save.c
+++ b/app/file/file-save.c
@@ -158,14 +158,14 @@ file_save (Gimp *gimp,
if (change_saved_state)
{
- gimp_image_set_uri (image, uri);
+ gimp_image_set_file (image, file);
gimp_image_set_save_proc (image, file_proc);
/* Forget the import source when we save. We interpret a
* save as that the user is not interested in being able
* to quickly export back to the original any longer
*/
- gimp_image_set_imported_uri (image, NULL);
+ gimp_image_set_imported_file (image, NULL);
gimp_image_clean_all (image);
}
@@ -186,22 +186,22 @@ file_save (Gimp *gimp,
* happens implicitly when saving since the GimpObject name
* of a GimpImage is the last-save URI
*/
- gimp_image_set_exported_uri (image, uri);
+ gimp_image_set_exported_file (image, file);
gimp_image_set_export_proc (image, file_proc);
/* An image can not be considered both exported and imported
* at the same time, so stop consider it as imported now
* that we consider it exported.
*/
- gimp_image_set_imported_uri (image, NULL);
+ gimp_image_set_imported_file (image, NULL);
gimp_image_export_clean_all (image);
}
if (export_backward || export_forward)
- gimp_image_exported (image, uri);
+ gimp_image_exported (image, file);
else
- gimp_image_saved (image, uri);
+ gimp_image_saved (image, file);
documents = GIMP_DOCUMENT_LIST (image->gimp->documents);
diff --git a/app/file/file-utils.c b/app/file/file-utils.c
index 3095a43..25b2c4d 100644
--- a/app/file/file-utils.c
+++ b/app/file/file-utils.c
@@ -214,15 +214,39 @@ file_utils_filename_from_uri (const gchar *uri)
return filename;
}
-gchar *
-file_utils_uri_with_new_ext (const gchar *uri,
- const gchar *ext_uri)
+GFile *
+file_utils_file_with_new_ext (GFile *file,
+ GFile *ext_file)
{
- const gchar *uri_ext = file_utils_uri_get_ext (uri);
- const gchar *ext_uri_ext = ext_uri ? file_utils_uri_get_ext (ext_uri) : NULL;
- gchar *uri_without_ext = g_strndup (uri, uri_ext - uri);
- gchar *ret = g_strconcat (uri_without_ext, ext_uri_ext, NULL);
+ gchar *uri;
+ const gchar *uri_ext;
+ gchar *ext_uri = NULL;
+ const gchar *ext_uri_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);
+ uri_ext = file_utils_uri_get_ext (uri);
+
+ if (ext_uri)
+ {
+ ext_uri = g_file_get_uri (ext_file);
+ ext_uri_ext = file_utils_uri_get_ext (ext_uri);
+ }
+
+ uri_without_ext = g_strndup (uri, uri_ext - uri);
+
+ new_uri = g_strconcat (uri_without_ext, ext_uri_ext, NULL);
+
+ ret = g_file_new_for_uri (new_uri);
+
g_free (uri_without_ext);
+ g_free (new_uri);
+
return ret;
}
@@ -428,36 +452,31 @@ gboolean
file_utils_save_thumbnail (GimpImage *image,
const gchar *filename)
{
- const gchar *image_uri;
- gboolean success = FALSE;
+ GFile *file;
+ gboolean success = FALSE;
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
g_return_val_if_fail (filename != NULL, FALSE);
- image_uri = gimp_image_get_uri (image);
+ file = gimp_image_get_file (image);
- if (image_uri)
+ if (file)
{
- gchar *uri = g_filename_to_uri (filename, NULL, NULL);
+ gchar *image_uri = g_file_get_uri (file);
+ gchar *uri = g_filename_to_uri (filename, NULL, NULL);
- if (uri)
+ if (uri && image_uri && ! strcmp (uri, image_uri))
{
- if ( ! strcmp (uri, image_uri))
- {
- GimpImagefile *imagefile;
- GFile *file;
+ GimpImagefile *imagefile;
- file = g_file_new_for_uri (uri);
- imagefile = gimp_imagefile_new (image->gimp, file);
- g_object_unref (file);
-
- success = gimp_imagefile_save_thumbnail (imagefile, NULL, image,
- NULL);
- g_object_unref (imagefile);
- }
-
- g_free (uri);
+ imagefile = gimp_imagefile_new (image->gimp, file);
+ success = gimp_imagefile_save_thumbnail (imagefile, NULL, image,
+ NULL);
+ g_object_unref (imagefile);
}
+
+ g_free (image_uri);
+ g_free (uri);
}
return success;
diff --git a/app/file/file-utils.h b/app/file/file-utils.h
index 0d9ac42..b501c09 100644
--- a/app/file/file-utils.h
+++ b/app/file/file-utils.h
@@ -28,8 +28,8 @@ gchar * file_utils_filename_to_uri (Gimp *gimp,
GError **error);
gchar * file_utils_filename_from_uri (const gchar *uri);
gchar * file_utils_filename_from_file (GFile *file);
-gchar * file_utils_uri_with_new_ext (const gchar *uri,
- const gchar *uri_with_ext);
+GFile * file_utils_file_with_new_ext (GFile *file,
+ GFile *ext_file);
const gchar * file_utils_uri_get_ext (const gchar *uri);
gchar * file_utils_uri_to_utf8_filename (const gchar *uri);
diff --git a/app/pdb/image-cmds.c b/app/pdb/image-cmds.c
index f30a256..4f0df9d 100644
--- a/app/pdb/image-cmds.c
+++ b/app/pdb/image-cmds.c
@@ -2250,9 +2250,9 @@ image_get_filename_invoker (GimpProcedure *procedure,
if (success)
{
- const gchar *uri = gimp_image_get_any_uri (image);
- if (uri)
- filename = g_filename_from_uri (uri, NULL, NULL);
+ GFile *file = gimp_image_get_any_file (image);
+ if (file)
+ filename = g_file_get_path (file);
}
return_vals = gimp_procedure_get_return_values (procedure, success,
@@ -2323,7 +2323,9 @@ image_get_uri_invoker (GimpProcedure *procedure,
if (success)
{
- uri = g_strdup (gimp_image_get_any_uri (image));
+ GFile *file = gimp_image_get_any_file (image);
+ if (file)
+ uri = g_file_get_uri (file);
}
return_vals = gimp_procedure_get_return_values (procedure, success,
@@ -2352,7 +2354,9 @@ image_get_xcf_uri_invoker (GimpProcedure *procedure,
if (success)
{
- uri = g_strdup (gimp_image_get_uri (image));
+ GFile *file = gimp_image_get_file (image);
+ if (file)
+ uri = g_file_get_uri (file);
}
return_vals = gimp_procedure_get_return_values (procedure, success,
@@ -2381,7 +2385,9 @@ image_get_imported_uri_invoker (GimpProcedure *procedure,
if (success)
{
- uri = g_strdup (gimp_image_get_imported_uri (image));
+ GFile *file = gimp_image_get_imported_file (image);
+ if (file)
+ uri = g_file_get_uri (file);
}
return_vals = gimp_procedure_get_return_values (procedure, success,
@@ -2410,7 +2416,9 @@ image_get_exported_uri_invoker (GimpProcedure *procedure,
if (success)
{
- uri = g_strdup (gimp_image_get_exported_uri (image));
+ GFile *file = gimp_image_get_exported_file (image);
+ if (file)
+ uri = g_file_get_uri (file);
}
return_vals = gimp_procedure_get_return_values (procedure, success,
diff --git a/app/widgets/gimpfiledialog.c b/app/widgets/gimpfiledialog.c
index 3d92540..9c355ec 100644
--- a/app/widgets/gimpfiledialog.c
+++ b/app/widgets/gimpfiledialog.c
@@ -123,9 +123,7 @@ static void gimp_file_dialog_help_clicked (GtkWidget *widge
gpointer dialog);
static gchar * gimp_file_dialog_pattern_from_extension (const gchar *extension);
-static gchar * gimp_file_dialog_get_default_uri (Gimp *gimp);
-static gchar * gimp_file_dialog_get_dirname_from_uri (const gchar *uri);
-
+static GFile * gimp_file_dialog_get_default_file (Gimp *gimp);
G_DEFINE_TYPE_WITH_CODE (GimpFileDialog, gimp_file_dialog,
@@ -489,17 +487,17 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
gboolean close_after_saving,
GimpObject *display)
{
- const gchar *dir_uri = NULL;
- const gchar *name_uri = NULL;
- const gchar *ext_uri = NULL;
- gchar *default_uri = NULL;
- gchar *dirname = NULL;
- gchar *basename = NULL;
+ GFile *dir_file = NULL;
+ GFile *name_file = NULL;
+ GFile *ext_file = NULL;
+ GFile *default_file;
+ GFile *parent_file;
+ gchar *basename;
g_return_if_fail (GIMP_IS_FILE_DIALOG (dialog));
g_return_if_fail (GIMP_IS_IMAGE (image));
- default_uri = gimp_file_dialog_get_default_uri (gimp);
+ default_file = gimp_file_dialog_get_default_file (gimp);
dialog->image = image;
dialog->save_a_copy = save_a_copy;
@@ -523,28 +521,24 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
*/
if (save_a_copy)
- dir_uri = gimp_image_get_save_a_copy_uri (image);
+ dir_file = gimp_image_get_save_a_copy_file (image);
- if (! dir_uri)
- dir_uri = gimp_image_get_uri (image);
+ if (! dir_file)
+ dir_file = gimp_image_get_file (image);
- if (! dir_uri)
- dir_uri = g_object_get_data (G_OBJECT (image),
- "gimp-image-source-uri");
+ if (! dir_file)
+ dir_file = g_object_get_data (G_OBJECT (image),
+ "gimp-image-source-file");
- if (! dir_uri)
- dir_uri = gimp_image_get_imported_uri (image);
+ if (! dir_file)
+ dir_file = gimp_image_get_imported_file (image);
- if (! dir_uri)
- {
- GFile *file = g_object_get_data (G_OBJECT (gimp),
- GIMP_FILE_SAVE_LAST_FILE_KEY);
- if (file)
- dir_uri = g_file_get_uri (file); /* FIXME leak */
- }
+ if (! dir_file)
+ dir_file = g_object_get_data (G_OBJECT (gimp),
+ GIMP_FILE_SAVE_LAST_FILE_KEY);
- if (! dir_uri)
- dir_uri = default_uri;
+ if (! dir_file)
+ dir_file = default_file;
/* Priority of default basenames for Save:
@@ -557,19 +551,20 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
*/
if (save_a_copy)
- name_uri = gimp_image_get_save_a_copy_uri (image);
+ name_file = gimp_image_get_save_a_copy_file (image);
- if (! name_uri)
- name_uri = gimp_image_get_uri (image);
+ if (! name_file)
+ name_file = gimp_image_get_file (image);
- if (! name_uri)
- name_uri = gimp_image_get_exported_uri (image);
+ if (! name_file)
+ name_file = gimp_image_get_exported_file (image);
- if (! name_uri)
- name_uri = gimp_image_get_imported_uri (image);
+ if (! name_file)
+ name_file = gimp_image_get_imported_file (image);
- if (! name_uri)
- name_uri = gimp_image_get_string_untitled ();
+ if (! name_file)
+ /* XXX leak */
+ name_file = g_file_new_for_uri (gimp_image_get_string_untitled ());
/* Priority of default type/extension for Save:
@@ -577,10 +572,10 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
* 1. Type of last Save
* 2. .xcf (which we don't explicitly append)
*/
- ext_uri = gimp_image_get_uri (image);
+ ext_file = gimp_image_get_file (image);
- if (! ext_uri)
- ext_uri = "file:///we/only/care/about/extension.xcf";
+ if (! ext_file)
+ ext_file = g_file_new_for_uri ("file:///we/only/care/about/extension.xcf");
}
else /* if (export) */
{
@@ -595,36 +590,28 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
* 6. The default path (usually the OS 'Documents' path)
*/
- dir_uri = gimp_image_get_exported_uri (image);
+ dir_file = gimp_image_get_exported_file (image);
- if (! dir_uri)
- dir_uri = g_object_get_data (G_OBJECT (image),
- "gimp-image-source-uri");
+ if (! dir_file)
+ dir_file = g_object_get_data (G_OBJECT (image),
+ "gimp-image-source-file");
- if (! dir_uri)
- dir_uri = gimp_image_get_imported_uri (image);
+ if (! dir_file)
+ dir_file = gimp_image_get_imported_file (image);
- if (! dir_uri)
- dir_uri = gimp_image_get_uri (image);
+ if (! dir_file)
+ dir_file = gimp_image_get_file (image);
- if (! dir_uri)
- {
- GFile *file = g_object_get_data (G_OBJECT (gimp),
- GIMP_FILE_SAVE_LAST_FILE_KEY);
- if (file)
- dir_uri = g_file_get_uri (file); /* XXX fixme leak */
- }
+ if (! dir_file)
+ dir_file = g_object_get_data (G_OBJECT (gimp),
+ GIMP_FILE_SAVE_LAST_FILE_KEY);
- if (! dir_uri)
- {
- GFile *file = g_object_get_data (G_OBJECT (gimp),
- GIMP_FILE_EXPORT_LAST_FILE_KEY);
- if (file)
- dir_uri = g_file_get_uri (file); /* XXX fixme leak */
- }
+ if (! dir_file)
+ dir_file = g_object_get_data (G_OBJECT (gimp),
+ GIMP_FILE_EXPORT_LAST_FILE_KEY);
- if (! dir_uri)
- dir_uri = default_uri;
+ if (! dir_file)
+ dir_file = default_file;
/* Priority of default basenames for Export:
@@ -635,16 +622,17 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
* 3. 'Untitled'
*/
- name_uri = gimp_image_get_exported_uri (image);
+ name_file = gimp_image_get_exported_file (image);
- if (! name_uri)
- name_uri = gimp_image_get_uri (image);
+ if (! name_file)
+ name_file = gimp_image_get_file (image);
- if (! name_uri)
- name_uri = gimp_image_get_imported_uri (image);
+ if (! name_file)
+ name_file = gimp_image_get_imported_file (image);
- if (! name_uri)
- name_uri = gimp_image_get_string_untitled ();
+ if (! name_file)
+ /* XXX leak */
+ name_file = g_file_new_for_uri (gimp_image_get_string_untitled ());
/* Priority of default type/extension for Export:
@@ -654,43 +642,36 @@ gimp_file_dialog_set_save_image (GimpFileDialog *dialog,
* 3. Type of latest Export of any document
* 4. .png
*/
- ext_uri = gimp_image_get_exported_uri (image);
+ ext_file = gimp_image_get_exported_file (image);
- if (! ext_uri)
- ext_uri = gimp_image_get_imported_uri (image);
+ if (! ext_file)
+ ext_file = gimp_image_get_imported_file (image);
- if (! ext_uri)
- {
- GFile *file = g_object_get_data (G_OBJECT (gimp),
- GIMP_FILE_EXPORT_LAST_FILE_KEY);
- if (file)
- ext_uri = g_file_get_uri (file); /* XXX fixme leak */
- }
+ if (! ext_file)
+ ext_file = g_object_get_data (G_OBJECT (gimp),
+ GIMP_FILE_EXPORT_LAST_FILE_KEY);
- if (! ext_uri)
- ext_uri = "file:///we/only/care/about/extension.png";
+ if (! ext_file)
+ ext_file = g_file_new_for_uri ("file:///we/only/care/about/extension.png");
}
- dirname = gimp_file_dialog_get_dirname_from_uri (dir_uri);
-
- if (ext_uri)
+ if (ext_file)
{
- gchar *uri_new_ext = file_utils_uri_with_new_ext (name_uri,
- ext_uri);
- basename = file_utils_uri_display_basename (uri_new_ext);
- g_free (uri_new_ext);
+ GFile *tmp_file = file_utils_file_with_new_ext (name_file, ext_file);
+ basename = g_path_get_basename (gimp_file_get_utf8_name (tmp_file));
+ g_object_unref (tmp_file);
}
else
{
- basename = file_utils_uri_display_basename (name_uri);
+ basename = g_path_get_basename (gimp_file_get_utf8_name (name_file));
}
- gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dialog), dirname);
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), basename);
+ parent_file = g_file_get_parent (dir_file);
+ gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (dialog),
+ parent_file, NULL);
+ g_object_unref (parent_file);
- g_free (default_uri);
- g_free (basename);
- g_free (dirname);
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), basename);
}
GimpFileDialogState *
@@ -1158,91 +1139,34 @@ gimp_file_dialog_pattern_from_extension (const gchar *extension)
return pattern;
}
-static gchar *
-gimp_file_dialog_get_default_uri (Gimp *gimp)
+static GFile *
+gimp_file_dialog_get_default_file (Gimp *gimp)
{
if (gimp->default_folder)
{
- return g_strdup (gimp->default_folder);
+ return g_file_new_for_path (gimp->default_folder);
}
else
{
+ GFile *file;
gchar *path;
- gchar *uri;
/* Make sure it ends in '/' */
path = g_build_path (G_DIR_SEPARATOR_S,
g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS),
G_DIR_SEPARATOR_S,
NULL);
- uri = g_filename_to_uri (path, NULL, NULL);
- g_free (path);
/* Paranoia fallback, see bug #722400 */
- if (! uri)
- {
- path = g_build_path (G_DIR_SEPARATOR_S,
- g_get_home_dir (),
- G_DIR_SEPARATOR_S,
- NULL);
- uri = g_filename_to_uri (path, NULL, NULL);
- g_free (path);
- }
-
- return uri;
- }
-}
+ if (! path)
+ path = g_build_path (G_DIR_SEPARATOR_S,
+ g_get_home_dir (),
+ G_DIR_SEPARATOR_S,
+ NULL);
-static gchar *
-gimp_file_dialog_get_dirname_from_uri (const gchar *uri)
-{
- gchar *dirname = NULL;
-
-#ifndef G_OS_WIN32
- dirname = g_path_get_dirname (uri);
-#else
- /* g_path_get_dirname() is supposed to work on pathnames, not URIs.
- *
- * If uri points to a file on the root of a drive
- * "file:///d:/foo.png", g_path_get_dirname() would return
- * "file:///d:". (What we really would want is "file:///d:/".) When
- * this then is passed inside gtk+ to g_filename_from_uri() we get
- * "d:" which is not an absolute pathname. This currently causes an
- * assertion failure in gtk+. This scenario occurs if we have opened
- * an image from the root of a drive and then do Save As.
- *
- * Of course, gtk+ shouldn't assert even if we feed it slightly bogus
- * data, and that problem should be fixed, too. But to get the
- * correct default current folder in the filechooser combo box, we
- * need to pass it the proper URI for an absolute path anyway. So
- * don't use g_path_get_dirname() on file: URIs.
- */
- if (g_str_has_prefix (uri, "file:///"))
- {
- gchar *filepath = g_filename_from_uri (uri, NULL, NULL);
- gchar *dirpath = NULL;
-
- if (filepath != NULL)
- {
- dirpath = g_path_get_dirname (filepath);
- g_free (filepath);
- }
+ file = g_file_new_for_path (path);
+ g_free (path);
- if (dirpath != NULL)
- {
- dirname = g_filename_to_uri (dirpath, NULL, NULL);
- g_free (dirpath);
- }
- else
- {
- dirname = NULL;
- }
+ return file;
}
- else
- {
- dirname = g_path_get_dirname (uri);
- }
-#endif
-
- return dirname;
}
diff --git a/app/widgets/gimpimagepropview.c b/app/widgets/gimpimagepropview.c
index 711a208..974a14d 100644
--- a/app/widgets/gimpimagepropview.c
+++ b/app/widgets/gimpimagepropview.c
@@ -305,14 +305,12 @@ static void
gimp_image_prop_view_label_set_filename (GtkWidget *label,
GimpImage *image)
{
- const gchar *uri = gimp_image_get_any_uri (image);
+ GFile *file = gimp_image_get_any_file (image);
- if (uri)
+ if (file)
{
- gchar *name = file_utils_uri_display_name (uri);
-
- gtk_label_set_text (GTK_LABEL (label), name);
- g_free (name);
+ gtk_label_set_text (GTK_LABEL (label),
+ gimp_file_get_utf8_name (file));
}
else
{
@@ -325,11 +323,7 @@ static void
gimp_image_prop_view_label_set_filesize (GtkWidget *label,
GimpImage *image)
{
- const gchar *uri = gimp_image_get_any_uri (image);
- GFile *file = NULL;
-
- if (uri)
- file = g_file_new_for_uri (uri);
+ GFile *file = gimp_image_get_any_file (image);
if (file)
{
@@ -352,8 +346,6 @@ gimp_image_prop_view_label_set_filesize (GtkWidget *label,
{
gtk_label_set_text (GTK_LABEL (label), NULL);
}
-
- g_object_unref (file);
}
else
{
@@ -375,16 +367,10 @@ gimp_image_prop_view_label_set_filetype (GtkWidget *label,
if (! proc)
{
- const gchar *uri = gimp_image_get_uri (image);
+ GFile *file = gimp_image_get_file (image);
- if (uri)
- {
- GFile *file;
-
- file = g_file_new_for_uri (uri);
- proc = file_procedure_find (manager->load_procs, file, NULL);
- g_object_unref (file);
- }
+ if (file)
+ proc = file_procedure_find (manager->load_procs, file, NULL);
}
gtk_label_set_text (GTK_LABEL (label),
diff --git a/tools/pdbgen/pdb/image.pdb b/tools/pdbgen/pdb/image.pdb
index a3f2b0a..f79c175 100644
--- a/tools/pdbgen/pdb/image.pdb
+++ b/tools/pdbgen/pdb/image.pdb
@@ -2245,9 +2245,9 @@ HELP
%invoke = (
code => <<'CODE'
{
- const gchar *uri = gimp_image_get_any_uri (image);
- if (uri)
- filename = g_filename_from_uri (uri, NULL, NULL);
+ GFile *file = gimp_image_get_any_file (image);
+ if (file)
+ filename = g_file_get_path (file);
}
CODE
);
@@ -2325,7 +2325,9 @@ HELP
%invoke = (
code => <<'CODE'
{
- uri = g_strdup (gimp_image_get_any_uri (image));
+ GFile *file = gimp_image_get_any_file (image);
+ if (file)
+ uri = g_file_get_uri (file);
}
CODE
);
@@ -2357,7 +2359,9 @@ HELP
%invoke = (
code => <<'CODE'
{
- uri = g_strdup (gimp_image_get_uri (image));
+ GFile *file = gimp_image_get_file (image);
+ if (file)
+ uri = g_file_get_uri (file);
}
CODE
);
@@ -2391,7 +2395,9 @@ HELP
%invoke = (
code => <<'CODE'
{
- uri = g_strdup (gimp_image_get_imported_uri (image));
+ GFile *file = gimp_image_get_imported_file (image);
+ if (file)
+ uri = g_file_get_uri (file);
}
CODE
);
@@ -2424,7 +2430,9 @@ HELP
%invoke = (
code => <<'CODE'
{
- uri = g_strdup (gimp_image_get_exported_uri (image));
+ GFile *file = gimp_image_get_exported_file (image);
+ if (file)
+ uri = g_file_get_uri (file);
}
CODE
);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]