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:
committed by
Jon Trowbridge
parent
54634a1357
commit
d109123edc
@ -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)
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user