Always set urgency hint on p2p chat windows when receiving a message.
authorXavier Claessens <xclaesse@src.gnome.org>
Thu, 17 Apr 2008 21:50:00 +0000 (21:50 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Thu, 17 Apr 2008 21:50:00 +0000 (21:50 +0000)
svn path=/trunk/; revision=962

libempathy-gtk/empathy-chat.c
libempathy-gtk/empathy-chat.h
libempathy/empathy-tp-chat.c
libempathy/empathy-tp-chat.h
src/empathy-chat-window.c

index cdddf2d6c46379d5f0b43b8b4e419fb4005d145e..3810e209b19354575c807a140b67cf74d1a45e04 100644 (file)
@@ -1754,6 +1754,20 @@ empathy_chat_get_remote_contact (EmpathyChat *chat)
        return priv->remote_contact;
 }
 
+guint
+empathy_chat_get_members_count (EmpathyChat *chat)
+{
+       EmpathyChatPriv *priv = GET_PRIV (chat);
+
+       g_return_val_if_fail (EMPATHY_IS_CHAT (chat), 0);
+
+       if (priv->tp_chat) {
+               return empathy_tp_chat_get_members_count (priv->tp_chat);
+       }
+
+       return 0;
+}
+
 void
 empathy_chat_clear (EmpathyChat *chat)
 {
index 49ce917231c3c5bdea91acf9de21f5098b6179d0..2b5e6424761f251f2ff46a8ec19d33951302bc04 100644 (file)
@@ -71,6 +71,7 @@ const gchar *      empathy_chat_get_id               (EmpathyChat   *chat);
 const gchar *      empathy_chat_get_name             (EmpathyChat   *chat);
 const gchar *      empathy_chat_get_subject          (EmpathyChat   *chat);
 EmpathyContact *   empathy_chat_get_remote_contact   (EmpathyChat   *chat);
+guint              empathy_chat_get_members_count    (EmpathyChat   *chat);
 void               empathy_chat_clear                (EmpathyChat   *chat);
 void               empathy_chat_scroll_down          (EmpathyChat   *chat);
 void               empathy_chat_cut                  (EmpathyChat   *chat);
index 07d59cd8427ceaaca13404046088350ef16ecbaa..4300147594f725ad17d67c58d54ffac4ed49f325 100644 (file)
@@ -54,7 +54,7 @@ struct _EmpathyTpChatPriv {
        gboolean               had_properties_list;
        GPtrArray             *properties;
        gboolean               ready;
-       guint                  nb_members;
+       guint                  members_count;
 };
 
 typedef struct {
@@ -124,8 +124,8 @@ tp_chat_member_added_cb (EmpathyTpGroup *group,
 {
        EmpathyTpChatPriv *priv = GET_PRIV (chat);
 
-       priv->nb_members++;
-       if (priv->nb_members > 2 && priv->remote_contact) {
+       priv->members_count++;
+       if (priv->members_count > 2 && priv->remote_contact) {
                /* We now have more than 2 members, this is not a p2p chat
                 * anymore. Remove the remote-contact as it makes no sense, the
                 * EmpathyContactList interface must be used now. */
@@ -133,7 +133,7 @@ tp_chat_member_added_cb (EmpathyTpGroup *group,
                priv->remote_contact = NULL;
                g_object_notify (G_OBJECT (chat), "remote-contact");
        }
-       if (priv->nb_members <= 2 && !priv->remote_contact &&
+       if (priv->members_count <= 2 && !priv->remote_contact &&
            !empathy_contact_is_user (contact)) {
                /* This is a p2p chat, if it's not ourself that means this is
                 * the remote contact with who we are chatting. This is to
@@ -158,8 +158,8 @@ tp_chat_member_removed_cb (EmpathyTpGroup *group,
 {
        EmpathyTpChatPriv *priv = GET_PRIV (chat);
 
-       priv->nb_members--;
-       if (priv->nb_members <= 2 && !priv->remote_contact) {
+       priv->members_count--;
+       if (priv->members_count <= 2 && !priv->remote_contact) {
                GList *members, *l;
 
                /* We are not a MUC anymore, get the remote contact back */
@@ -775,6 +775,8 @@ tp_chat_channel_ready_cb (EmpathyTpChat *chat)
                                  G_CALLBACK (tp_chat_local_pending_cb),
                                  chat);
                empathy_run_until_ready (priv->group);
+       } else {
+               priv->members_count = 2;
        }
        
        if (tp_proxy_has_interface_by_id (priv->channel,
@@ -1146,6 +1148,16 @@ empathy_tp_chat_is_ready (EmpathyTpChat *chat)
        return priv->ready;
 }
 
+guint
+empathy_tp_chat_get_members_count (EmpathyTpChat *chat)
+{
+       EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+       g_return_val_if_fail (EMPATHY_IS_TP_CHAT (chat), 0);
+
+       return priv->members_count;
+}
+
 McAccount *
 empathy_tp_chat_get_account (EmpathyTpChat *chat)
 {
index 27cbd557cfd01be64e5fbab39821be910e3a5125..22ebee57ad681830fc092b9c8a030c87cd7a6c68 100644 (file)
@@ -59,6 +59,7 @@ const gchar *  empathy_tp_chat_get_id               (EmpathyTpChat      *chat);
 EmpathyContact*empathy_tp_chat_get_remote_contact   (EmpathyTpChat      *chat);
 McAccount *    empathy_tp_chat_get_account          (EmpathyTpChat      *chat);
 gboolean       empathy_tp_chat_is_ready             (EmpathyTpChat      *chat);
+guint          empathy_tp_chat_get_members_count    (EmpathyTpChat      *chat);
 void           empathy_tp_chat_send                 (EmpathyTpChat      *chat,
                                                     EmpathyMessage     *message);
 void           empathy_tp_chat_set_state            (EmpathyTpChat      *chat,
index 9316d9868fccced1be5f8e4571214f41fd32ff1a..b841506ba639bac213b9ee664921e29c6d4a4a22 100644 (file)
@@ -757,12 +757,16 @@ chat_window_new_message_cb (EmpathyChat       *chat,
        priv = GET_PRIV (window);
 
        has_focus = empathy_chat_window_has_focus (window);
-       
+
        if (has_focus && priv->current_chat == chat) {
                return;
        }
        
-       needs_urgency = empathy_message_should_highlight (message);
+       if (empathy_chat_get_members_count (chat) > 2) {
+               needs_urgency = empathy_message_should_highlight (message);
+       } else {
+               needs_urgency = TRUE;
+       }
 
        if (needs_urgency && !has_focus) {
                chat_window_set_urgency_hint (window, TRUE);