app: change GimpImageFile and GimpDocumentList to speak GFile

This commit is contained in:
Michael Natterer 2014-07-05 12:51:54 +02:00
parent 53fe11b6dd
commit 3f52828896
14 changed files with 100 additions and 57 deletions

View File

@ -62,7 +62,7 @@ gimp_gui_init (Gimp *gimp)
gimp->gui.progress_free = NULL;
gimp->gui.pdb_dialog_set = NULL;
gimp->gui.pdb_dialog_close = NULL;
gimp->gui.recent_list_add_uri = NULL;
gimp->gui.recent_list_add_file = NULL;
gimp->gui.recent_list_load = NULL;
}
@ -471,15 +471,15 @@ gimp_pdb_dialog_close (Gimp *gimp,
}
gboolean
gimp_recent_list_add_uri (Gimp *gimp,
const gchar *uri,
const gchar *mime_type)
gimp_recent_list_add_file (Gimp *gimp,
GFile *file,
const gchar *mime_type)
{
g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
g_return_val_if_fail (uri != NULL, FALSE);
g_return_val_if_fail (G_IS_FILE (file), FALSE);
if (gimp->gui.recent_list_add_uri)
return gimp->gui.recent_list_add_uri (gimp, uri, mime_type);
if (gimp->gui.recent_list_add_file)
return gimp->gui.recent_list_add_file (gimp, file, mime_type);
return FALSE;
}

View File

