[tracker/rss-enclosures] tracker-store: Always call set_active's callback in mainloop
- From: Roberto Guido <rguido src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/rss-enclosures] tracker-store: Always call set_active's callback in mainloop
- Date: Wed, 24 Nov 2010 02:23:02 +0000 (UTC)
commit b0c72543b1c8d0de469aa215859dc9e891589969
Author: Philip Van Hoof <philip codeminded be>
Date: Thu Nov 4 14:22:35 2010 +0200
tracker-store: Always call set_active's callback in mainloop
src/tracker-store/tracker-store.c | 28 +++++++++++++++++++++++++---
1 files changed, 25 insertions(+), 3 deletions(-)
---
diff --git a/src/tracker-store/tracker-store.c b/src/tracker-store/tracker-store.c
index 6b95e13..732b235 100644
--- a/src/tracker-store/tracker-store.c
+++ b/src/tracker-store/tracker-store.c
@@ -98,6 +98,11 @@ typedef struct {
} callback;
} TrackerStoreTask;
+typedef struct {
+ GDestroyNotify callback;
+ gpointer user_data;
+} SetActiveDelegate;
+
static GStaticPrivate private_key = G_STATIC_PRIVATE_INIT;
#ifdef __USE_GNU
@@ -654,6 +659,17 @@ tracker_store_unreg_batches (const gchar *client_id)
sched (private);
}
+static gboolean
+active_cb_in_idle (gpointer user_data)
+{
+ SetActiveDelegate *data = user_data;
+
+ data->callback (data->user_data);
+ g_free (data);
+
+ return FALSE;
+}
+
void
tracker_store_set_active (gboolean active,
GDestroyNotify callback,
@@ -663,8 +679,6 @@ tracker_store_set_active (gboolean active,
private = g_static_private_get (&private_key);
- private->active_callback = callback;
- private->active_user_data = user_data;
private->active = active;
if (active == FALSE &&
@@ -672,8 +686,16 @@ tracker_store_set_active (gboolean active,
!private->update_running &&
private->active_callback)
{
- private->active_callback (private->active_user_data);
+ SetActiveDelegate *data = g_new0 (SetActiveDelegate, 1);
+
+ data->callback = callback;
+ data->user_data = user_data;
+ g_idle_add (active_cb_in_idle, data);
+
private->active_callback = NULL;
+ } else {
+ private->active_callback = callback;
+ private->active_user_data = user_data;
}
if (active) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]