]> git.0d.be Git - empathy.git/commitdiff
Only play logout sound if switching to Offline from Available.
authorXavier Claessens <xclaesse@src.gnome.org>
Tue, 6 Jan 2009 16:46:11 +0000 (16:46 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Tue, 6 Jan 2009 16:46:11 +0000 (16:46 +0000)
svn path=/trunk/; revision=2028

libempathy-gtk/empathy-ui-utils.c
src/empathy-main-window.c

index 83141afbf3bd4f3680299ac8274ba745f061f6d5..da658dac6d5db57bb9a6f5febe401cce50450e34 100644 (file)
@@ -1513,7 +1513,6 @@ empathy_sound_pref_is_enabled (const char *key)
        presence = empathy_idle_get_state (idle);
        g_object_unref (idle);
 
-
        if (presence != MC_PRESENCE_AVAILABLE &&
            presence != MC_PRESENCE_UNSET) {
                empathy_conf_get_bool (conf, EMPATHY_PREFS_SOUNDS_DISABLED_AWAY,
index 58c4a0184b3c2b729c8ea2f21266bfc28b4844d2..c286b03997c2e68d2dabb647abd641d43d6ddb5b 100644 (file)
@@ -1116,7 +1116,9 @@ main_window_status_changed_cb (MissionControl           *mc,
                               const gchar              *unique_name,
                               EmpathyMainWindow        *window)
 {
-       McAccount *account;
+       McAccount   *account;
+       McPresence   old_state;
+       EmpathyIdle *idle;
 
        main_window_update_status (window);
 
@@ -1174,7 +1176,14 @@ main_window_status_changed_cb (MissionControl           *mc,
                main_window_error_display (window, account, message);
        }
 
+       idle = empathy_idle_new ();
+       old_state = empathy_idle_get_state (idle);
+
+       /* play the sound only when the state changes from the current to
+        * UNSET, as we receive this signal two times when disconnecting.
+        */
        if (status == TP_CONNECTION_STATUS_DISCONNECTED &&
+           old_state != MC_PRESENCE_UNSET &&
            empathy_sound_pref_is_enabled (EMPATHY_PREFS_SOUNDS_SERVICE_LOGOUT)) {
                ca_gtk_play_for_widget (GTK_WIDGET (window->window), 0,
                                        CA_PROP_EVENT_ID, "service-logout",
@@ -1184,15 +1193,12 @@ main_window_status_changed_cb (MissionControl           *mc,
 
        if (status == TP_CONNECTION_STATUS_CONNECTED) {
                GtkWidget *error_widget;
-               EmpathyIdle *idle;
-
-               idle = empathy_idle_new ();
 
                /* emit the sound only on first connect, i.e. when the saved
                 * idle state is MC_PRESENCE_UNSET.
                 */
 
-               if (empathy_idle_get_state (idle) == MC_PRESENCE_UNSET &&
+               if (old_state == MC_PRESENCE_UNSET &&
                    empathy_sound_pref_is_enabled (EMPATHY_PREFS_SOUNDS_SERVICE_LOGIN)) {
                        ca_gtk_play_for_widget (GTK_WIDGET (window->window), 0,
                                                CA_PROP_EVENT_ID, "service-login",
@@ -1200,8 +1206,6 @@ main_window_status_changed_cb (MissionControl           *mc,
                                                NULL);
                }
 
-               g_object_unref (idle);
-
                /* Account connected without error, remove error message if any */
                error_widget = g_hash_table_lookup (window->errors, account);
                if (error_widget) {
@@ -1211,6 +1215,7 @@ main_window_status_changed_cb (MissionControl           *mc,
        }
 
        g_object_unref (account);
+       g_object_unref (idle);
 }
 
 static void