[gnome-builder/wip/chergert/pipeline-merge: 28/64] application: allow registering directory reapers for shutdown
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/chergert/pipeline-merge: 28/64] application: allow registering directory reapers for shutdown
- Date: Sun, 5 Feb 2017 21:51:44 +0000 (UTC)
commit af6053c98f9f97d261da2f19459f323d622e3d91
Author: Christian Hergert <chergert redhat com>
Date: Fri Feb 3 12:51:41 2017 -0800
application: allow registering directory reapers for shutdown
By adding the reapers, we can occasionally run the housekeeping or at
least run them at shutdown.
libide/application/ide-application-private.h | 2 ++
libide/application/ide-application.c | 24 ++++++++++++++++++++++++
libide/application/ide-application.h | 3 +++
3 files changed, 29 insertions(+), 0 deletions(-)
---
diff --git a/libide/application/ide-application-private.h b/libide/application/ide-application-private.h
index 7dcaa10..71ddd04 100644
--- a/libide/application/ide-application-private.h
+++ b/libide/application/ide-application-private.h
@@ -64,6 +64,8 @@ struct _IdeApplication
GHashTable *plugin_settings;
+ GPtrArray *reapers;
+
guint disable_theme_tracking : 1;
};
diff --git a/libide/application/ide-application.c b/libide/application/ide-application.c
index 0ae4e2e..6be3577 100644
--- a/libide/application/ide-application.c
+++ b/libide/application/ide-application.c
@@ -427,6 +427,17 @@ ide_application_shutdown (GApplication *application)
if (G_APPLICATION_CLASS (ide_application_parent_class)->shutdown)
G_APPLICATION_CLASS (ide_application_parent_class)->shutdown (application);
+
+ /* Run all reapers serially on shutdown */
+
+ for (guint i = 0; i < self->reapers->len; i++)
+ {
+ IdeDirectoryReaper *reaper = g_ptr_array_index (self->reapers, i);
+
+ g_assert (IDE_IS_DIRECTORY_REAPER (reaper));
+
+ ide_directory_reaper_execute (reaper, NULL, NULL);
+ }
}
static void
@@ -469,6 +480,7 @@ ide_application_finalize (GObject *object)
g_clear_pointer (&self->merge_ids, g_hash_table_unref);
g_clear_pointer (&self->plugin_css, g_hash_table_unref);
g_clear_pointer (&self->plugin_settings, g_hash_table_unref);
+ g_clear_pointer (&self->reapers, g_ptr_array_unref);
g_clear_object (&self->worker_manager);
g_clear_object (&self->keybindings);
g_clear_object (&self->recent_projects);
@@ -504,6 +516,8 @@ ide_application_init (IdeApplication *self)
{
ide_set_program_name (PACKAGE_NAME);
+ self->reapers = g_ptr_array_new_with_free_func (g_object_unref);
+
self->started_at = g_date_time_new_now_utc ();
self->mode = IDE_APPLICATION_MODE_PRIMARY;
@@ -826,3 +840,13 @@ ide_application_get_main_thread (void)
{
return main_thread;
}
+
+void
+ide_application_add_reaper (IdeApplication *self,
+ IdeDirectoryReaper *reaper)
+{
+ g_return_if_fail (IDE_IS_APPLICATION (self));
+ g_return_if_fail (IDE_IS_DIRECTORY_REAPER (reaper));
+
+ g_ptr_array_add (self->reapers, g_object_ref (reaper));
+}
diff --git a/libide/application/ide-application.h b/libide/application/ide-application.h
index 607ee0a..76edede 100644
--- a/libide/application/ide-application.h
+++ b/libide/application/ide-application.h
@@ -22,6 +22,7 @@
#include <gtk/gtk.h>
#include "projects/ide-recent-projects.h"
+#include "util/ide-directory-reaper.h"
G_BEGIN_DECLS
@@ -58,6 +59,8 @@ GMenu *ide_application_get_menu_by_id (IdeApplication *
const gchar *id);
gboolean ide_application_open_project (IdeApplication *self,
GFile *file);
+void ide_application_add_reaper (IdeApplication *self,
+ IdeDirectoryReaper *reaper);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]