aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/pcs/query.c
diff options
context:
space:
mode:
authorRodrigo Moya <rodrigo@ximian.com>2002-09-23 20:13:58 +0800
committerRodrigo Moya <rodrigo@src.gnome.org>2002-09-23 20:13:58 +0800
commit8c48e7682cfbc8aac611ffefe5db12736257b716 (patch)
tree26f3f6743bc0986cab624c9aae4882f8cb28f72a /calendar/pcs/query.c
parent8d44d5b8fae0d145e9698edcd2c752ff8755a307 (diff)
downloadgsoc2013-evolution-8c48e7682cfbc8aac611ffefe5db12736257b716.tar.gz
gsoc2013-evolution-8c48e7682cfbc8aac611ffefe5db12736257b716.tar.zst
gsoc2013-evolution-8c48e7682cfbc8aac611ffefe5db12736257b716.zip
remove timeout function always and re-add it if the query is in progress.
2002-09-23 Rodrigo Moya <rodrigo@ximian.com> * 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
Diffstat (limited to 'calendar/pcs/query.c')
-rw-r--r--calendar/pcs/query.c24
1 files changed, 10 insertions, 14 deletions
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);