[recipes] Delay filesystem removal until data is saved
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [recipes] Delay filesystem removal until data is saved
- Date: Sun, 19 Feb 2017 01:11:20 +0000 (UTC)
commit 9aceffb9436df6cb1a1469532846fcb1350839cd
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Feb 18 18:10:13 2017 -0500
Delay filesystem removal until data is saved
This complication arises because we may have changes made
to the images, only to not have the recipe saved later.
In this case, we need to avoid removing the old images,
and undo the imports.
src/gr-image-viewer.c | 37 ++++++++++++++++++++++++++++++++++++-
src/gr-image-viewer.h | 2 ++
2 files changed, 38 insertions(+), 1 deletions(-)
---
diff --git a/src/gr-image-viewer.c b/src/gr-image-viewer.c
index f7cafe5..2722c1a 100644
--- a/src/gr-image-viewer.c
+++ b/src/gr-image-viewer.c
@@ -49,6 +49,9 @@ struct _GrImageViewer
GArray *images;
int index;
+ GPtrArray *additions;
+ GPtrArray *removals;
+
guint hide_timeout;
GtkGesture *gesture;
@@ -86,6 +89,11 @@ gr_image_viewer_finalize (GObject *object)
{
GrImageViewer *viewer = GR_IMAGE_VIEWER (object);
+ gr_image_viewer_revert_changes (viewer);
+
+ g_clear_pointer (&viewer->additions, g_ptr_array_unref);
+ g_clear_pointer (&viewer->removals, g_ptr_array_unref);
+
g_clear_pointer (&viewer->images, g_array_unref);
remove_hide_timeout (viewer);
g_clear_object (&viewer->gesture);
@@ -414,6 +422,9 @@ gr_image_viewer_init (GrImageViewer *self)
gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (self->gesture), GTK_PHASE_BUBBLE);
g_signal_connect (self->gesture, "pressed", G_CALLBACK (button_press), self);
self->images = gr_rotated_image_array_new ();
+
+ self->additions = g_ptr_array_new_with_free_func (g_free);
+ self->removals = g_ptr_array_new_with_free_func (g_free);
}
static void
@@ -553,6 +564,8 @@ file_chooser_response (GtkNativeDialog *self,
add_image (viewer, &ri, TRUE);
+ g_ptr_array_add (viewer->additions, g_strdup (ri.path));
+
g_free (ri.path);
}
g_slist_free_full (names, g_free);
@@ -615,7 +628,7 @@ gr_image_viewer_remove_image (GrImageViewer *viewer)
ri = &g_array_index (viewer->images, GrRotatedImage, viewer->index);
- remove_image (ri->path);
+ g_ptr_array_add (viewer->removals, g_strdup (ri->path));
g_array_remove_index (viewer->images, viewer->index);
@@ -671,3 +684,25 @@ gr_image_viewer_get_index (GrImageViewer *viewer)
{
return viewer->images->len;
}
+
+void
+gr_image_viewer_persist_changes (GrImageViewer *viewer)
+{
+ int i;
+
+ g_ptr_array_set_size (viewer->additions, 0);
+ for (i = 0; i < viewer->removals->len; i++)
+ remove_image (g_ptr_array_index (viewer->removals, i));
+ g_ptr_array_set_size (viewer->removals, 0);
+}
+
+void
+gr_image_viewer_revert_changes (GrImageViewer *viewer)
+{
+ int i;
+
+ g_ptr_array_set_size (viewer->removals, 0);
+ for (i = 0; i < viewer->additions->len; i++)
+ remove_image (g_ptr_array_index (viewer->additions, i));
+ g_ptr_array_set_size (viewer->additions, 0);
+}
diff --git a/src/gr-image-viewer.h b/src/gr-image-viewer.h
index b5045f8..3e8e32d 100644
--- a/src/gr-image-viewer.h
+++ b/src/gr-image-viewer.h
@@ -41,6 +41,8 @@ void gr_image_viewer_rotate_image (GrImageViewer *viewer,
void gr_image_viewer_show_image (GrImageViewer *viewer,
int idx);
int gr_image_viewer_get_index (GrImageViewer *viewer);
+void gr_image_viewer_persist_changes (GrImageViewer *viewer);
+void gr_image_viewer_revert_changes (GrImageViewer *viewer);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]