empathy r2282 - in trunk: libempathy-gtk src



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

Log:
Implement a logic for disabling notifications when away.

Modified:
   trunk/libempathy-gtk/empathy-ui-utils.c
   trunk/libempathy-gtk/empathy-ui-utils.h
   trunk/src/empathy-status-icon.c

Modified: trunk/libempathy-gtk/empathy-ui-utils.c
==============================================================================
--- trunk/libempathy-gtk/empathy-ui-utils.c	(original)
+++ trunk/libempathy-gtk/empathy-ui-utils.c	Fri Jan 30 17:07:26 2009
@@ -1573,12 +1573,28 @@
 };
 
 static gboolean
+check_available (void)
+{
+	McPresence presence;
+	EmpathyIdle *idle;
+
+	idle = empathy_idle_dup_singleton ();
+	presence = empathy_idle_get_state (idle);
+	g_object_unref (idle);
+
+	if (presence != MC_PRESENCE_AVAILABLE &&
+	    presence != MC_PRESENCE_UNSET) {
+		return FALSE;    
+	}
+
+	return TRUE;
+}
+
+static gboolean
 empathy_sound_pref_is_enabled (const char *key)
 {
 	EmpathyConf *conf;
-	McPresence presence;
 	gboolean res;
-	EmpathyIdle *idle;
 
 	conf = empathy_conf_get ();
 	res = FALSE;
@@ -1589,12 +1605,7 @@
 		return FALSE;
 	}
 
-	idle = empathy_idle_dup_singleton ();
-	presence = empathy_idle_get_state (idle);
-	g_object_unref (idle);
-
-	if (presence != MC_PRESENCE_AVAILABLE &&
-	    presence != MC_PRESENCE_UNSET) {
+	if (!check_available ()) {
 		empathy_conf_get_bool (conf, EMPATHY_PREFS_SOUNDS_DISABLED_AWAY,
 				       &res);
 		if (res) {
@@ -1634,3 +1645,31 @@
 					NULL);
 	}
 }
+
+gboolean
+empathy_notification_should_show (void)
+{
+	EmpathyConf *conf;
+	gboolean res;
+
+	conf = empathy_conf_get ();
+	res = FALSE;
+
+	empathy_conf_get_bool (conf, EMPATHY_PREFS_NOTIFICATIONS_ENABLED, &res);
+
+	if (!res) {
+		return FALSE;
+	}
+
+	if (!check_available ()) {
+		empathy_conf_get_bool (conf,
+				       EMPATHY_PREFS_NOTIFICATIONS_DISABLED_AWAY,
+				       &res);
+		if (res) {
+			return FALSE;
+		}
+	}
+
+	return TRUE;
+}
+

Modified: trunk/libempathy-gtk/empathy-ui-utils.h
==============================================================================
--- trunk/libempathy-gtk/empathy-ui-utils.h	(original)
+++ trunk/libempathy-gtk/empathy-ui-utils.h	Fri Jan 30 17:07:26 2009
@@ -131,6 +131,9 @@
 void        empathy_sound_play                          (GtkWidget        *widget,
 							 EmpathySound      sound_id);
 
+/* Notifications */
+gboolean    empathy_notification_should_show            (void);
+
 G_END_DECLS
 
 #endif /*  __EMPATHY_UI_UTILS_H__ */

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:26 2009
@@ -222,7 +222,10 @@
 
 	status_icon_update_icon (icon);
 	status_icon_update_tooltip (icon);
-	status_icon_update_notification (icon);
+
+	if (empathy_notification_should_show ()) {
+		status_icon_update_notification (icon);
+	}
 
 	if (!priv->blink_timeout) {
 		priv->blink_timeout = g_timeout_add (BLINK_TIMEOUT,
@@ -246,6 +249,10 @@
 
 	status_icon_update_tooltip (icon);
 	status_icon_update_icon (icon);
+
+	/* update notification anyway, as it's safe and we might have been
+	 * changed presence in the meanwhile
+	 */	
 	status_icon_update_notification (icon);
 
 	if (!priv->event && priv->blink_timeout) {
@@ -325,8 +332,20 @@
 static void
 status_icon_idle_notify_cb (EmpathyStatusIcon *icon)
 {
+	EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+
 	status_icon_update_icon (icon);
 	status_icon_update_tooltip (icon);
+
+	if (!empathy_notification_should_show ()) {
+		/* dismiss the outstanding notification if present */
+
+		if (priv->notification) {
+			notify_notification_close (priv->notification, NULL);
+			g_object_unref (priv->notification);
+			priv->notification = NULL;
+		}
+	}
 }
 
 static gboolean



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