[gnome-builder] buffer-manager: add ide_buffer_manager_save_all_async()
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] buffer-manager: add ide_buffer_manager_save_all_async()
- Date: Tue, 5 May 2015 00:58:04 +0000 (UTC)
commit ce29fb0e4f72cdf66108d82c75bf13b989059fb6
Author: Christian Hergert <christian hergert me>
Date: Mon May 4 17:57:23 2015 -0700
buffer-manager: add ide_buffer_manager_save_all_async()
This helper simplifies the process of saving all the buffers and then
performing a follow up (such as exit).
libide/ide-buffer-manager.c | 78 +++++++++++++++++++++++++++++++++++++++++++
libide/ide-buffer-manager.h | 7 ++++
2 files changed, 85 insertions(+), 0 deletions(-)
---
diff --git a/libide/ide-buffer-manager.c b/libide/ide-buffer-manager.c
index e3a25c1..518e946 100644
--- a/libide/ide-buffer-manager.c
+++ b/libide/ide-buffer-manager.c
@@ -1595,3 +1595,81 @@ ide_buffer_manager_get_n_buffers (IdeBufferManager *self)
return self->buffers->len;
}
+
+static void
+ide_buffer_manager_save_all__save_file_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ IdeBufferManager *self = (IdeBufferManager *)object;
+ g_autoptr(GTask) task = user_data;
+ GError *error = NULL;
+ guint *count;
+
+ if (!ide_buffer_manager_save_file_finish (self, result, &error))
+ {
+ g_warning ("%s", error->message);
+ g_clear_error (&error);
+ }
+
+ count = g_task_get_task_data (task);
+ if (--(*count) == 0)
+ g_task_return_boolean (task, TRUE);
+}
+
+void
+ide_buffer_manager_save_all_async (IdeBufferManager *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_autoptr(GTask) task = NULL;
+ gsize i;
+ guint *count;
+
+ g_return_if_fail (IDE_IS_BUFFER_MANAGER (self));
+ g_return_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable));
+
+ task = g_task_new (self, cancellable, callback, user_data);
+
+ count = g_new0 (guint, 1);
+ *count = self->buffers->len;
+ g_task_set_task_data (task, count, g_free);
+
+ for (i = 0; i < self->buffers->len; i++)
+ {
+ IdeBuffer *buffer;
+
+ buffer = g_ptr_array_index (self->buffers, i);
+
+ if (!gtk_text_buffer_get_modified (GTK_TEXT_BUFFER (buffer)))
+ {
+ (*count)--;
+ continue;
+ }
+
+ ide_buffer_manager_save_file_async (self,
+ buffer,
+ ide_buffer_get_file (buffer),
+ NULL,
+ cancellable,
+ ide_buffer_manager_save_all__save_file_cb,
+ g_object_ref (task));
+
+ }
+
+ if (*count == 0)
+ g_task_return_boolean (task, TRUE);
+}
+
+gboolean
+ide_buffer_manager_save_all_finish (IdeBufferManager *self,
+ GAsyncResult *result,
+ GError **error)
+{
+ GTask *task = (GTask *)result;
+
+ g_return_val_if_fail (IDE_IS_BUFFER_MANAGER (self), FALSE);
+
+ return g_task_propagate_boolean (task, error);
+}
diff --git a/libide/ide-buffer-manager.h b/libide/ide-buffer-manager.h
index 1393f04..5705a3d 100644
--- a/libide/ide-buffer-manager.h
+++ b/libide/ide-buffer-manager.h
@@ -51,6 +51,13 @@ void ide_buffer_manager_save_file_async (IdeBufferManag
gboolean ide_buffer_manager_save_file_finish (IdeBufferManager *self,
GAsyncResult *result,
GError **error);
+void ide_buffer_manager_save_all_async (IdeBufferManager *self,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean ide_buffer_manager_save_all_finish (IdeBufferManager *self,
+ GAsyncResult *result,
+ GError **error);
IdeBuffer *ide_buffer_manager_get_focus_buffer (IdeBufferManager *self);
void ide_buffer_manager_set_focus_buffer (IdeBufferManager *self,
IdeBuffer *buffer);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]