From da87b4f29a564fc648cc2d62cecdb2c05badc9e0 Mon Sep 17 00:00:00 2001 From: Artem Garmash Date: Fri, 12 Feb 2010 23:59:10 +0200 Subject: [PATCH] Check that eventlogger constructed correctly and try to recover in case of failure --- src/el-home-applet.c | 91 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 69 insertions(+), 22 deletions(-) diff --git a/src/el-home-applet.c b/src/el-home-applet.c index 7991a94..6254576 100644 --- a/src/el-home-applet.c +++ b/src/el-home-applet.c @@ -146,6 +146,8 @@ struct _ELHomeAppletPrivate OssoABookContact *contact; gboolean time_fmt_24h; + + guint init_timer; }; HD_DEFINE_PLUGIN_MODULE (ELHomeApplet, el_home_applet, HD_TYPE_HOME_PLUGIN_ITEM); @@ -830,6 +832,11 @@ dispose (GObject *self) { ELHomeAppletPrivate *priv = EL_HOME_APPLET(self)->priv; + if (priv->init_timer) { + g_source_remove (priv->init_timer); + priv->init_timer = 0; + } + stop_scroll_anim (priv); if (priv->idle_id) { g_source_remove (priv->idle_id); @@ -1714,6 +1721,67 @@ leave_notify_event_cb (GtkWidget *widget, return FALSE; } +static gboolean +init_eventlogger (ELHomeApplet *self) +{ + ELHomeAppletPrivate *priv = self->priv; + + priv->eventlogger = rtcom_el_new (); + + /* check that db is initialized */ + gpointer *db = NULL; + g_object_get (priv->eventlogger, "db", &db, NULL); + if (!db) { + static int trial = 0; + + g_object_unref (priv->eventlogger); + priv->eventlogger = NULL; + + if (trial == 0) { + trial++; + priv->init_timer = g_timeout_add_seconds (5, + (GSourceFunc)init_eventlogger, + self); + return TRUE; /* return value doesn't matter */ + } + else if (trial < 5) { + trial++; + return TRUE; + } + else { + g_error ("Failed to init eventlogger"); + return FALSE; + } + } + + g_signal_connect (priv->eventlogger, + "new-event", + G_CALLBACK (new_event_cb), + self); + g_signal_connect (priv->eventlogger, + "event-updated", + G_CALLBACK (new_event_cb), + self); + g_signal_connect (priv->eventlogger, + "event-deleted", + G_CALLBACK (new_event_cb), + self); + g_signal_connect (priv->eventlogger, + "all-deleted", + G_CALLBACK (all_deleted_cb), + self); + g_signal_connect (priv->eventlogger, + "refresh-hint", + G_CALLBACK (refresh_hint_cb), + self); + + add_new_idle (self); + + priv->init_timer = 0; + + return FALSE; +} + static void el_home_applet_init (ELHomeApplet *self) { @@ -1848,27 +1916,6 @@ el_home_applet_init (ELHomeApplet *self) gtk_widget_show_all (GTK_WIDGET (event_box)); - priv->eventlogger = rtcom_el_new (); - g_signal_connect (priv->eventlogger, - "new-event", - G_CALLBACK (new_event_cb), - self); - g_signal_connect (priv->eventlogger, - "event-updated", - G_CALLBACK (new_event_cb), - self); - g_signal_connect (priv->eventlogger, - "event-deleted", - G_CALLBACK (new_event_cb), - self); - g_signal_connect (priv->eventlogger, - "all-deleted", - G_CALLBACK (all_deleted_cb), - self); - g_signal_connect (priv->eventlogger, - "refresh-hint", - G_CALLBACK (refresh_hint_cb), - self); osso_abook_init_with_name (PACKAGE, NULL); @@ -1878,7 +1925,7 @@ el_home_applet_init (ELHomeApplet *self) NULL); g_object_unref (gconf); - add_new_idle (self); + init_eventlogger (self); } static void -- 1.7.9.5