@ -88,8 +88,8 @@ struct _GimpGui
gboolean (* pdb_dialog_close) (Gimp *gimp,
GimpContainer *container,
const gchar *callback_name);
gboolean (* recent_list_add_uri) (Gimp *gimp,
const gchar *uri,
gboolean (* recent_list_add_file) (Gimp *gimp,
GFile *file,
const gchar *mime_type);
void (* recent_list_load) (Gimp *gimp);
@ -166,8 +166,8 @@ gboolean gimp_pdb_dialog_set (Gimp *gimp,
gboolean gimp_pdb_dialog_close (Gimp *gimp,
GimpContainer *container,
const gchar *callback_name);
gboolean gimp_recent_list_add_uri (Gimp *gimp,
const gchar *uri,
gboolean gimp_recent_list_add_file (Gimp *gimp,
GFile *file,
const gchar *mime_type);
void gimp_recent_list_load (Gimp *gimp);

View File

@ -63,31 +63,36 @@ gimp_document_list_new (Gimp *gimp)
}
GimpImagefile *
gimp_document_list_add_uri (GimpDocumentList *document_list,
const gchar *uri,
const gchar *mime_type)
gimp_document_list_add_file (GimpDocumentList *document_list,
GFile *file,
const gchar *mime_type)
{
Gimp *gimp;
GimpImagefile *imagefile;
GimpContainer *container;
gchar *uri;
g_return_val_if_fail (GIMP_IS_DOCUMENT_LIST (document_list), NULL);
g_return_val_if_fail (uri != NULL, NULL);
gimp = document_list->gimp;
g_return_val_if_fail (G_IS_FILE (file), NULL);
container = GIMP_CONTAINER (document_list);
gimp = document_list->gimp;
uri = g_file_get_uri (file);
imagefile = (GimpImagefile *) gimp_container_get_child_by_name (container,
uri);
g_free (uri);
if (imagefile)
{
gimp_container_reorder (container, GIMP_OBJECT (imagefile), 0);
}
else
{
imagefile = gimp_imagefile_new (gimp, uri);
imagefile = gimp_imagefile_new (gimp, file);
gimp_container_add (container, GIMP_OBJECT (imagefile));
g_object_unref (imagefile);
}
@ -95,7 +100,7 @@ gimp_document_list_add_uri (GimpDocumentList *document_list,
gimp_imagefile_set_mime_type (imagefile, mime_type);
if (gimp->config->save_document_history)
gimp_recent_list_add_uri (gimp, uri, mime_type);
gimp_recent_list_add_file (gimp, file, mime_type);
return imagefile;
}

View File

@ -46,8 +46,8 @@ struct _GimpDocumentListClass
GType gimp_document_list_get_type (void) G_GNUC_CONST;
GimpContainer * gimp_document_list_new (Gimp *gimp);
GimpImagefile * gimp_document_list_add_uri (GimpDocumentList *document_list,
const gchar *uri,
GimpImagefile * gimp_document_list_add_file (GimpDocumentList *document_list,
GFile *file,
const gchar *mime_type);

View File

@ -65,6 +65,7 @@ struct _GimpImagefilePrivate
{
Gimp *gimp;
GFile *file;
GimpThumbnail *thumbnail;
GIcon *icon;
GCancellable *icon_cancellable;
@ -215,23 +216,34 @@ gimp_imagefile_finalize (GObject *object)
private->icon = NULL;
}
if (private->file)
{
g_object_unref (private->file);
private->file = NULL;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
}
GimpImagefile *
gimp_imagefile_new (Gimp *gimp,
const gchar *uri)
gimp_imagefile_new (Gimp *gimp,
GFile *file)
{
GimpImagefile *imagefile;
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
g_return_val_if_fail (file == NULL || G_IS_FILE (file), NULL);
imagefile = g_object_new (GIMP_TYPE_IMAGEFILE, NULL);
GET_PRIVATE (imagefile)->gimp = gimp;
if (uri)
gimp_object_set_name (GIMP_OBJECT (imagefile), uri);
if (file)
{
gimp_object_take_name (GIMP_OBJECT (imagefile), g_file_get_uri (file));
/* file member gets created by gimp_imagefile_name_changed() */
}
return imagefile;
}
@ -258,20 +270,14 @@ gimp_imagefile_get_gicon (GimpImagefile *imagefile)
if (! private->icon_cancellable)
{
GFile *file;
file = g_file_new_for_uri (gimp_object_get_name (imagefile));
private->icon_cancellable = g_cancellable_new ();
g_file_query_info_async (file, "standard::icon",
g_file_query_info_async (private->file, "standard::icon",
G_FILE_QUERY_INFO_NONE,
G_PRIORITY_DEFAULT,
private->icon_cancellable,
gimp_imagefile_icon_callback,
imagefile);
g_object_unref (file);
}
return NULL;
@ -481,17 +487,18 @@ gimp_imagefile_create_thumbnail_weak (GimpImagefile *imagefile,
if (! uri)
return;
local = gimp_imagefile_new (private->gimp, uri);
local = gimp_imagefile_new (private->gimp, private->file);
g_object_add_weak_pointer (G_OBJECT (imagefile), (gpointer) &imagefile);
if (! gimp_imagefile_create_thumbnail (local, context, progress, size, replace,
NULL))
{
/* The weak version works on a local copy so the thumbnail status
* of the actual image is not properly updated in case of creation
* failure, thus it would end up in a generic GIMP_THUMB_STATE_NOT_FOUND,
* which is less informative. */
/* The weak version works on a local copy so the thumbnail
* status of the actual image is not properly updated in case of
* creation failure, thus it would end up in a generic
* GIMP_THUMB_STATE_NOT_FOUND, which is less informative.
*/
g_object_set (private->thumbnail,
"thumb-state", GIMP_THUMB_STATE_FAILED,
NULL);
@ -581,6 +588,11 @@ gimp_imagefile_name_changed (GimpObject *object)
GIMP_OBJECT_CLASS (parent_class)->name_changed (object);
gimp_thumbnail_set_uri (private->thumbnail, gimp_object_get_name (object));
if (private->file)
g_object_unref (private->file);
private->file = g_file_new_for_uri (gimp_object_get_name (object));
}
static void

View File

@ -56,7 +56,7 @@ struct _GimpImagefileClass
GType gimp_imagefile_get_type (void) G_GNUC_CONST;
GimpImagefile * gimp_imagefile_new (Gimp *gimp,
const gchar *uri);
GFile *file);
GimpThumbnail * gimp_imagefile_get_thumbnail (GimpImagefile *imagefile);
GIcon * gimp_imagefile_get_gicon (GimpImagefile *imagefile);

View File

@ -22,6 +22,7 @@
#include <string.h>
#include <gio/gio.h>
#include <gegl.h>
#include "core-types.h"

View File

@ -20,7 +20,7 @@
#include "config.h"
#include <glib-object.h>
#include <gio/gio.h>
#include "core-types.h"

View File

@ -497,8 +497,11 @@ file_open_with_proc_and_display (Gimp *gimp,
GimpDocumentList *documents = GIMP_DOCUMENT_LIST (gimp->documents);
GimpImagefile *imagefile;
const gchar *any_uri;
GFile *file;
imagefile = gimp_document_list_add_uri (documents, uri, mime_type);
file = g_file_new_for_uri (uri);
imagefile = gimp_document_list_add_file (documents, file, mime_type);
g_object_unref (file);
/* can only create a thumbnail if the passed uri and the
* resulting image's uri match. Use any_uri() here so we
@ -578,12 +581,15 @@ file_open_layers (Gimp *gimp,
if (layers)
{
gchar *basename = file_utils_uri_display_basename (uri);
GFile *file;
file_open_convert_items (dest_image, basename, layers);
g_free (basename);
gimp_document_list_add_uri (GIMP_DOCUMENT_LIST (gimp->documents),
uri, mime_type);
file = g_file_new_for_uri (uri);
gimp_document_list_add_file (GIMP_DOCUMENT_LIST (gimp->documents),
file, mime_type);
g_object_unref (file);
}
else
{

View File

@ -166,6 +166,7 @@ file_save (Gimp *gimp,
{
GimpDocumentList *documents;
GimpImagefile *imagefile;
GFile *file;
if (change_saved_state)
{
@ -215,9 +216,11 @@ file_save (Gimp *gimp,
gimp_image_saved (image, uri);
documents = GIMP_DOCUMENT_LIST (image->gimp->documents);
imagefile = gimp_document_list_add_uri (documents,
uri,
file_proc->mime_type);
file = g_file_new_for_uri (uri);
imagefile = gimp_document_list_add_file (documents, file,
file_proc->mime_type);
g_object_unref (file);
/* only save a thumbnail if we are saving as XCF, see bug #25272 */
if (GIMP_PROCEDURE (file_proc)->proc_type == GIMP_INTERNAL)

View File

@ -462,8 +462,12 @@ file_utils_save_thumbnail (GimpImage *image,
if ( ! strcmp (uri, image_uri))
{
GimpImagefile *imagefile;
GFile *file;
file = g_file_new_for_uri (uri);
imagefile = gimp_imagefile_new (image->gimp, file);
g_object_unref (file);
imagefile = gimp_imagefile_new (image->gimp, uri);
success = gimp_imagefile_save_thumbnail (imagefile, NULL, image,
NULL);
g_object_unref (imagefile);

View File

@ -20,6 +20,7 @@
#include "config.h"
#include <gio/gio.h>
#include <gegl.h>
#include "gimp-gegl-types.h"

View File

@ -137,8 +137,8 @@ static gboolean gui_pdb_dialog_set (Gimp *gimp,
static gboolean gui_pdb_dialog_close (Gimp *gimp,
GimpContainer *container,
const gchar *callback_name);
static gboolean gui_recent_list_add_uri (Gimp *gimp,
const gchar *uri,
static gboolean gui_recent_list_add_file (Gimp *gimp,
GFile *file,
const gchar *mime_type);
static void gui_recent_list_load (Gimp *gimp);
@ -174,7 +174,7 @@ gui_vtable_init (Gimp *gimp)
gimp->gui.pdb_dialog_new = gui_pdb_dialog_new;
gimp->gui.pdb_dialog_set = gui_pdb_dialog_set;
gimp->gui.pdb_dialog_close = gui_pdb_dialog_close;
gimp->gui.recent_list_add_uri = gui_recent_list_add_uri;
gimp->gui.recent_list_add_file = gui_recent_list_add_file;
gimp->gui.recent_list_load = gui_recent_list_load;
}
@ -641,15 +641,17 @@ gui_pdb_dialog_close (Gimp *gimp,
}
static gboolean
gui_recent_list_add_uri (Gimp *gimp,
const gchar *uri,
const gchar *mime_type)
gui_recent_list_add_file (Gimp *gimp,
GFile *file,
const gchar *mime_type)
{
GtkRecentData recent;
const gchar *groups[2] = { "Graphics", NULL };
gchar *uri;
gboolean success;
g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
g_return_val_if_fail (uri != NULL, FALSE);
g_return_val_if_fail (G_IS_FILE (file), FALSE);
/* use last part of the URI */
recent.display_name = NULL;
@ -663,8 +665,14 @@ gui_recent_list_add_uri (Gimp *gimp,
recent.groups = (gchar **) groups;
recent.is_private = FALSE;
return gtk_recent_manager_add_full (gtk_recent_manager_get_default (),
uri, &recent);
uri = g_file_get_uri (file);
success = gtk_recent_manager_add_full (gtk_recent_manager_get_default (),
uri, &recent);
g_free (uri);
return success;
}
static gint
@ -704,9 +712,11 @@ gui_recent_list_load (Gimp *gimp)
mime_type))
{
GimpImagefile *imagefile;
GFile *file;
imagefile = gimp_imagefile_new (gimp,
gtk_recent_info_get_uri (info));
file = g_file_new_for_uri (gtk_recent_info_get_uri (info));
imagefile = gimp_imagefile_new (gimp, file);
g_object_unref (file);
gimp_imagefile_set_mime_type (imagefile, mime_type);

View File

@ -19,6 +19,7 @@
#include "config.h"
#include <gio/gio.h>
#include <gegl.h>
#include "operations-types.h"