From: Artem Garmash Date: Sat, 24 Oct 2009 16:29:53 +0000 (+0300) Subject: Process to eventlogger callbacks in idle to better handle multiple events. X-Git-Url: https://vcs.maemo.org/git/?p=conv-inbox;a=commitdiff_plain;h=e97e282d51dd0437a73f305274a75c18a5898e36 Process to eventlogger callbacks in idle to better handle multiple events. --- diff --git a/src/el-home-applet.c b/src/el-home-applet.c index 8b4ec0f..5835938 100644 --- a/src/el-home-applet.c +++ b/src/el-home-applet.c @@ -63,6 +63,10 @@ struct _ELHomeAppletPrivate guint unread_count; const gchar *current_font; + + guint idle_id; + /* new or updated event id */ + gint new_event_id; }; HD_DEFINE_PLUGIN_MODULE (ELHomeApplet, el_home_applet, HD_TYPE_HOME_PLUGIN_ITEM); @@ -213,6 +217,10 @@ dispose (GObject *self) { ELHomeAppletPrivate *priv = EL_HOME_APPLET(self)->priv; + if (priv->idle_id){ + g_source_remove (priv->idle_id); + priv->idle_id = 0; + } if (priv->eventlogger){ g_object_unref (priv->eventlogger); priv->eventlogger = NULL; @@ -413,47 +421,53 @@ mark_as_read (ELHomeApplet *self) } } -static void -new_event_cb (RTComEl *backend, - gint event_id, - const gchar *local_uid, - const gchar *remote_uid, - const gchar *remote_ebook_uid, - const gchar *group_uid, - const gchar *service, - ELHomeApplet *self) +static gboolean +read_new_event (ELHomeApplet *self) { ELHomeAppletPrivate *priv = self->priv; - RTComElIter *it = NULL; - it = make_query (priv->eventlogger, event_id); - if (it){ - if (rtcom_el_iter_first (it)){ - show_event (self, it); - priv->unread_count++; - update_unread_label (self); + if (priv->new_event_id >= 0){ + RTComElIter *it = NULL; + it = make_query (priv->eventlogger, priv->new_event_id); + if (it){ + if (rtcom_el_iter_first (it)) + show_event (self, it); + g_object_unref (it); } - g_object_unref (it); + priv->unread_count = query_unread_events (priv->eventlogger); + update_unread_label (self); } + priv->new_event_id = -1; + priv->idle_id = 0; + + return FALSE; } static void -event_updated_cb (RTComEl *backend, - gint event_id, - const gchar *local_uid, - const gchar *remote_uid, - const gchar *remote_ebook_uid, - const gchar *group_uid, - const gchar *service, - ELHomeApplet *self) +add_new_idle (ELHomeApplet *self) { ELHomeAppletPrivate *priv = self->priv; - if (event_id == priv->event_id) - read_event (self); + if (priv->idle_id) + g_source_remove (priv->idle_id); + priv->idle_id = g_idle_add ((GSourceFunc)read_new_event, + self); +} - priv->unread_count = query_unread_events (priv->eventlogger); - update_unread_label (self); +static void +new_event_cb (RTComEl *backend, + gint event_id, + const gchar *local_uid, + const gchar *remote_uid, + const gchar *remote_ebook_uid, + const gchar *group_uid, + const gchar *service, + ELHomeApplet *self) +{ + ELHomeAppletPrivate *priv = self->priv; + + priv->new_event_id = event_id; + add_new_idle (self); } static gboolean @@ -608,7 +622,7 @@ el_home_applet_init (ELHomeApplet *self) self); g_signal_connect (priv->eventlogger, "event-updated", - G_CALLBACK (event_updated_cb), + G_CALLBACK (new_event_cb), self); read_event (self);