From 8c48e7682cfbc8aac611ffefe5db12736257b716 Mon Sep 17 00:00:00 2001 From: Rodrigo Moya Date: Mon, 23 Sep 2002 12:13:58 +0000 Subject: remove timeout function always and re-add it if the query is in progress. 2002-09-23 Rodrigo Moya * pcs/query.c (start_cached_query_cb): remove timeout function always and re-add it if the query is in progress. svn path=/trunk/; revision=18166 --- calendar/ChangeLog | 5 +++++ calendar/pcs/query.c | 24 ++++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 1e4b589382..591831bbdf 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,8 @@ +2002-09-23 Rodrigo Moya + + * pcs/query.c (start_cached_query_cb): remove timeout function always + and re-add it if the query is in progress. + 2002-09-23 Rodrigo Moya * pcs/query.c (start_cached_query_cb): move success notification code diff --git a/calendar/pcs/query.c b/calendar/pcs/query.c index 19686e2d4d..2ca9ad8409 100644 --- a/calendar/pcs/query.c +++ b/calendar/pcs/query.c @@ -1447,6 +1447,10 @@ start_cached_query_cb (gpointer data) priv = info->query->priv; + g_source_remove (info->tid); + priv->cached_timeouts = g_list_remove (priv->cached_timeouts, + GINT_TO_POINTER (info->tid)); + /* if the query hasn't started yet, we add the listener */ if (priv->state == QUERY_START_PENDING || priv->state == QUERY_WAIT_FOR_BACKEND) { @@ -1456,19 +1460,14 @@ start_cached_query_cb (gpointer data) priv->component_listeners = g_list_append (priv->component_listeners, cl); gtk_signal_connect (GTK_OBJECT (cl), "component_died", GTK_SIGNAL_FUNC (listener_died_cb), info->query); - - priv->cached_timeouts = g_list_remove (priv->cached_timeouts, - GINT_TO_POINTER (info->tid)); - } else if (priv->state == QUERY_IN_PROGRESS) { - /* if it's in progress, we just wait */ - return TRUE; - } else if (priv->state == QUERY_PARSE_ERROR) { - /* remove all traces of this query */ - g_source_remove (info->tid); - priv->cached_timeouts = g_list_remove (priv->cached_timeouts, + /* if it's in progress, we re-add the timeout */ + info->tid = g_timeout_add (100, (GSourceFunc) start_cached_query_cb, info); + priv->cached_timeouts = g_list_append (priv->cached_timeouts, GINT_TO_POINTER (info->tid)); + return FALSE; + } else if (priv->state == QUERY_PARSE_ERROR) { /* notify listener of error */ CORBA_exception_init (&ev); GNOME_Evolution_Calendar_QueryListener_notifyQueryDone ( @@ -1483,13 +1482,10 @@ start_cached_query_cb (gpointer data) CORBA_exception_free (&ev); + /* remove all traces of this query */ cached_queries = g_list_remove (cached_queries, info->query); bonobo_object_unref (BONOBO_OBJECT (info->query)); } else if (priv->state == QUERY_DONE) { - g_source_remove (info->tid); - priv->cached_timeouts = g_list_remove (priv->cached_timeouts, - GINT_TO_POINTER (info->tid)); - /* if the query is done, then we just notify the listener */ g_hash_table_foreach (priv->uids, (GHFunc) notify_uid_cb, info); -- cgit v1.2.3