aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog7
-rw-r--r--calendar/pcs/query.c61
2 files changed, 41 insertions, 27 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index b375856f06..1e4b589382 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,5 +1,12 @@
2002-09-23 Rodrigo Moya <rodrigo@ximian.com>
+ * pcs/query.c (start_cached_query_cb): move success notification code
+ to its own code block, since it was being run for parse errors also.
+ Also, remove all traces of the query from the cache if there is an
+ error. Also, use GINT_TO_POINTER instead of GPOINTER_TO_INT.
+
+2002-09-23 Rodrigo Moya <rodrigo@ximian.com>
+
Fixes #28310
* gui/alarm-notify/save.c (save_notification_time): only save the
diff --git a/calendar/pcs/query.c b/calendar/pcs/query.c
index 15b5c41ec2..19686e2d4d 100644
--- a/calendar/pcs/query.c
+++ b/calendar/pcs/query.c
@@ -1458,15 +1458,18 @@ start_cached_query_cb (gpointer data)
GTK_SIGNAL_FUNC (listener_died_cb), info->query);
priv->cached_timeouts = g_list_remove (priv->cached_timeouts,
- GPOINTER_TO_INT (info->tid));
+ GINT_TO_POINTER (info->tid));
- g_free (info);
-
- return FALSE;
} 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,
+ GINT_TO_POINTER (info->tid));
+
+ /* notify listener of error */
CORBA_exception_init (&ev);
GNOME_Evolution_Calendar_QueryListener_notifyQueryDone (
info->ql,
@@ -1479,33 +1482,37 @@ start_cached_query_cb (gpointer data)
"a parse error");
CORBA_exception_free (&ev);
- }
- /* if the query is done, then we just notify the listener */
- g_source_remove (info->tid);
- priv->cached_timeouts = g_list_remove (priv->cached_timeouts,
- GPOINTER_TO_INT (info->tid));
-
- g_hash_table_foreach (priv->uids, (GHFunc) notify_uid_cb, info);
+ 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));
- priv->listeners = g_list_append (priv->listeners, info->ql);
+ /* if the query is done, then we just notify the listener */
+ g_hash_table_foreach (priv->uids, (GHFunc) notify_uid_cb, info);
- cl = e_component_listener_new (info->ql, 0);
- 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->listeners = g_list_append (priv->listeners, info->ql);
- CORBA_exception_init (&ev);
- GNOME_Evolution_Calendar_QueryListener_notifyQueryDone (
- info->ql,
- GNOME_Evolution_Calendar_QueryListener_SUCCESS,
- "",
- &ev);
- if (BONOBO_EX (&ev))
- g_message ("start_cached_query_cb(): Could not notify the listener of "
- "a finished query");
+ cl = e_component_listener_new (info->ql, 0);
+ 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);
- CORBA_exception_free (&ev);
+ CORBA_exception_init (&ev);
+ GNOME_Evolution_Calendar_QueryListener_notifyQueryDone (
+ info->ql,
+ GNOME_Evolution_Calendar_QueryListener_SUCCESS,
+ "",
+ &ev);
+ if (BONOBO_EX (&ev))
+ g_message ("start_cached_query_cb(): Could not notify the listener of "
+ "a finished query");
+
+ CORBA_exception_free (&ev);
+ }
+
g_free (info);
return FALSE;
@@ -1544,7 +1551,7 @@ backend_destroyed_cb (GtkObject *object, gpointer data)
query = QUERY (data);
cached_queries = g_list_remove (cached_queries, query);
- bonobo_object_unref (query);
+ bonobo_object_unref (BONOBO_OBJECT (query));
}
/**