Slow down reload requests to work around a bug in gnome-vfs. Ugly, but it

2001-10-27  Jon Trowbridge  <trow@ximian.com>

	* e-summary.c (e_summary_reload): Slow down reload requests
	to work around a bug in gnome-vfs.  Ugly, but it works.
	(Bug #12956)

svn path=/trunk/; revision=14239
This commit is contained in:
Jon Trowbridge
2001-10-27 23:16:13 +00:00
committed by Jon Trowbridge
parent 54634a1357
commit d109123edc
2 changed files with 50 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2001-10-27 Jon Trowbridge <trow@ximian.com>
* e-summary.c (e_summary_reload): Slow down reload requests
to work around a bug in gnome-vfs. Ugly, but it works.
(Bug #12956)
2001-10-26 Iain Holmes <iain@ximian.com>
* e-summary-rdf.c (open_callback): NULL the handle after a failed
@ -16,7 +22,7 @@
2001-10-25 Jon Trowbridge <trow@ximian.com>
* e-summary-tasks.c (sort_uids): It is possible for
start_foo.value to be NULL after a cal to
start_foo.value to be NULL after a call to
cal_component_get_dtstart, so we need to check for this before
dereferencing it. (Bug #13259)

View File

@ -95,6 +95,8 @@ struct _ESummaryPrivate {
GList *connections;
guint pending_reload_tag;
gpointer alarm;
gboolean frozen;
@ -128,6 +130,11 @@ destroy (GtkObject *object)
return;
}
if (priv->pending_reload_tag) {
gtk_timeout_remove (priv->pending_reload_tag);
priv->pending_reload_tag = 0;
}
if (summary->mail) {
e_summary_mail_free (summary);
}
@ -471,6 +478,7 @@ e_summary_init (ESummary *summary)
priv->frozen = FALSE;
priv->redraw_pending = FALSE;
priv->pending_reload_tag = 0;
priv->html_scroller = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->html_scroller),
@ -743,12 +751,10 @@ e_summary_reconfigure (ESummary *summary)
}
}
void
e_summary_reload (BonoboUIComponent *component,
gpointer userdata,
const char *cname)
static gint
e_summary_reload_timeout (gpointer closure)
{
ESummary *summary = userdata;
ESummary *summary = closure;
if (summary->rdf != NULL) {
e_summary_rdf_update (summary);
@ -757,6 +763,38 @@ e_summary_reload (BonoboUIComponent *component,
if (summary->weather != NULL) {
e_summary_weather_update (summary);
}
summary->priv->pending_reload_tag = 0;
return FALSE;
}
void
e_summary_reload (BonoboUIComponent *component,
gpointer userdata,
const char *cname)
{
ESummary *summary = userdata;
/*
This is an evil hack to work around a bug in gnome-vfs:
gnome-vfs seems to not properly lock partially-constructed
objects, so if you gnome_vfs_async_open and then immediately
gnome_vfs_async_cancel, it is possible to start to destroy
an object before it is totally constructed. Hilarity ensures.
This is an evil and stupid hack, but it slows down our reload
requests enough the gnome-vfs should be able to keep up. And
given that these are not instantaneous operations to begin
with, the users should be none the wiser. -JT
*/
if (summary->priv->pending_reload_tag) {
gtk_timeout_remove (summary->priv->pending_reload_tag);
}
summary->priv->pending_reload_tag =
gtk_timeout_add (80, e_summary_reload_timeout, summary);
}
int