aboutsummaryrefslogtreecommitdiffstats
path: root/my-evolution/e-summary.c
diff options
context:
space:
mode:
Diffstat (limited to 'my-evolution/e-summary.c')
-rw-r--r--my-evolution/e-summary.c48
1 files changed, 43 insertions, 5 deletions
diff --git a/my-evolution/e-summary.c b/my-evolution/e-summary.c
index 6c22e9cd64..51b6c41b48 100644
--- a/my-evolution/e-summary.c
+++ b/my-evolution/e-summary.c
@@ -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