diff options
author | Will Thompson <will@willthompson.co.uk> | 2012-01-26 00:01:32 +0800 |
---|---|---|
committer | Will Thompson <will@willthompson.co.uk> | 2012-01-26 00:01:32 +0800 |
commit | ddd8a9a000833d87260f81c4459063b32e2e14e7 (patch) | |
tree | e41b456cfd9857fec9f122be2fdd94cc4da07eab | |
parent | 6b453cffcd14296f9625eb54af7cb87dc75c9c5f (diff) | |
parent | cb4d7495d1ed8fabe40e552a4107ce6398814323 (diff) | |
download | gsoc2013-empathy-ddd8a9a000833d87260f81c4459063b32e2e14e7.tar gsoc2013-empathy-ddd8a9a000833d87260f81c4459063b32e2e14e7.tar.gz gsoc2013-empathy-ddd8a9a000833d87260f81c4459063b32e2e14e7.tar.bz2 gsoc2013-empathy-ddd8a9a000833d87260f81c4459063b32e2e14e7.tar.lz gsoc2013-empathy-ddd8a9a000833d87260f81c4459063b32e2e14e7.tar.xz gsoc2013-empathy-ddd8a9a000833d87260f81c4459063b32e2e14e7.tar.zst gsoc2013-empathy-ddd8a9a000833d87260f81c4459063b32e2e14e7.zip |
Merge branch 'highlight-regex'
-rw-r--r-- | libempathy-gtk/empathy-chat-text-view.c | 6 | ||||
-rw-r--r-- | libempathy-gtk/empathy-chat-text-view.h | 3 | ||||
-rw-r--r-- | libempathy-gtk/empathy-chat-view.c | 6 | ||||
-rw-r--r-- | libempathy-gtk/empathy-chat-view.h | 6 | ||||
-rw-r--r-- | libempathy-gtk/empathy-chat.c | 153 | ||||
-rw-r--r-- | libempathy-gtk/empathy-theme-adium.c | 19 | ||||
-rw-r--r-- | libempathy-gtk/empathy-theme-boxes.c | 3 | ||||
-rw-r--r-- | libempathy-gtk/empathy-theme-irc.c | 5 | ||||
-rw-r--r-- | libempathy/empathy-message.c | 69 | ||||
-rw-r--r-- | libempathy/empathy-message.h | 1 | ||||
-rw-r--r-- | libempathy/empathy-tp-chat.c | 19 | ||||
-rw-r--r-- | src/empathy-chat-window.c | 3 | ||||
-rw-r--r-- | src/empathy-preferences.c | 16 |
13 files changed, 205 insertions, 104 deletions
diff --git a/libempathy-gtk/empathy-chat-text-view.c b/libempathy-gtk/empathy-chat-text-view.c index c251f1f42..60d642ccb 100644 --- a/libempathy-gtk/empathy-chat-text-view.c +++ b/libempathy-gtk/empathy-chat-text-view.c @@ -717,7 +717,8 @@ chat_text_view_scroll_down (EmpathyChatView *view) static void chat_text_view_append_message (EmpathyChatView *view, - EmpathyMessage *msg) + EmpathyMessage *msg, + gboolean should_highlight) { EmpathyChatTextView *text_view = EMPATHY_CHAT_TEXT_VIEW (view); EmpathyChatTextViewPriv *priv = GET_PRIV (text_view); @@ -739,7 +740,8 @@ chat_text_view_append_message (EmpathyChatView *view, chat_text_maybe_append_date_and_time (text_view, timestamp); if (EMPATHY_CHAT_TEXT_VIEW_GET_CLASS (view)->append_message) { EMPATHY_CHAT_TEXT_VIEW_GET_CLASS (view)->append_message (text_view, - msg); + msg, + should_highlight); } if (bottom) { diff --git a/libempathy-gtk/empathy-chat-text-view.h b/libempathy-gtk/empathy-chat-text-view.h index 12edbcc64..ce83fd2fa 100644 --- a/libempathy-gtk/empathy-chat-text-view.h +++ b/libempathy-gtk/empathy-chat-text-view.h @@ -56,7 +56,8 @@ struct _EmpathyChatTextViewClass { /* <vtable> */ void (*append_message) (EmpathyChatTextView *view, - EmpathyMessage *message); + EmpathyMessage *message, + gboolean should_highlight); }; #define EMPATHY_CHAT_TEXT_VIEW_TAG_CUT "cut" diff --git a/libempathy-gtk/empathy-chat-view.c b/libempathy-gtk/empathy-chat-view.c index 088b12084..f5d6ddf09 100644 --- a/libempathy-gtk/empathy-chat-view.c +++ b/libempathy-gtk/empathy-chat-view.c @@ -61,13 +61,15 @@ chat_view_base_init (gpointer klass) void empathy_chat_view_append_message (EmpathyChatView *view, - EmpathyMessage *msg) + EmpathyMessage *msg, + gboolean should_highlight) { g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view)); if (EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->append_message) { EMPATHY_TYPE_CHAT_VIEW_GET_IFACE (view)->append_message (view, - msg); + msg, + should_highlight); } } diff --git a/libempathy-gtk/empathy-chat-view.h b/libempathy-gtk/empathy-chat-view.h index bc9e91761..2c47e0429 100644 --- a/libempathy-gtk/empathy-chat-view.h +++ b/libempathy-gtk/empathy-chat-view.h @@ -43,7 +43,8 @@ struct _EmpathyChatViewIface { /* VTabled */ void (*append_message) (EmpathyChatView *view, - EmpathyMessage *msg); + EmpathyMessage *msg, + gboolean should_highlight); void (*append_event) (EmpathyChatView *view, const gchar *str); void (*append_event_markup) (EmpathyChatView *view, @@ -81,7 +82,8 @@ struct _EmpathyChatViewIface { GType empathy_chat_view_get_type (void) G_GNUC_CONST; void empathy_chat_view_append_message (EmpathyChatView *view, - EmpathyMessage *msg); + EmpathyMessage *msg, + gboolean should_highlight); void empathy_chat_view_append_event (EmpathyChatView *view, const gchar *str); void empathy_chat_view_append_event_markup (EmpathyChatView *view, diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index be5d71ec7..81350220b 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -73,6 +73,7 @@ struct _EmpathyChatPriv { gchar *id; gchar *name; gchar *subject; + EmpathyContact *self_contact; EmpathyContact *remote_contact; gboolean show_contacts; @@ -155,6 +156,10 @@ struct _EmpathyChatPriv { * the keyboard or the mouse. We can't ask GTK for the most recent * event, because it will be a notify event. Instead we track it here */ GdkEventType most_recent_event_type; + + /* A regex matching our own current nickname in the room, or %NULL if + * !empathy_chat_is_room(). */ + GRegex *highlight_regex; }; typedef struct { @@ -896,14 +901,12 @@ chat_command_me (EmpathyChat *chat, if (!tp_text_channel_supports_message_type (channel, TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION)) { /* Action message are not supported, 'simulate' the action */ - EmpathyContact *self_contact; gchar *tmp; - self_contact = empathy_tp_chat_get_self_contact (priv->tp_chat); /* The TpChat can't be ready if it doesn't have the self contact */ - g_assert (self_contact != NULL); + g_assert (priv->self_contact != NULL); - tmp = g_strdup_printf ("%s %s", empathy_contact_get_alias (self_contact), + tmp = g_strdup_printf ("%s %s", empathy_contact_get_alias (priv->self_contact), strv[1]); message = tp_client_message_new_text (TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, tmp); @@ -1383,6 +1386,86 @@ chat_state_changed_cb (EmpathyTpChat *tp_chat, } } +static GRegex * +get_highlight_regex_for (const gchar *name) +{ + GRegex *regex; + gchar *name_esc, *pattern; + GError *error = NULL; + + name_esc = g_regex_escape_string (name, -1); + pattern = g_strdup_printf ("\\b%s\\b", name_esc); + regex = g_regex_new (pattern, G_REGEX_CASELESS | G_REGEX_OPTIMIZE, 0, + &error); + + if (regex == NULL) { + DEBUG ("couldn't compile regex /%s/: %s", pattern, + error->message); + + g_error_free (error); + } + + g_free (pattern); + g_free (name_esc); + + return regex; +} + +/* Called when priv->self_contact changes, or priv->self_contact:alias changes. + * Only connected if empathy_chat_is_room() is TRUE, for obvious-ish reasons. + */ +static void +chat_self_contact_alias_changed_cb (EmpathyChat *chat) +{ + EmpathyChatPriv *priv = GET_PRIV (chat); + + tp_clear_pointer (&priv->highlight_regex, g_regex_unref); + + if (priv->self_contact != NULL) { + const gchar *alias = empathy_contact_get_alias (priv->self_contact); + + g_return_if_fail (alias != NULL); + priv->highlight_regex = get_highlight_regex_for (alias); + } +} + +static gboolean +chat_should_highlight (EmpathyChat *chat, + EmpathyMessage *message) +{ + EmpathyChatPriv *priv = GET_PRIV (chat); + const gchar *msg; + TpChannelTextMessageFlags flags; + + g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE); + + if (!empathy_chat_is_room (chat)) { + return FALSE; + } + + if (!empathy_message_is_incoming (message)) { + return FALSE; + } + + msg = empathy_message_get_body (message); + if (!msg) { + return FALSE; + } + + flags = empathy_message_get_flags (message); + if (flags & TP_CHANNEL_TEXT_MESSAGE_FLAG_SCROLLBACK) { + /* FIXME: Ideally we shouldn't highlight scrollback messages only if they + * have already been received by the user before (and so are in the logs) */ + return FALSE; + } + + if (priv->highlight_regex == NULL) { + return FALSE; + } + + return g_regex_match (priv->highlight_regex, msg, 0, NULL); +} + static void chat_message_received (EmpathyChat *chat, EmpathyMessage *message, @@ -1400,19 +1483,21 @@ chat_message_received (EmpathyChat *chat, empathy_chat_view_edit_message (chat->view, message); } else { + gboolean should_highlight = chat_should_highlight (chat, message); DEBUG ("Appending new message '%s' from %s (%d)", empathy_message_get_token (message), empathy_contact_get_alias (sender), empathy_contact_get_handle (sender)); - empathy_chat_view_append_message (chat->view, message); + empathy_chat_view_append_message (chat->view, message, should_highlight); if (empathy_message_is_incoming (message)) { priv->unread_messages++; g_object_notify (G_OBJECT (chat), "nb-unread-messages"); } - g_signal_emit (chat, signals[NEW_MESSAGE], 0, message, pending); + g_signal_emit (chat, signals[NEW_MESSAGE], 0, message, pending, + should_highlight); } /* We received a message so the contact is no longer @@ -2495,13 +2580,15 @@ got_filtered_messages_cb (GObject *manager, "sender", empathy_message_get_sender (message), NULL); - empathy_chat_view_append_message (chat->view, syn_msg); + empathy_chat_view_append_message (chat->view, syn_msg, + chat_should_highlight (chat, syn_msg)); empathy_chat_view_edit_message (chat->view, message); g_object_unref (syn_msg); } else { /* append the latest message */ - empathy_chat_view_append_message (chat->view, message); + empathy_chat_view_append_message (chat->view, message, + chat_should_highlight (chat, message)); } g_object_unref (message); @@ -2800,6 +2887,32 @@ empathy_chat_set_show_contacts (EmpathyChat *chat, } static void +chat_self_contact_changed_cb (EmpathyChat *chat) +{ + EmpathyChatPriv *priv = GET_PRIV (chat); + + if (priv->self_contact != NULL) { + g_signal_handlers_disconnect_by_func (priv->self_contact, + chat_self_contact_alias_changed_cb, + chat); + } + g_clear_object (&priv->self_contact); + + priv->self_contact = empathy_tp_chat_get_self_contact (priv->tp_chat); + if (priv->self_contact != NULL) { + g_object_ref (priv->self_contact); + + if (empathy_chat_is_room (chat)) { + g_signal_connect_swapped (priv->self_contact, "notify::alias", + G_CALLBACK (chat_self_contact_alias_changed_cb), + chat); + } + } + + chat_self_contact_alias_changed_cb (chat); +} + +static void chat_remote_contact_changed_cb (EmpathyChat *chat) { EmpathyChatPriv *priv = GET_PRIV (chat); @@ -3154,6 +3267,8 @@ chat_finalize (GObject *object) g_signal_handlers_disconnect_by_func (priv->tp_chat, chat_members_changed_cb, chat); g_signal_handlers_disconnect_by_func (priv->tp_chat, + chat_self_contact_changed_cb, chat); + g_signal_handlers_disconnect_by_func (priv->tp_chat, chat_remote_contact_changed_cb, chat); g_signal_handlers_disconnect_by_func (priv->tp_chat, chat_title_changed_cb, chat); @@ -3165,6 +3280,12 @@ chat_finalize (GObject *object) if (priv->account) { g_object_unref (priv->account); } + if (priv->self_contact) { + g_signal_handlers_disconnect_by_func (priv->self_contact, + chat_self_contact_alias_changed_cb, + chat); + g_object_unref (priv->self_contact); + } if (priv->remote_contact) { g_object_unref (priv->remote_contact); } @@ -3178,6 +3299,8 @@ chat_finalize (GObject *object) g_free (priv->subject); g_completion_free (priv->completion); + tp_clear_pointer (&priv->highlight_regex, g_regex_unref); + G_OBJECT_CLASS (empathy_chat_parent_class)->finalize (object); } @@ -3300,6 +3423,14 @@ empathy_chat_class_init (EmpathyChatClass *klass) G_TYPE_NONE, 1, G_TYPE_BOOLEAN); + /** + * EmpathyChat::new-message: + * @self: the #EmpathyChat + * @message: the new message + * @pending: whether the message was in the pending queue when @self + * was created + * @should_highlight: %TRUE if the message mentions the local user + */ signals[NEW_MESSAGE] = g_signal_new ("new-message", G_OBJECT_CLASS_TYPE (object_class), @@ -3308,7 +3439,7 @@ empathy_chat_class_init (EmpathyChatClass *klass) NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, - 2, EMPATHY_TYPE_MESSAGE, G_TYPE_BOOLEAN); + 3, EMPATHY_TYPE_MESSAGE, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); signals[PART_COMMAND_ENTERED] = g_signal_new ("part-command-entered", @@ -3874,6 +4005,9 @@ empathy_chat_set_tp_chat (EmpathyChat *chat, g_signal_connect (tp_chat, "member-renamed", G_CALLBACK (chat_member_renamed_cb), chat); + g_signal_connect_swapped (tp_chat, "notify::self-contact", + G_CALLBACK (chat_self_contact_changed_cb), + chat); g_signal_connect_swapped (tp_chat, "notify::remote-contact", G_CALLBACK (chat_remote_contact_changed_cb), chat); @@ -3895,6 +4029,7 @@ empathy_chat_set_tp_chat (EmpathyChat *chat, /* Get initial value of properties */ chat_sms_channel_changed_cb (chat); + chat_self_contact_changed_cb (chat); chat_remote_contact_changed_cb (chat); chat_title_changed_cb (chat); chat_subject_changed_cb (chat); diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c index 7b0cd2169..98df46b79 100644 --- a/libempathy-gtk/empathy-theme-adium.c +++ b/libempathy-gtk/empathy-theme-adium.c @@ -132,13 +132,15 @@ typedef struct { guint type; EmpathyMessage *msg; char *str; + gboolean should_highlight; } QueuedItem; static QueuedItem * queue_item (GQueue *queue, guint type, EmpathyMessage *msg, - const char *str) + const char *str, + gboolean should_highlight) { QueuedItem *item = g_slice_new0 (QueuedItem); @@ -146,6 +148,7 @@ queue_item (GQueue *queue, if (msg != NULL) item->msg = g_object_ref (msg); item->str = g_strdup (str); + item->should_highlight = should_highlight; g_queue_push_tail (queue, item); @@ -775,7 +778,8 @@ theme_adium_remove_all_focus_marks (EmpathyThemeAdium *theme) static void theme_adium_append_message (EmpathyChatView *view, - EmpathyMessage *msg) + EmpathyMessage *msg, + gboolean should_highlight) { EmpathyThemeAdium *theme = EMPATHY_THEME_ADIUM (view); EmpathyThemeAdiumPriv *priv = GET_PRIV (theme); @@ -797,7 +801,7 @@ theme_adium_append_message (EmpathyChatView *view, gboolean action; if (priv->pages_loading != 0) { - queue_item (&priv->message_queue, QUEUED_MESSAGE, msg, NULL); + queue_item (&priv->message_queue, QUEUED_MESSAGE, msg, NULL, should_highlight); return; } @@ -886,7 +890,7 @@ theme_adium_append_message (EmpathyChatView *view, } else { g_string_append (message_classes, " incoming"); } - if (empathy_message_should_highlight (msg)) { + if (should_highlight) { g_string_append (message_classes, " mention"); } if (empathy_message_get_tptype (msg) == TP_CHANNEL_TEXT_MESSAGE_TYPE_AUTO_REPLY) { @@ -975,7 +979,7 @@ theme_adium_append_event (EmpathyChatView *view, gchar *str_escaped; if (priv->pages_loading != 0) { - queue_item (&priv->message_queue, QUEUED_EVENT, NULL, str); + queue_item (&priv->message_queue, QUEUED_EVENT, NULL, str, FALSE); return; } @@ -1005,7 +1009,7 @@ theme_adium_edit_message (EmpathyChatView *view, GError *error = NULL; if (priv->pages_loading != 0) { - queue_item (&priv->message_queue, QUEUED_EDIT, message, NULL); + queue_item (&priv->message_queue, QUEUED_EDIT, message, NULL, FALSE); return; } @@ -1345,7 +1349,8 @@ theme_adium_load_finished_cb (WebKitWebView *view, switch (item->type) { case QUEUED_MESSAGE: - theme_adium_append_message (chat_view, item->msg); + theme_adium_append_message (chat_view, item->msg, + item->should_highlight); break; case QUEUED_EDIT: diff --git a/libempathy-gtk/empathy-theme-boxes.c b/libempathy-gtk/empathy-theme-boxes.c index b9fd08d84..cf0c65268 100644 --- a/libempathy-gtk/empathy-theme-boxes.c +++ b/libempathy-gtk/empathy-theme-boxes.c @@ -337,7 +337,8 @@ theme_boxes_maybe_append_header (EmpathyThemeBoxes *theme, static void theme_boxes_append_message (EmpathyChatTextView *view, - EmpathyMessage *message) + EmpathyMessage *message, + gboolean should_highlight) { EmpathyContact *sender; diff --git a/libempathy-gtk/empathy-theme-irc.c b/libempathy-gtk/empathy-theme-irc.c index 2ee81a23e..ed8e3b380 100644 --- a/libempathy-gtk/empathy-theme-irc.c +++ b/libempathy-gtk/empathy-theme-irc.c @@ -50,7 +50,8 @@ theme_irc_create_tags (EmpathyThemeIrc *theme) static void theme_irc_append_message (EmpathyChatTextView *view, - EmpathyMessage *message) + EmpathyMessage *message, + gboolean should_highlight) { GtkTextBuffer *buffer; const gchar *name; @@ -77,7 +78,7 @@ theme_irc_append_message (EmpathyChatTextView *view, if (empathy_contact_is_user (contact)) { nick_tag = EMPATHY_THEME_IRC_TAG_NICK_SELF; } else { - if (empathy_message_should_highlight (message)) { + if (should_highlight) { nick_tag = EMPATHY_THEME_IRC_TAG_NICK_HIGHLIGHT; } else { nick_tag = EMPATHY_THEME_IRC_TAG_NICK_OTHER; diff --git a/libempathy/empathy-message.c b/libempathy/empathy-message.c index 995f49ab7..6111bcd8c 100644 --- a/libempathy/empathy-message.c +++ b/libempathy/empathy-message.c @@ -633,75 +633,6 @@ empathy_message_is_backlog (EmpathyMessage *message) return priv->is_backlog; } -#define IS_SEPARATOR(ch) (ch == ' ' || ch == ',' || ch == '.' || ch == ':') -gboolean -empathy_message_should_highlight (EmpathyMessage *message) -{ - EmpathyContact *contact; - const gchar *msg, *to; - gchar *cf_msg, *cf_to; - gchar *ch; - gboolean ret_val; - TpChannelTextMessageFlags flags; - - g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE); - - ret_val = FALSE; - - msg = empathy_message_get_body (message); - if (!msg) { - return FALSE; - } - - contact = empathy_message_get_receiver (message); - if (!contact || !empathy_contact_is_user (contact)) { - return FALSE; - } - - to = empathy_contact_get_alias (contact); - if (!to) { - return FALSE; - } - - flags = empathy_message_get_flags (message); - if (flags & TP_CHANNEL_TEXT_MESSAGE_FLAG_SCROLLBACK) { - /* FIXME: Ideally we shouldn't highlight scrollback messages only if they - * have already been received by the user before (and so are in the logs) */ - return FALSE; - } - - cf_msg = g_utf8_casefold (msg, -1); - cf_to = g_utf8_casefold (to, -1); - - ch = strstr (cf_msg, cf_to); - if (ch == NULL) { - goto finished; - } - if (ch != cf_msg) { - /* Not first in the message */ - if (!IS_SEPARATOR (*(ch - 1))) { - goto finished; - } - } - - ch = ch + strlen (cf_to); - if (ch >= cf_msg + strlen (cf_msg)) { - ret_val = TRUE; - goto finished; - } - - if (IS_SEPARATOR (*ch)) { - ret_val = TRUE; - goto finished; - } - -finished: - g_free (cf_msg); - g_free (cf_to); - - return ret_val; -} - TpChannelTextMessageType empathy_message_type_from_str (const gchar *type_str) { diff --git a/libempathy/empathy-message.h b/libempathy/empathy-message.h index 0c27c09e9..81da7bf43 100644 --- a/libempathy/empathy-message.h +++ b/libempathy/empathy-message.h @@ -77,7 +77,6 @@ gint64 empathy_message_get_original_timestamp (EmpathyMessage gboolean empathy_message_is_backlog (EmpathyMessage *message); gboolean empathy_message_is_incoming (EmpathyMessage *message); -gboolean empathy_message_should_highlight (EmpathyMessage *message); TpChannelTextMessageType empathy_message_type_from_str (const gchar *type_str); const gchar * empathy_message_type_to_str (TpChannelTextMessageType type); diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c index 96eda77b8..fcef6e8a7 100644 --- a/libempathy/empathy-tp-chat.c +++ b/libempathy/empathy-tp-chat.c @@ -69,6 +69,7 @@ static void tp_chat_iface_init (EmpathyContactListIface *iface); enum { PROP_0, PROP_ACCOUNT, + PROP_SELF_CONTACT, PROP_REMOTE_CONTACT, PROP_N_MESSAGES_SENDING, PROP_TITLE, @@ -948,6 +949,7 @@ tp_chat_got_renamed_contacts_cb (TpConnection *connection, /* We change our nick */ tp_clear_object (&self->priv->user); self->priv->user = g_object_ref (new); + g_object_notify (chat, "self-contact"); } check_almost_ready (self); @@ -1068,6 +1070,7 @@ tp_chat_got_self_contact_cb (TpConnection *connection, self->priv->user = g_object_ref (contact); empathy_contact_set_is_user (self->priv->user, TRUE); + g_object_notify (chat, "self-contact"); check_almost_ready (self); } @@ -1083,6 +1086,9 @@ tp_chat_get_property (GObject *object, case PROP_ACCOUNT: g_value_set_object (value, self->priv->account); break; + case PROP_SELF_CONTACT: + g_value_set_object (value, self->priv->user); + break; case PROP_REMOTE_CONTACT: g_value_set_object (value, self->priv->remote_contact); break; @@ -1171,6 +1177,19 @@ empathy_tp_chat_class_init (EmpathyTpChatClass *klass) G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + /** + * EmpathyTpChat:self-contact: + * + * Not to be confused with TpChannel:group-self-contact. + */ + g_object_class_install_property (object_class, + PROP_SELF_CONTACT, + g_param_spec_object ("self-contact", + "The local contact", + "The EmpathyContact for the local user on this channel", + EMPATHY_TYPE_CONTACT, + G_PARAM_READABLE)); + g_object_class_install_property (object_class, PROP_REMOTE_CONTACT, g_param_spec_object ("remote-contact", diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index 1bb9de4aa..3e197796d 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -1437,6 +1437,7 @@ static void chat_window_new_message_cb (EmpathyChat *chat, EmpathyMessage *message, gboolean pending, + gboolean should_highlight, EmpathyChatWindow *window) { EmpathyChatWindowPriv *priv; @@ -1496,7 +1497,7 @@ chat_window_new_message_cb (EmpathyChat *chat, if (chatroom != NULL && empathy_chatroom_is_always_urgent (chatroom)) { needs_urgency = TRUE; } else { - needs_urgency = empathy_message_should_highlight (message); + needs_urgency = should_highlight; } } else { needs_urgency = TRUE; diff --git a/src/empathy-preferences.c b/src/empathy-preferences.c index 6775d4a24..cd755a9ae 100644 --- a/src/empathy-preferences.c +++ b/src/empathy-preferences.c @@ -678,7 +678,8 @@ static void preferences_preview_theme_append_message (EmpathyChatView *view, EmpathyContact *sender, EmpathyContact *receiver, - const gchar *text) + const gchar *text, + gboolean should_highlight) { EmpathyMessage *message; @@ -688,7 +689,7 @@ preferences_preview_theme_append_message (EmpathyChatView *view, "body", text, NULL); - empathy_chat_view_append_message (view, message); + empathy_chat_view_append_message (view, message, should_highlight); g_object_unref (message); } @@ -735,19 +736,20 @@ preferences_preview_theme_changed_cb (EmpathyThemeManager *manager, preferences_preview_theme_append_message (priv->chat_theme_preview, /* translators: Quote from Romeo & Julier, for chat theme preview */ - juliet, romeo, _("O Romeo, Romeo, wherefore art thou Romeo?")); + juliet, romeo, _("O Romeo, Romeo, wherefore art thou Romeo?"), + TRUE /* this message mentions Romeo */); preferences_preview_theme_append_message (priv->chat_theme_preview, /* translators: Quote from Romeo & Julier, for chat theme preview */ - juliet, romeo, _("Deny thy father and refuse thy name;")); + juliet, romeo, _("Deny thy father and refuse thy name;"), FALSE); preferences_preview_theme_append_message (priv->chat_theme_preview, /* translators: Quote from Romeo & Julier, for chat theme preview */ - juliet, romeo, _("Or if thou wilt not, be but sworn my love")); + juliet, romeo, _("Or if thou wilt not, be but sworn my love"), FALSE); preferences_preview_theme_append_message (priv->chat_theme_preview, /* translators: Quote from Romeo & Julier, for chat theme preview */ - juliet, romeo, _("And I'll no longer be a Capulet.")); + juliet, romeo, _("And I'll no longer be a Capulet."), FALSE); preferences_preview_theme_append_message (priv->chat_theme_preview, /* translators: Quote from Romeo & Julier, for chat theme preview */ - romeo, juliet, _("Shall I hear more, or shall I speak at this?")); + romeo, juliet, _("Shall I hear more, or shall I speak at this?"), FALSE); /* translators: Quote from Romeo & Julier, for chat theme preview */ empathy_chat_view_append_event (priv->chat_theme_preview, _("Juliet has disconnected")); |