summaryrefslogtreecommitdiff
path: root/plugins/housekeeping/msd-housekeeping-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/housekeeping/msd-housekeeping-manager.c')
-rw-r--r--plugins/housekeeping/msd-housekeeping-manager.c40
1 files changed, 25 insertions, 15 deletions
diff --git a/plugins/housekeeping/msd-housekeeping-manager.c b/plugins/housekeeping/msd-housekeeping-manager.c
index a4596cf..367cbb1 100644
--- a/plugins/housekeeping/msd-housekeeping-manager.c
+++ b/plugins/housekeeping/msd-housekeeping-manager.c
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2008 Michael J. Chudobiak <[email protected]>
* Copyright (C) 2012 Jasmine Hassan <[email protected]>
+ * Copyright (C) 2012-2021 MATE Developers
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,7 +29,6 @@
#include "msd-housekeeping-manager.h"
#include "msd-disk-space.h"
-
/* General */
#define INTERVAL_ONCE_A_DAY 24*60*60
#define INTERVAL_TWO_MINUTES 2*60
@@ -44,6 +44,7 @@ struct _MsdHousekeepingManager {
guint long_term_cb;
guint short_term_cb;
GSettings *settings;
+ gulong config_listener_id;
};
G_DEFINE_TYPE (MsdHousekeepingManager, msd_housekeeping_manager, G_TYPE_OBJECT)
@@ -63,7 +64,6 @@ typedef struct {
glong size;
} ThumbData;
-
static void
thumb_data_free (gpointer data)
{
@@ -245,13 +245,6 @@ msd_housekeeping_manager_start (MsdHousekeepingManager *manager,
g_debug ("Starting housekeeping manager");
mate_settings_profile_start (NULL);
- msd_ldsm_setup (FALSE);
-
- manager->settings = g_settings_new (THUMB_CACHE_SCHEMA);
-
- g_signal_connect (manager->settings, "changed",
- G_CALLBACK (settings_changed_callback), manager);
-
/* Clean once, a few minutes after start-up */
do_cleanup_soon (manager);
@@ -267,7 +260,23 @@ msd_housekeeping_manager_start (MsdHousekeepingManager *manager,
static void
msd_housekeeping_manager_finalize (GObject *object)
{
- msd_housekeeping_manager_stop (MSD_HOUSEKEEPING_MANAGER (object));
+ MsdHousekeepingManager *manager = MSD_HOUSEKEEPING_MANAGER (object);
+ msd_housekeeping_manager_stop (manager);
+#if GLIB_CHECK_VERSION(2,62,0)
+ g_clear_signal_handler (&manager->config_listener_id,
+ manager->settings);
+#else
+ if (manager->config_listener_id != 0) {
+ g_signal_handler_disconnect (manager->settings,
+ manager->config_listener_id);
+ manager->config_listener_id = 0;
+ }
+#endif
+ g_object_unref (manager->settings);
+ manager->settings = NULL;
+
+ msd_ldsm_clean ();
+
G_OBJECT_CLASS (msd_housekeeping_manager_parent_class)->finalize (object);
}
@@ -293,11 +302,6 @@ msd_housekeeping_manager_stop (MsdHousekeepingManager *manager)
do_cleanup (manager);
}
}
-
- g_object_unref (manager->settings);
- manager->settings = NULL;
-
- msd_ldsm_clean ();
}
static void
@@ -311,6 +315,12 @@ msd_housekeeping_manager_class_init (MsdHousekeepingManagerClass *klass)
static void
msd_housekeeping_manager_init (MsdHousekeepingManager *manager)
{
+ msd_ldsm_setup (FALSE);
+
+ manager->settings = g_settings_new (THUMB_CACHE_SCHEMA);
+ manager->config_listener_id = g_signal_connect (manager->settings, "changed",
+ G_CALLBACK (settings_changed_callback),
+ manager);
}
MsdHousekeepingManager *