]> git.0d.be Git - empathy.git/blobdiff - src/empathy-chat-window.c
Chat window's tab label changes the font color when got an incoming msg. (Fixes ...
[empathy.git] / src / empathy-chat-window.c
index 8e317f603029eaff735fedb0cd1ceb1a6547f4f9..8dcb68d2f62ea70799eb03ac9ae142b8515271ae 100644 (file)
@@ -176,7 +176,7 @@ chat_tab_style_set_cb (GtkWidget *hbox,
                "chat-window-tab-close-button");
        context = gtk_widget_get_pango_context (hbox);
 
-       metrics = pango_context_get_metrics (context, hbox->style->font_desc,
+       metrics = pango_context_get_metrics (context, gtk_widget_get_style (hbox)->font_desc,
                pango_context_get_language (context));
        char_width = pango_font_metrics_get_approximate_char_width (metrics);
        pango_font_metrics_unref (metrics);
@@ -408,7 +408,7 @@ chat_window_update_chat_tab (EmpathyChat *chat)
        EmpathyContact        *remote_contact;
        const gchar           *name;
        const gchar           *id;
-       McAccount             *account;
+       EmpathyAccount        *account;
        const gchar           *subject;
        const gchar           *status = NULL;
        GtkWidget             *widget;
@@ -429,7 +429,7 @@ chat_window_update_chat_tab (EmpathyChat *chat)
        remote_contact = empathy_chat_get_remote_contact (chat);
 
        DEBUG ("Updating chat tab, name=%s, account=%s, subject=%s, remote_contact=%p",
-               name, mc_account_get_unique_name (account), subject, remote_contact);
+               name, empathy_account_get_unique_name (account), subject, remote_contact);
 
        /* Update tab image */
        if (g_list_find (priv->chats_new_msg, chat)) {
@@ -461,7 +461,7 @@ chat_window_update_chat_tab (EmpathyChat *chat)
        append_markup_printf (tooltip,
                              "<b>%s</b><small> (%s)</small>",
                              id,
-                             mc_account_get_display_name (account));
+                             empathy_account_get_display_name (account));
 
        if (!EMP_STR_EMPTY (status)) {
                append_markup_printf (tooltip, "\n<i>%s</i>", status);
@@ -556,13 +556,16 @@ chat_window_conv_activate_cb (GtkAction         *action,
        is_room = empathy_chat_is_room (priv->current_chat);
        if (is_room) {
                const gchar *room;
-               McAccount   *account;
-               gboolean     found;
+               EmpathyAccount   *account;
+               gboolean     found = FALSE;
+               EmpathyChatroom *chatroom;
 
                room = empathy_chat_get_id (priv->current_chat);
                account = empathy_chat_get_account (priv->current_chat);
-               found = empathy_chatroom_manager_find (priv->chatroom_manager,
-                                                      account, room) != NULL;
+               chatroom = empathy_chatroom_manager_find (priv->chatroom_manager,
+                                                      account, room);
+               if (chatroom != NULL)
+                       found = empathy_chatroom_is_favorite (chatroom);
 
                DEBUG ("This room %s favorite", found ? "is" : "is not");
                gtk_toggle_action_set_active (
@@ -602,7 +605,7 @@ chat_window_favorite_toggled_cb (GtkToggleAction   *toggle_action,
 {
        EmpathyChatWindowPriv *priv = GET_PRIV (window);
        gboolean               active;
-       McAccount             *account;
+       EmpathyAccount        *account;
        const gchar           *room;
        EmpathyChatroom       *chatroom;
 
@@ -613,19 +616,16 @@ chat_window_favorite_toggled_cb (GtkToggleAction   *toggle_action,
        chatroom = empathy_chatroom_manager_find (priv->chatroom_manager,
                                                  account, room);
 
-       if (active && !chatroom) {
+       if (chatroom == NULL) {
                const gchar *name;
 
                name = empathy_chat_get_name (priv->current_chat);
                chatroom = empathy_chatroom_new_full (account, room, name, FALSE);
                empathy_chatroom_manager_add (priv->chatroom_manager, chatroom);
                g_object_unref (chatroom);
-               return;
-       }
+  }
 
-       if (!active && chatroom) {
-               empathy_chatroom_manager_remove (priv->chatroom_manager, chatroom);
-       }
+       empathy_chatroom_set_favorite (chatroom, active);
 }
 
 static void
@@ -994,6 +994,24 @@ chat_window_show_or_update_notification (EmpathyChatWindow *window,
        g_free (escaped);
 }
 
+static void
+chat_window_set_highlight_room_tab_label (EmpathyChat *chat)
+{
+       gchar *markup;
+       GtkWidget *widget;
+
+       if (empathy_chat_is_room (chat) == FALSE)
+               return;
+
+       markup = g_markup_printf_escaped ("<span color=\"%s\">%s</span>",
+                       "red",
+                       empathy_chat_get_name (chat));
+
+       widget = g_object_get_data (G_OBJECT (chat), "chat-window-tab-label");
+       gtk_label_set_markup (GTK_LABEL (widget), markup);
+       g_free (markup);
+}
+
 static void
 chat_window_new_message_cb (EmpathyChat       *chat,
                            EmpathyMessage    *message,
@@ -1026,6 +1044,11 @@ chat_window_new_message_cb (EmpathyChat       *chat,
                return;
        }
 
+       if (!g_list_find (priv->chats_new_msg, chat)) {
+               priv->chats_new_msg = g_list_prepend (priv->chats_new_msg, chat);
+               chat_window_update_chat_tab (chat);
+       }
+
        /* If empathy_chat_is_room () returns TRUE, that means it's a named MUC.
         * If empathy_chat_get_remote_contact () returns NULL, that means it's
         * an unamed MUC (msn-like).
@@ -1039,18 +1062,15 @@ chat_window_new_message_cb (EmpathyChat       *chat,
        }
 
        if (needs_urgency) {
-               if (!has_focus)
+               if (!has_focus) {
                        chat_window_set_urgency_hint (window, TRUE);
+                       chat_window_set_highlight_room_tab_label (chat);
+               }
 
                empathy_sound_play (GTK_WIDGET (priv->dialog),
                    EMPATHY_SOUND_MESSAGE_INCOMING);
                chat_window_show_or_update_notification (window, message, chat);
        }
-
-       if (!g_list_find (priv->chats_new_msg, chat)) {
-               priv->chats_new_msg = g_list_prepend (priv->chats_new_msg, chat);
-               chat_window_update_chat_tab (chat);
-       }
 }
 
 static GtkNotebook *
@@ -1235,41 +1255,40 @@ chat_window_drag_data_received (GtkWidget        *widget,
        if (info == DND_DRAG_TYPE_CONTACT_ID) {
                EmpathyChat           *chat;
                EmpathyChatWindow     *old_window;
-               McAccount             *account;
+               EmpathyAccount        *account;
+               EmpathyAccountManager *account_manager;
                const gchar           *id;
                gchar                **strv;
                const gchar           *account_id;
                const gchar           *contact_id;
 
-               id = (const gchar*) selection->data;
+               id = (const gchar*) gtk_selection_data_get_data (selection);
+               account_manager = empathy_account_manager_dup_singleton ();
 
                DEBUG ("DND contact from roster with id:'%s'", id);
 
                strv = g_strsplit (id, "/", 2);
                account_id = strv[0];
                contact_id = strv[1];
-               account = mc_account_lookup (account_id);
+               account = empathy_account_manager_lookup (account_manager, account_id);
                chat = empathy_chat_window_find_chat (account, contact_id);
 
                if (!chat) {
-                       EmpathyAccountManager *account_manager;
                        TpConnection *connection;
 
-                       account_manager = empathy_account_manager_dup_singleton ();
-                       connection = empathy_account_manager_get_connection (
-                               account_manager, account);
+                       connection = empathy_account_get_connection (account);
 
                        if (connection) {
                                empathy_dispatcher_chat_with_contact_id (
                                        connection, contact_id, NULL, NULL);
                        }
 
-                       g_object_unref (account_manager);
                        g_object_unref (account);
                        g_strfreev (strv);
                        return;
                }
                g_object_unref (account);
+               g_object_unref (account_manager);
                g_strfreev (strv);
 
                old_window = chat_window_find_chat (chat);
@@ -1300,7 +1319,7 @@ chat_window_drag_data_received (GtkWidget        *widget,
 
                DEBUG ("DND tab");
 
-               chat = (void *) selection->data;
+               chat = (void *) gtk_selection_data_get_data (selection);
                old_window = chat_window_find_chat (*chat);
 
                if (old_window) {
@@ -1740,12 +1759,11 @@ empathy_chat_window_has_focus (EmpathyChatWindow *window)
 }
 
 EmpathyChat *
-empathy_chat_window_find_chat (McAccount   *account,
+empathy_chat_window_find_chat (EmpathyAccount   *account,
                               const gchar *id)
 {
        GList *l;
 
-       g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
        g_return_val_if_fail (!EMP_STR_EMPTY (id), NULL);
 
        for (l = chat_windows; l; l = l->next) {