]> git.0d.be Git - empathy.git/commitdiff
Support for notification-only events
authorFrédéric Péters <fpeters@0d.be>
Tue, 16 Jun 2009 07:46:06 +0000 (09:46 +0200)
committerFrédéric Péters <fpeters@0d.be>
Tue, 23 Jun 2009 10:08:50 +0000 (12:08 +0200)
Add a "must_ack" attribute to events, set if there is no function
associated to the event, and add a timeout on such events to have them
removed automatically.

src/empathy-event-manager.c
src/empathy-event-manager.h

index 1a4ce0d65ce439dd94ee441561cd1ef95e3525d3..0b842e3691f31fd0e0043d3f28ca6299011ab9e7 100644 (file)
@@ -249,6 +249,13 @@ event_remove (EventPriv *event)
   event_free (event);
 }
 
+static gboolean
+autoremove_event_timeout_cb (EventPriv *event)
+{
+  event_remove (event);
+  return FALSE;
+}
+
 static void
 event_manager_add (EmpathyEventManager *manager, EmpathyContact *contact,
   const gchar *icon_name, const gchar *header, const gchar *message,
@@ -262,6 +269,7 @@ event_manager_add (EmpathyEventManager *manager, EmpathyContact *contact,
   event->public.icon_name = g_strdup (icon_name);
   event->public.header = g_strdup (header);
   event->public.message = g_strdup (message);
+  event->public.must_ack = (func != NULL);
   event->inhibit = FALSE;
   event->func = func;
   event->user_data = user_data;
@@ -271,6 +279,11 @@ event_manager_add (EmpathyEventManager *manager, EmpathyContact *contact,
   DEBUG ("Adding event %p", event);
   priv->events = g_slist_prepend (priv->events, event);
   g_signal_emit (event->manager, signals[EVENT_ADDED], 0, event);
+
+  if (!event->public.must_ack)
+    {
+      g_timeout_add_seconds (2, (GSourceFunc)autoremove_event_timeout_cb, event);
+    }
 }
 
 static void
index 42fd0c090500e36b7dfc0727b77e841c6456a197..af73c8ea7ff383d770a489c4f03e0d4c5737397d 100644 (file)
@@ -53,6 +53,7 @@ typedef struct {
        gchar          *icon_name;
        gchar          *header;
        gchar          *message;
+       gboolean        must_ack;
 } EmpathyEvent;
 
 GType                empathy_event_manager_get_type      (void) G_GNUC_CONST;