[easytag] Improved asynchronous loading and saving of images
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag] Improved asynchronous loading and saving of images
- Date: Thu, 6 Mar 2014 10:58:05 +0000 (UTC)
commit f432ebd26c9bf5fc060eecb0c90635ca4acd3abd
Author: Abhinav <abhijangda hotmail com>
Date: Thu Mar 6 15:57:33 2014 +0530
Improved asynchronous loading and saving of images
https://bugzilla.gnome.org/show_bug.cgi?id=725399
src/picture.c | 27 ++++++++++++++++++++-------
1 files changed, 20 insertions(+), 7 deletions(-)
---
diff --git a/src/picture.c b/src/picture.c
index bcaafe0..b6b8f26 100644
--- a/src/picture.c
+++ b/src/picture.c
@@ -46,7 +46,7 @@
typedef struct
{
GError *error;
- const gchar *filename;
+ gchar *filename;
} ErrorDialogData;
/* Data passed to et_picture_save_file_data_thread_func */
@@ -96,14 +96,18 @@ et_picture_save_file_data_callback (GObject *object, GAsyncResult *res,
gpointer user_data)
{
PictureSaveData *data;
+
data = g_async_result_get_user_data (G_ASYNC_RESULT (res));
+
if (data->error)
{
Log_Print (LOG_ERROR, _("Image file not saved: %s"),
data->error->message);
g_error_free (data->error);
}
+
gtk_widget_set_sensitive (MainWindow, TRUE);
+ g_slice_free (PictureSaveData, data);
}
/*
@@ -120,6 +124,7 @@ et_picture_save_file_data_thread_func (GSimpleAsyncResult *res, GObject *obj,
GCancellable *cancellable)
{
PictureSaveData *data;
+
data = g_async_result_get_user_data (G_ASYNC_RESULT (res));
et_picture_save_file_data (data->pic, data->file, &data->error);
g_object_unref (data->file);
@@ -140,6 +145,7 @@ et_picture_not_opened_callback (GObject *object, GAsyncResult *res,
{
GtkWidget *msgdialog;
ErrorDialogData *data = user_data;
+
/* Picture file not opened */
msgdialog = gtk_message_dialog_new (GTK_WINDOW (MainWindow),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -155,8 +161,10 @@ et_picture_not_opened_callback (GObject *object, GAsyncResult *res,
Log_Print (LOG_ERROR, _("Image file not loaded: %s"),
data->error->message);
+
g_error_free (data->error);
- g_free (data);
+ g_free (data->filename);
+ g_slice_free (ErrorDialogData, data);
}
/*
@@ -173,6 +181,7 @@ et_load_pictures_callback (GObject *object, GAsyncResult *res,
gpointer user_data)
{
GSList *list = g_async_result_get_user_data (res);
+
g_slist_free_full (list, g_object_unref);
gtk_widget_set_sensitive (MainWindow, TRUE);
g_object_unref (res);
@@ -192,6 +201,7 @@ et_load_pictures_thread_func (GSimpleAsyncResult *res, GObject *obj,
GCancellable *canc)
{
GSList *list = g_async_result_get_user_data (G_ASYNC_RESULT (res));
+
g_slist_foreach (list, (GFunc) et_picture_load_file, NULL);
}
@@ -227,15 +237,17 @@ et_picture_load_file_thread_func (GSimpleAsyncResult *res, GObject *obj,
{
gchar **uri_list = g_async_result_get_user_data (G_ASYNC_RESULT (res));
gchar **uri = uri_list;
- while (*uri && strlen(*uri))
+
+ while (*uri && *(*uri))
{
GFile *file = g_file_new_for_uri (*uri);
+
et_picture_load_file (file, NULL);
g_object_unref (file);
uri++;
}
- g_strfreev(uri_list);
+ g_strfreev (uri_list);
}
void Tag_Area_Picture_Drag_Data (GtkWidget *widget, GdkDragContext *dc,
@@ -420,12 +432,13 @@ et_picture_load_file (GFile *file, gpointer user_data)
if (!pic)
{
GSimpleAsyncResult *simple;
- ErrorDialogData *data = g_malloc (sizeof (ErrorDialogData));
+ ErrorDialogData *data = g_slice_new (ErrorDialogData);
data->error = error;
- data->filename = filename_utf8;
+ data->filename = g_strdup (filename_utf8);
simple = g_simple_async_result_new (NULL, et_picture_not_opened_callback,
data, NULL);
g_simple_async_result_complete_in_idle (simple);
+ g_object_unref (info);
return;
}
else
@@ -907,7 +920,7 @@ void Picture_Save_Button_Clicked (GObject *object)
{
GFile *file;
GSimpleAsyncResult *res;
- PictureSaveData *data = g_malloc (sizeof (PictureSaveData));
+ PictureSaveData *data = g_slice_new (PictureSaveData);
// Save the directory selected for initialize next time
g_free(init_dir);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]