]> git.0d.be Git - empathy.git/blobdiff - src/empathy-chat-window.c
Merge branch 'sasl'
[empathy.git] / src / empathy-chat-window.c
index 4aba2af2d2a9dfc47a9db69ccd9dc86cae207c06..16329ee7be4ebde149b65519b669b92f88e85dd3 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /*
  * Copyright (C) 2003-2007 Imendio AB
- * Copyright (C) 2007-2008 Collabora Ltd.
+ * Copyright (C) 2007-2010 Collabora Ltd.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -51,7 +51,7 @@
 #include <libempathy-gtk/empathy-log-window.h>
 #include <libempathy-gtk/empathy-geometry.h>
 #include <libempathy-gtk/empathy-smiley-manager.h>
-#include <libempathy-gtk/empathy-sound.h>
+#include <libempathy-gtk/empathy-sound-manager.h>
 #include <libempathy-gtk/empathy-ui-utils.h>
 #include <libempathy-gtk/empathy-notify-manager.h>
 
@@ -113,6 +113,10 @@ typedef struct {
        guint32    x_user_action_time;
 
        GSettings *gsettings_chat;
+       GSettings *gsettings_notif;
+       GSettings *gsettings_ui;
+
+       EmpathySoundManager *sound_mgr;
 } EmpathyChatWindowPriv;
 
 static GList *chat_windows = NULL;
@@ -1285,14 +1289,9 @@ chat_window_show_or_update_notification (EmpathyChatWindow *window,
        if (!empathy_notify_manager_notification_is_enabled (priv->notify_mgr)) {
                return;
        } else {
-               GSettings *gsettings = g_settings_new (
-                               EMPATHY_PREFS_NOTIFICATIONS_SCHEMA);
-
-               res = g_settings_get_boolean (gsettings,
+               res = g_settings_get_boolean (priv->gsettings_notif,
                                EMPATHY_PREFS_NOTIFICATIONS_FOCUS);
 
-               g_object_unref (gsettings);
-
                if (!res) {
                        return;
                }
@@ -1384,6 +1383,7 @@ empathy_chat_window_has_focus (EmpathyChatWindow *window)
 static void
 chat_window_new_message_cb (EmpathyChat       *chat,
                            EmpathyMessage    *message,
+                           gboolean pending,
                            EmpathyChatWindow *window)
 {
        EmpathyChatWindowPriv *priv;
@@ -1405,7 +1405,7 @@ chat_window_new_message_cb (EmpathyChat       *chat,
        sender = empathy_message_get_sender (message);
 
        if (empathy_contact_is_user (sender)) {
-               empathy_sound_play (GTK_WIDGET (priv->dialog),
+               empathy_sound_manager_play (priv->sound_mgr, GTK_WIDGET (priv->dialog),
                                    EMPATHY_SOUND_MESSAGE_OUTGOING);
        }
 
@@ -1456,9 +1456,13 @@ chat_window_new_message_cb (EmpathyChat       *chat,
                        chat_window_set_highlight_room_tab_label (chat);
                }
 
-               empathy_sound_play (GTK_WIDGET (priv->dialog),
+               empathy_sound_manager_play (priv->sound_mgr, GTK_WIDGET (priv->dialog),
                    EMPATHY_SOUND_MESSAGE_INCOMING);
-               chat_window_show_or_update_notification (window, message, chat);
+
+               /* Pending messages have already been displayed in the approver, so we don't
+               * display a notification for those. */
+               if (!pending)
+                       chat_window_show_or_update_notification (window, message, chat);
        }
 
        /* update the number of unread messages and the window icon */
@@ -1874,6 +1878,9 @@ chat_window_finalize (GObject *object)
        g_object_unref (priv->chatroom_manager);
        g_object_unref (priv->notify_mgr);
        g_object_unref (priv->gsettings_chat);
+       g_object_unref (priv->gsettings_notif);
+       g_object_unref (priv->gsettings_ui);
+       g_object_unref (priv->sound_mgr);
 
        if (priv->notification != NULL) {
                notify_notification_close (priv->notification, NULL);
@@ -1985,8 +1992,12 @@ empathy_chat_window_init (EmpathyChatWindow *window)
        g_object_unref (gui);
 
        priv->gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
+       priv->gsettings_notif = g_settings_new (EMPATHY_PREFS_NOTIFICATIONS_SCHEMA);
+       priv->gsettings_ui = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
        priv->chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL);
 
+       priv->sound_mgr = empathy_sound_manager_dup_singleton ();
+
        priv->notebook = gtk_notebook_new ();
 
        g_signal_connect (priv->notebook, "create-window",
@@ -2182,15 +2193,12 @@ empathy_chat_window_add_chat (EmpathyChatWindow *window,
 
        /* If this window has just been created, position it */
        if (priv->chats == NULL) {
-               GSettings *gsettings = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
                const gchar *name = "chat-window";
                gboolean     separate_windows;
 
-               separate_windows = g_settings_get_boolean (gsettings,
+               separate_windows = g_settings_get_boolean (priv->gsettings_ui,
                                EMPATHY_PREFS_UI_SEPARATE_CHAT_WINDOWS);
 
-               g_object_unref (gsettings);
-
                if (empathy_chat_is_room (chat))
                        name = "room-window";