/soc/2015/igor.gajowiak/chatlog: e61c25e3a66f: Hooked marking me...

Igor Gajowiak <[email protected]>
Newsgroups gmane.comp.gnome.gaim.cvs
Message-ID <[email protected]>
Changeset: e61c25e3a66f384e14b0ecbd0dfd455fdb7a5c2e
Author:	 Igor Gajowiak <[email protected]>
Date:	 2015-07-27 22:02 +0200
Branch:	 default
URL: https://hg.pidgin.im/soc/2015/igor.gajowiak/chatlog/rev/e61c25e3a66f

Description:

Hooked marking messages as seen to the UI.

diffstat:

 pidgin/gtkconv.c |  50 +++++++++++++++++++++++++++++++++++++++++++++++++-
 pidgin/gtkconv.h |   2 ++
 2 files changed, 51 insertions(+), 1 deletions(-)

diffs (108 lines):

diff --git a/pidgin/gtkconv.c b/pidgin/gtkconv.c
--- a/pidgin/gtkconv.c
+++ b/pidgin/gtkconv.c
@@ -6032,6 +6032,8 @@ private_gtkconv_new(PurpleConversation *
 	gtkconv->convs = g_list_prepend(gtkconv->convs, conv);
 	gtkconv->send_history = g_list_append(NULL, NULL);
 
+	gtkconv->unseen_messages = NULL;
+
 	gtkconv->edited_message_id = PURPLE_MESSAGE_ID_NONE;
 
 	/* Setup some initial variables. */
@@ -6255,6 +6257,8 @@ pidgin_conv_destroy(PurpleConversation *
 		g_free(gtkconv->u.chat);
 	}
 
+	g_list_free_full(gtkconv->unseen_messages, g_object_unref);
+
 	gtkconv->send_history = g_list_first(gtkconv->send_history);
 	g_list_foreach(gtkconv->send_history, (GFunc)g_free, NULL);
 	g_list_free(gtkconv->send_history);
@@ -7078,6 +7082,22 @@ pidgin_conv_write_conv(PurpleConversatio
 
 #endif
 
+	// Mark message as seen immediately if the conversation has focus
+	if (pidgin_conv_has_focus(conv)) {
+		GError *error;
+		if (!purple_genericlog_mark_as_seen(pmsg, &error)) {
+			purple_debug_error("gtkconv",
+				"Marking message as seen failed: %s (code=%d)",
+				error->message, error->code);
+			g_error_free(error);
+		}
+	}
+	else { // Otherwise push message to unseen_messages
+		g_object_ref(G_OBJECT(pmsg));
+		gtkconv->unseen_messages = g_list_prepend(
+			gtkconv->unseen_messages, pmsg);
+	}
+
 	/* Tab highlighting stuff */
 	if (!(flags & PURPLE_MESSAGE_SEND) && !pidgin_conv_has_focus(conv))
 	{
@@ -9512,6 +9532,31 @@ gtkconv_set_unseen(PidginConversation *g
 	purple_conversation_update(gtkconv->active_conv, PURPLE_CONVERSATION_UPDATE_UNSEEN);
 }
 
+static void
+mark_all_messages_as_seen(PidginConversation *gtkconv)
+{
+	g_assert(gtkconv);
+
+	GList *it = gtkconv->unseen_messages;
+	while (it != NULL) {
+		PurpleMessage *msg = PURPLE_MESSAGE(it->data);
+
+		GError *error;
+		if (!purple_genericlog_mark_as_seen(msg, &error)) {
+			purple_debug_error("gtkconv",
+				"Marking message as seen failed: %s (code=%d)",
+				error->message, error->code);
+			g_error_free(error);
+		}
+
+		g_object_unref(G_OBJECT(msg));
+
+		it = g_list_delete_link(it, it);
+	}
+
+	gtkconv->unseen_messages = NULL;
+}
+
 /*
  * When a conversation window is focused, we know the user
  * has looked at it so we know there are no longer unseen
@@ -9523,8 +9568,10 @@ focus_win_cb(GtkWidget *w, GdkEventFocus
 	PidginConvWindow *win = d;
 	PidginConversation *gtkconv = pidgin_conv_window_get_active_gtkconv(win);
 
-	if (gtkconv)
+	if (gtkconv) {
 		gtkconv_set_unseen(gtkconv, PIDGIN_UNSEEN_NONE);
+		mark_all_messages_as_seen(gtkconv);
+	}
 
 	return FALSE;
 }
@@ -10289,6 +10336,7 @@ switch_conv_cb(GtkNotebook *notebook, Gt
 	/* clear unseen flag if conversation is not hidden */
 	if(!pidgin_conv_is_hidden(gtkconv)) {
 		gtkconv_set_unseen(gtkconv, PIDGIN_UNSEEN_NONE);
+		mark_all_messages_as_seen(gtkconv);
 	}
 
 	/* Update the menubar */
diff --git a/pidgin/gtkconv.h b/pidgin/gtkconv.h
--- a/pidgin/gtkconv.h
+++ b/pidgin/gtkconv.h
@@ -96,6 +96,8 @@ struct _PidginConversation
 	GList *convs;
 	GList *send_history;
 
+	GList *unseen_messages;
+
 	guint edited_message_id;
 
 	PidginConvWindow *win;

_______________________________________________
Commits mailing list
[email protected]
https://pidgin.im/cgi-bin/mailman/listinfo/commits
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.