]> 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 f4315f5fa57582ee887f0079dd9cdb7cf17b45fa..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);
@@ -557,12 +557,15 @@ chat_window_conv_activate_cb (GtkAction         *action,
        if (is_room) {
                const gchar *room;
                EmpathyAccount   *account;
-               gboolean     found;
+               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 (
@@ -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 *
@@ -1242,7 +1262,7 @@ chat_window_drag_data_received (GtkWidget        *widget,
                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);
@@ -1299,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) {