im.pidgin.pidgin: a29ccbb63a3c059184a3bacefa036a13af45e808
charkins at pidgin.im
charkins at pidgin.im
Mon Oct 15 18:25:36 EDT 2007
-----------------------------------------------------------------
Revision: a29ccbb63a3c059184a3bacefa036a13af45e808
Ancestor: 732917d4f1ac90e4c7e5143bbd59513fd6eef921
Author: charkins at pidgin.im
Date: 2007-10-15T22:16:57
Branch: im.pidgin.pidgin
Modified files:
pidgin/gtkconv.c
ChangeLog:
Track the unseen state on the PurpleConversation for dettached convs. This
allows us to only blink the tray icon when our nick was said instead of
for every message sent to a chat (when dettached).
-------------- next part --------------
============================================================
--- pidgin/gtkconv.c 9f1d0c6a7e552c9b0693b65da1f45e8ab40036d5
+++ pidgin/gtkconv.c 48886ad62ef87de8f3046caeec88084c860aede6
@@ -148,6 +148,7 @@ static void pidgin_conv_updated(PurpleCo
static void add_chat_buddy_common(PurpleConversation *conv, PurpleConvChatBuddy *cb, const char *old_name);
static gboolean tab_complete(PurpleConversation *conv);
static void pidgin_conv_updated(PurpleConversation *conv, PurpleConvUpdateType type);
+static void conv_set_unseen(PurpleConversation *gtkconv, PidginUnseenState state);
static void gtkconv_set_unseen(PidginConversation *gtkconv, PidginUnseenState state);
static void update_typing_icon(PidginConversation *gtkconv);
static const char *item_factory_translate_func (const char *path, gpointer func_data);
@@ -2853,7 +2854,9 @@ pidgin_conversations_find_unseen_list(Pu
if (gtkconv != NULL && gtkconv->active_conv != conv)
continue;
if (gtkconv == NULL) {
- if (!purple_conversation_get_data(conv, "unseen-count"))
+ if (!purple_conversation_get_data(conv, "unseen-count") ||
+ !purple_conversation_get_data(conv, "unseen-state") ||
+ GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-state"))<min_state)
continue;
r = g_list_prepend(r, conv);
c++;
@@ -5162,6 +5165,8 @@ received_im_msg_cb(PurpleAccount *accoun
conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, sender);
purple_conversation_set_ui_ops(conv, NULL);
ui_ops->create_conversation = pidgin_conv_new;
+ } else {
+ /* TODO: update the unseen_state data on the conv here */
}
} else {
/* new message for an IM */
@@ -6668,13 +6673,24 @@ wrote_msg_update_unseen_cb(PurpleAccount
static void
wrote_msg_update_unseen_cb(PurpleAccount *account, const char *who, const char *message,
- PurpleConversation *conv, PurpleMessageFlags flag, gpointer null)
+ PurpleConversation *conv, PurpleMessageFlags flags, gpointer null)
{
if (conv == NULL || PIDGIN_IS_PIDGIN_CONVERSATION(conv))
return;
- if (flag & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV)) {
- purple_conversation_set_data(conv, "unseen-count",
- GINT_TO_POINTER(GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-count")) + 1));
+ if (flags & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV)) {
+ PidginUnseenState unseen = PIDGIN_UNSEEN_NONE;
+
+ if ((flags & PURPLE_MESSAGE_NICK) == PURPLE_MESSAGE_NICK)
+ unseen = PIDGIN_UNSEEN_NICK;
+ else if (((flags & PURPLE_MESSAGE_SYSTEM) == PURPLE_MESSAGE_SYSTEM) ||
+ ((flags & PURPLE_MESSAGE_ERROR) == PURPLE_MESSAGE_ERROR))
+ unseen = PIDGIN_UNSEEN_EVENT;
+ else if ((flags & PURPLE_MESSAGE_NO_LOG) == PURPLE_MESSAGE_NO_LOG)
+ unseen = PIDGIN_UNSEEN_NO_LOG;
+ else
+ unseen = PIDGIN_UNSEEN_TEXT;
+
+ conv_set_unseen(conv, unseen);
purple_conversation_update(conv, PURPLE_CONV_UPDATE_UNSEEN);
}
}
@@ -7449,6 +7465,7 @@ gboolean pidgin_conv_attach_to_conversat
return FALSE;
purple_conversation_set_data(conv, "unseen-count", NULL);
+ purple_conversation_set_data(conv, "unseen-state", NULL);
purple_conversation_set_ui_ops(conv, pidgin_conversations_get_conv_ui_ops());
private_gtkconv_new(conv, FALSE);
gtkconv = PIDGIN_CONVERSATION(conv);
@@ -7918,6 +7935,38 @@ static void
}
static void
+conv_set_unseen(PurpleConversation *conv, PidginUnseenState state)
+{
+ int unseen_count = 0;
+ PidginUnseenState unseen_state = PIDGIN_UNSEEN_NONE;
+
+ if(purple_conversation_get_data(conv, "unseen-count"))
+ unseen_count = GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-count"));
+
+ if(purple_conversation_get_data(conv, "unseen-state"))
+ unseen_state = GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-state"));
+
+ if (state == PIDGIN_UNSEEN_NONE)
+ {
+ unseen_count = 0;
+ unseen_state = PIDGIN_UNSEEN_NONE;
+ }
+ else
+ {
+ if (state >= PIDGIN_UNSEEN_TEXT)
+ unseen_count++;
+
+ if (state > unseen_state)
+ unseen_state = state;
+ }
+
+ purple_conversation_set_data(conv, "unseen-count", GINT_TO_POINTER(unseen_count));
+ purple_conversation_set_data(conv, "unseen-state", GINT_TO_POINTER(unseen_state));
+
+ purple_conversation_update(conv, PURPLE_CONV_UPDATE_UNSEEN);
+}
+
+static void
gtkconv_set_unseen(PidginConversation *gtkconv, PidginUnseenState state)
{
if (state == PIDGIN_UNSEEN_NONE)
More information about the Commits
mailing list