[gthumb] read all the metadata before rotating the images
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] read all the metadata before rotating the images
- Date: Sat, 20 Feb 2010 11:31:11 +0000 (UTC)
commit 1a3c0f685275449cd728fa63aa10a815018ec093
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sat Feb 20 12:29:22 2010 +0100
read all the metadata before rotating the images
extensions/image_rotation/actions.c | 10 ++++-
extensions/image_rotation/gth-transform-task.c | 53 ++++++++++++++++++------
extensions/image_rotation/gth-transform-task.h | 2 +-
3 files changed, 49 insertions(+), 16 deletions(-)
---
diff --git a/extensions/image_rotation/actions.c b/extensions/image_rotation/actions.c
index 9eb9f5f..0cc2625 100644
--- a/extensions/image_rotation/actions.c
+++ b/extensions/image_rotation/actions.c
@@ -32,16 +32,19 @@ gth_browser_activate_action_tool_rotate_right (GtkAction *action,
GthBrowser *browser)
{
GList *items;
+ GList *file_data_list;
GList *file_list;
GthTask *task;
items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view (browser)));
- file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
+ file_data_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
+ file_list = gth_file_data_list_to_file_list (file_data_list);
task = gth_transform_task_new (browser, file_list, GTH_TRANSFORM_ROTATE_90);
gth_browser_exec_task (browser, task, FALSE);
g_object_unref (task);
_g_object_list_unref (file_list);
+ _g_object_list_unref (file_data_list);
_gtk_tree_path_list_free (items);
}
@@ -51,15 +54,18 @@ gth_browser_activate_action_tool_rotate_left (GtkAction *action,
GthBrowser *browser)
{
GList *items;
+ GList *file_data_list;
GList *file_list;
GthTask *task;
items = gth_file_selection_get_selected (GTH_FILE_SELECTION (gth_browser_get_file_list_view (browser)));
- file_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
+ file_data_list = gth_file_list_get_files (GTH_FILE_LIST (gth_browser_get_file_list (browser)), items);
+ file_list = gth_file_data_list_to_file_list (file_data_list);
task = gth_transform_task_new (browser, file_list, GTH_TRANSFORM_ROTATE_270);
gth_browser_exec_task (browser, task, FALSE);
g_object_unref (task);
_g_object_list_unref (file_list);
+ _g_object_list_unref (file_data_list);
_gtk_tree_path_list_free (items);
}
diff --git a/extensions/image_rotation/gth-transform-task.c b/extensions/image_rotation/gth-transform-task.c
index f56dcaa..ab0ffa5 100644
--- a/extensions/image_rotation/gth-transform-task.c
+++ b/extensions/image_rotation/gth-transform-task.c
@@ -29,6 +29,7 @@ struct _GthTransformTaskPrivate {
GthBrowser *browser;
GList *file_list;
GList *current;
+ GthFileData *file_data;
GthTransform transform;
JpegMcuAction default_action;
};
@@ -44,6 +45,7 @@ gth_transform_task_finalize (GObject *object)
self = GTH_TRANSFORM_TASK (object);
+ _g_object_unref (self->priv->file_data);
_g_object_list_unref (self->priv->file_list);
G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -84,7 +86,6 @@ transform_file_ready_cb (GError *error,
gpointer user_data)
{
GthTransformTask *self = user_data;
- GthFileData *file_data;
GFile *parent;
GList *file_list;
@@ -93,10 +94,8 @@ transform_file_ready_cb (GError *error,
g_clear_error (&error);
gth_task_dialog (GTH_TASK (self), TRUE);
-
- file_data = self->priv->current->data;
ask_whether_to_trim (GTK_WINDOW (self->priv->browser),
- file_data,
+ self->priv->file_data,
trim_response_cb,
self);
@@ -107,9 +106,8 @@ transform_file_ready_cb (GError *error,
return;
}
- file_data = self->priv->current->data;
- parent = g_file_get_parent (file_data->file);
- file_list = g_list_append (NULL, file_data->file);
+ parent = g_file_get_parent (self->priv->file_data->file);
+ file_list = g_list_append (NULL, self->priv->file_data->file);
gth_monitor_folder_changed (gth_main_get_default_monitor (),
parent,
file_list,
@@ -123,17 +121,20 @@ transform_file_ready_cb (GError *error,
static void
-transform_current_file (GthTransformTask *self)
+file_info_ready_cb (GList *files,
+ GError *error,
+ gpointer user_data)
{
- GthFileData *file_data;
+ GthTransformTask *self = user_data;
- if (self->priv->current == NULL) {
- gth_task_completed (GTH_TASK (self), NULL);
+ if (error != NULL) {
+ gth_task_completed (GTH_TASK (self), error);
return;
}
- file_data = self->priv->current->data;
- apply_transformation_async (file_data,
+ _g_object_unref (self->priv->file_data);
+ self->priv->file_data = g_object_ref ((GthFileData *) files->data);
+ apply_transformation_async (self->priv->file_data,
self->priv->transform,
self->priv->default_action,
gth_task_get_cancellable (GTH_TASK (self)),
@@ -143,6 +144,31 @@ transform_current_file (GthTransformTask *self)
static void
+transform_current_file (GthTransformTask *self)
+{
+ GFile *file;
+ GList *singleton;
+
+ if (self->priv->current == NULL) {
+ gth_task_completed (GTH_TASK (self), NULL);
+ return;
+ }
+
+ file = self->priv->current->data;
+ singleton = g_list_append (NULL, g_object_ref (file));
+ _g_query_all_metadata_async (singleton,
+ FALSE,
+ TRUE,
+ "*",
+ gth_task_get_cancellable (GTH_TASK (self)),
+ file_info_ready_cb,
+ self);
+
+ _g_object_list_unref (singleton);
+}
+
+
+static void
gth_transform_task_exec (GthTask *task)
{
GthTransformTask *self;
@@ -178,6 +204,7 @@ gth_transform_task_init (GthTransformTask *self)
{
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GTH_TYPE_TRANSFORM_TASK, GthTransformTaskPrivate);
self->priv->default_action = JPEG_MCU_ACTION_ABORT; /* FIXME: save a gconf value for this */
+ self->priv->file_data = NULL;
}
diff --git a/extensions/image_rotation/gth-transform-task.h b/extensions/image_rotation/gth-transform-task.h
index 8454052..d61591f 100644
--- a/extensions/image_rotation/gth-transform-task.h
+++ b/extensions/image_rotation/gth-transform-task.h
@@ -50,7 +50,7 @@ struct _GthTransformTaskClass {
GType gth_transform_task_get_type (void);
GthTask * gth_transform_task_new (GthBrowser *browser,
- GList *file_list,
+ GList *file_list, /* GFile list */
GthTransform transform);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]