empathy r2279 - trunk/src



Author: xclaesse
Date: Fri Jan 30 17:07:15 2009
New Revision: 2279
URL: http://svn.gnome.org/viewvc/empathy?rev=2279&view=rev

Log:
If the notification is not dismissed by the user, do not display other notifications for new incoming messages.

Modified:
   trunk/src/empathy-event-manager.c
   trunk/src/empathy-event-manager.h
   trunk/src/empathy-status-icon.c

Modified: trunk/src/empathy-event-manager.c
==============================================================================
--- trunk/src/empathy-event-manager.c	(original)
+++ trunk/src/empathy-event-manager.c	Fri Jan 30 17:07:15 2009
@@ -76,6 +76,7 @@
   EmpathyEventManager *manager;
   EventManagerApproval *approval;
   EventFunc func;
+  gboolean inhibit;
   gpointer user_data;
 };
 
@@ -164,6 +165,7 @@
   event->public.icon_name = g_strdup (icon_name);
   event->public.header = g_strdup (header);
   event->public.message = g_strdup (message);
+  event->inhibit = FALSE;
   event->func = func;
   event->user_data = user_data;
   event->manager = manager;
@@ -226,11 +228,18 @@
   TpChannel       *channel;
   EventPriv       *event;
 
-  /* update the event if it's referring to a chat which is already in the
+  /* try to update the event if it's referring to a chat which is already in the
    * queue. */
 
   event = event_lookup_by_approval (approval->manager, approval);
 
+  if (event != NULL && event->inhibit)
+    {
+      g_signal_handlers_disconnect_by_func (tp_chat,
+        event_manager_chat_message_received_cb, approval);
+      return;
+    }
+
   sender = empathy_message_get_sender (message);
   header = g_strdup_printf (_("New message from %s"),
                             empathy_contact_get_name (sender));
@@ -239,7 +248,7 @@
   channel = empathy_tp_chat_get_channel (tp_chat);
 
   if (event != NULL)
-    event_update (approval->manager, event, EMPATHY_IMAGE_NEW_MESSAGE, header, msg);
+      event_update (approval->manager, event, EMPATHY_IMAGE_NEW_MESSAGE, header, msg);
   else
     event_manager_add (approval->manager, sender, EMPATHY_IMAGE_NEW_MESSAGE, header,
       msg, approval, event_channel_process_func, NULL);
@@ -728,3 +737,14 @@
   else
     event_remove (event);
 }
+
+void
+empathy_event_inhibit_updates (EmpathyEvent *event_public)
+{
+  EventPriv *event = (EventPriv *) event_public;
+
+  g_return_if_fail (event_public != NULL);
+
+  event->inhibit = TRUE;
+}
+

Modified: trunk/src/empathy-event-manager.h
==============================================================================
--- trunk/src/empathy-event-manager.h	(original)
+++ trunk/src/empathy-event-manager.h	Fri Jan 30 17:07:15 2009
@@ -60,6 +60,7 @@
 EmpathyEvent *       empathy_event_manager_get_top_event (EmpathyEventManager *manager);
 GSList *             empathy_event_manager_get_events    (EmpathyEventManager *manager);
 void                 empathy_event_activate              (EmpathyEvent        *event);
+void                 empathy_event_inhibit_updates       (EmpathyEvent        *event);
 
 G_END_DECLS
 

Modified: trunk/src/empathy-status-icon.c
==============================================================================
--- trunk/src/empathy-status-icon.c	(original)
+++ trunk/src/empathy-status-icon.c	Fri Jan 30 17:07:15 2009
@@ -92,11 +92,18 @@
 		priv->notification = NULL;
 	}
 
+	if (!priv->event) {
+		return;
+	}
+
 	/* the notification has been closed by the user, see the
 	 * DesktopNotification spec.
 	 */
-	if (reason == 2 && priv->event) {
+	if (reason == 2) {
 		g_idle_add ((GSourceFunc) activate_event, priv->event);
+	} else {
+		/* inhibit other updates for this event */
+		empathy_event_inhibit_updates (priv->event);
 	}
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]