--- a/hangouts_connection.h Wed Aug 31 20:37:40 2016 +0000
+++ b/hangouts_connection.h Mon Sep 19 18:50:17 2016 +1200
@@ -87,6 +87,7 @@
HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(add_user, AddUser, "conversations/adduser");
HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(remove_user, RemoveUser, "conversations/removeuser");
HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(update_watermark, UpdateWatermark, "conversations/updatewatermark");
+HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(set_focus, SetFocus, "conversations/setfocus"); HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(set_active_client, SetActiveClient, "clients/setactiveclient");
HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(get_entity_by_id, GetEntityById, "contacts/getentitybyid");
HANGOUTS_DEFINE_PBLITE_REQUEST_FUNC(get_group_conversation_url, GetGroupConversationUrl, "conversations/getgroupconversationurl");
--- a/hangouts_conversation.c Wed Aug 31 20:37:40 2016 +0000
+++ b/hangouts_conversation.c Mon Sep 19 18:50:17 2016 +1200
@@ -1732,6 +1732,68 @@
#define PURPLE_CONVERSATION_IS_VALID(conv) (g_list_find(purple_conversations_get_all(), conv) != NULL)
+hangouts_mark_conversation_focused_timeout(gpointer convpointer) + PurpleConversation *conv = convpointer; + PurpleAccount *account; + SetFocusRequest request; + ConversationId conversation_id; + const gchar *conv_id = NULL; + if (!PURPLE_CONVERSATION_IS_VALID(conv)) + account = purple_conversation_get_account(conv); + if (account == NULL || !purple_account_is_connected(account)) + pc = purple_account_get_connection(account); + if (!PURPLE_CONNECTION_IS_CONNECTED(pc)) + ha = purple_connection_get_protocol_data(pc); + is_focused = purple_conversation_has_focus(conv); + if (is_focused && ha->last_conversation_focused == conv) + set_focus_request__init(&request); + request.request_header = hangouts_get_request_header(ha); + conv_id = purple_conversation_get_data(conv, "conv_id"); + if (PURPLE_IS_IM_CONVERSATION(conv)) { + conv_id = g_hash_table_lookup(ha->one_to_ones_rev, purple_conversation_get_name(conv)); + conv_id = purple_conversation_get_name(conv); + conversation_id__init(&conversation_id); + conversation_id.id = (gchar *) conv_id; + request.conversation_id = &conversation_id; + request.type = FOCUS_TYPE__FOCUS_TYPE_FOCUSED; + ha->last_conversation_focused = conv; + request.type = FOCUS_TYPE__FOCUS_TYPE_UNFOCUSED; + if (ha->last_conversation_focused == conv) { + ha->last_conversation_focused = NULL; + request.has_type = TRUE; + hangouts_pblite_set_focus(ha, &request, (HangoutsPbliteSetFocusResponseFunc)hangouts_default_response_dump, NULL); + hangouts_request_header_free(request.request_header); hangouts_mark_conversation_seen_timeout(gpointer convpointer)
PurpleConversation *conv = convpointer;
@@ -1746,6 +1808,8 @@
if (!PURPLE_CONVERSATION_IS_VALID(conv))
+ if (!purple_conversation_has_focus(conv)) account = purple_conversation_get_account(conv);
if (account == NULL || !purple_account_is_connected(account))
@@ -1815,9 +1879,6 @@
if (type != PURPLE_CONVERSATION_UPDATE_UNSEEN)
- if (!purple_conversation_has_focus(conv))
pc = purple_conversation_get_connection(conv);
if (!PURPLE_CONNECTION_IS_CONNECTED(pc))
@@ -1835,6 +1896,8 @@
purple_conversation_set_data(conv, "mark_seen_timeout", GINT_TO_POINTER(mark_seen_timeout));
+ purple_timeout_add_seconds(1, hangouts_mark_conversation_focused_timeout, conv); hangouts_set_active_client(pc);
--- a/libhangouts.h Wed Aug 31 20:37:40 2016 +0000
+++ b/libhangouts.h Mon Sep 19 18:50:17 2016 +1200
@@ -82,6 +82,7 @@
ActiveClientState active_client_state;
gint64 last_event_timestamp;
+ PurpleConversation *last_conversation_focused; GByteArray *channel_buffer;