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);
{
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;
}
}
-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
self);
g_signal_connect (priv->eventlogger,
"event-updated",
- G_CALLBACK (event_updated_cb),
+ G_CALLBACK (new_event_cb),
self);
read_event (self);