diff options
-rw-r--r-- | libempathy-gtk/empathy-chat.c | 21 | ||||
-rw-r--r-- | libempathy-gtk/empathy-chat.h | 2 | ||||
-rw-r--r-- | src/empathy-chat-window.c | 39 |
3 files changed, 33 insertions, 29 deletions
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index 5dda2ce6b..358b1b982 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -160,6 +160,10 @@ struct _EmpathyChatPriv { /* A regex matching our own current nickname in the room, or %NULL if * !empathy_chat_is_room (). */ GRegex *highlight_regex; + + /* TRUE if empathy_chat_is_room() and there are unread highlighted messages. + * Cleared by empathy_chat_messages_read(). */ + gboolean highlighted; }; typedef struct { @@ -1484,6 +1488,11 @@ chat_message_received (EmpathyChat *chat, empathy_chat_view_edit_message (chat->view, message); } else { gboolean should_highlight = chat_should_highlight (chat, message); + + if (should_highlight) { + priv->highlighted = TRUE; + } + DEBUG ("Appending new message '%s' from %s (%d)", empathy_message_get_token (message), empathy_contact_get_alias (sender), @@ -4308,6 +4317,16 @@ empathy_chat_is_room (EmpathyChat *chat) return (priv->handle_type == TP_HANDLE_TYPE_ROOM); } +gboolean +empathy_chat_is_highlighted (EmpathyChat *chat) +{ + EmpathyChatPriv *priv = GET_PRIV (chat); + + g_return_val_if_fail (EMPATHY_IS_CHAT (chat), FALSE); + + return priv->highlighted; +} + guint empathy_chat_get_nb_unread_messages (EmpathyChat *self) { @@ -4336,6 +4355,8 @@ empathy_chat_messages_read (EmpathyChat *self) TP_TEXT_CHANNEL (priv->tp_chat), NULL, NULL); } + priv->highlighted = FALSE; + if (priv->unread_messages_when_offline > 0) { /* We can't ack those as the connection has gone away so just consider * them as read. */ diff --git a/libempathy-gtk/empathy-chat.h b/libempathy-gtk/empathy-chat.h index 0031410d6..00da3d641 100644 --- a/libempathy-gtk/empathy-chat.h +++ b/libempathy-gtk/empathy-chat.h @@ -89,7 +89,7 @@ gboolean empathy_chat_is_room (EmpathyChat *chat); void empathy_chat_set_show_contacts (EmpathyChat *chat, gboolean show); guint empathy_chat_get_nb_unread_messages (EmpathyChat *chat); - +gboolean empathy_chat_is_highlighted (EmpathyChat *chat); void empathy_chat_messages_read (EmpathyChat *self); gboolean empathy_chat_is_composing (EmpathyChat *chat); diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index 634968593..4e3f04807 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -928,10 +928,19 @@ chat_window_update_chat_tab_full (EmpathyChat *chat, g_free (markup); /* Update tab and menu label */ + if (empathy_chat_is_highlighted (chat)) { + markup = g_markup_printf_escaped ( + "<span color=\"red\" weight=\"bold\">%s</span>", + name); + } else { + markup = g_markup_escape_text (name, -1); + } + widget = g_object_get_data (G_OBJECT (chat), "chat-window-tab-label"); - gtk_label_set_text (GTK_LABEL (widget), name); + gtk_label_set_markup (GTK_LABEL (widget), markup); widget = g_object_get_data (G_OBJECT (chat), "chat-window-menu-label"); - gtk_label_set_text (GTK_LABEL (widget), name); + gtk_label_set_markup (GTK_LABEL (widget), markup); + g_free (markup); /* Update the window if it's the current chat */ if (priv->current_chat == chat) { @@ -1560,30 +1569,6 @@ chat_window_show_or_update_notification (EmpathyChatWindow *window, g_free (escaped); } -static void -chat_window_set_highlight_room_labels (EmpathyChat *chat) -{ - gchar *markup, *name; - GtkWidget *widget; - - if (!empathy_chat_is_room (chat)) - return; - - name = empathy_chat_dup_name (chat); - markup = g_markup_printf_escaped ( - "<span color=\"red\" weight=\"bold\">%s</span>", - name); - - widget = g_object_get_data (G_OBJECT (chat), "chat-window-tab-label"); - gtk_label_set_markup (GTK_LABEL (widget), markup); - - widget = g_object_get_data (G_OBJECT (chat), "chat-window-menu-label"); - gtk_label_set_markup (GTK_LABEL (widget), markup); - - g_free (name); - g_free (markup); -} - static gboolean empathy_chat_window_has_focus (EmpathyChatWindow *window) { @@ -1670,8 +1655,6 @@ chat_window_new_message_cb (EmpathyChat *chat, } if (needs_urgency) { - chat_window_set_highlight_room_labels (chat); - if (!has_focus) { chat_window_set_urgency_hint (window, TRUE); } |