--- a/ChangeLog.API Mon Apr 04 23:56:44 2022 -0500
+++ b/ChangeLog.API Sun Apr 10 03:01:08 2022 -0500
@@ -848,13 +848,14 @@
* pidgin_conv_get_tab_icon, use PidginPresenceIcon instead.
* pidgin_conv_placement_get_name
* pidgin_conv_placement_add_fnc
* pidgin_conv_placement_remove_fnc
* pidgin_conv_placement_get_fnc
* pidgin_conv_placement_set_current_func
* pidgin_conv_placement_get_current_func
- * pidgin_conv_update_buddy_icon
+ * pidgin_conv_present_conversation * pidgin_conv_window_add_gtkconv
* pidgin_conv_window_destroy
@@ -877,7 +878,10 @@
* pidgin_conv_window_show
* pidgin_conv_window_switch_gtkconv
* pidgin_conv_windows_get_list
+ * pidgin_conv_update_buddy_icon + * pidgin_conv_update_buttons_by_protocol * pidgin_conversations_fill_menu
+ * pidgin_conversations_get_unseen_all * pidgin_create_dialog, use pidgin_dialog_new instead.
* pidgin_create_small_button, use pidgin_close_button_new instead.
* pidgin_create_status_icon
@@ -1013,6 +1017,7 @@
* pidgin_tooltip_setup_for_widget
+ * PidginUnseenState enum and all values. * PidginUtilMiniDialogCallback; use PidginMiniDialogCallback
* struct _GtkIMHtmlAnimation
--- a/pidgin/gtkconv.c Mon Apr 04 23:56:44 2022 -0500
+++ b/pidgin/gtkconv.c Sun Apr 10 03:01:08 2022 -0500
@@ -62,15 +62,7 @@
@@ -102,11 +94,8 @@
/* Prototypes. <-- because Paco-Paco hates this comment. */
static void got_typing_keypress(PidginConversation *gtkconv, gboolean first);
-static void gray_stuff_out(PidginConversation *gtkconv);
static void add_chat_user_common(PurpleChatConversation *chat, PurpleChatUser *cb, const char *old_name);
static void pidgin_conv_updated(PurpleConversation *conv, PurpleConversationUpdateType 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);
gboolean pidgin_conv_has_focus(PurpleConversation *conv);
static void pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields);
@@ -152,23 +141,6 @@
-pidgin_get_cmd_prefix(void)
-static void clear_conversation_scrollback_cb(PurpleConversation *conv,
- PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv);
- if (PIDGIN_CONVERSATION(conv)) {
- gtkconv->last_flags = 0;
send_history_add(PidginConversation *gtkconv, const char *message)
@@ -191,7 +163,7 @@
gtkconv = PIDGIN_CONVERSATION(conv);
- prefix = pidgin_get_cmd_prefix();
input = talkatu_editor_get_input(TALKATU_EDITOR(gtkconv->editor));
buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(input));
@@ -335,7 +307,6 @@
talkatu_buffer_clear(TALKATU_BUFFER(buffer));
- gtkconv_set_unseen(gtkconv, PIDGIN_UNSEEN_NONE);
@@ -1197,71 +1168,10 @@
purple_signal_emit(pidgin_conversations_get_handle(), "conversation-switched", conv);
- gray_stuff_out(gtkconv);
update_typing_icon(gtkconv);
g_object_set_data(G_OBJECT(gtkconv->entry), "transient_buddy", NULL);
-pidgin_conv_present_conversation(PurpleConversation *conv)
- PidginConversation *gtkconv;
- pidgin_conv_attach_to_conversation(conv);
- gtkconv = PIDGIN_CONVERSATION(conv);
- pidgin_conv_switch_active_conversation(conv);
- /* Switch the tab only if the user initiated the event by pressing
- * a button or hitting a key. */
- if (gtk_get_current_event_state(&state))
- pidgin_conv_window_switch_gtkconv(gtkconv->win, gtkconv);
- gtk_window_present(GTK_WINDOW(gtkconv->win->window));
-pidgin_conversations_get_unseen(GList *l,
- PidginUnseenState min_state,
- for (; l != NULL && (max_count == 0 || c < max_count); l = l->next) {
- PurpleConversation *conv = (PurpleConversation*)l->data;
- PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv);
- if(gtkconv == NULL || gtkconv->active_conv != conv) {
- if (gtkconv->unseen_state >= min_state) {
- r = g_list_prepend(r, conv);
-pidgin_conversations_get_unseen_all(PidginUnseenState min_state,
- PurpleConversationManager *manager;
- GList *list, *ret = NULL;
- manager = purple_conversation_manager_get_default();
- list = purple_conversation_manager_get_all(manager);
- ret = pidgin_conversations_get_unseen(list, min_state, max_count);
static GtkActionEntry menu_entries[] =
/* TODO: fill out tooltips... */
@@ -2024,11 +1934,6 @@
gtkconv->convs = g_list_prepend(gtkconv->convs, conv);
gtkconv->send_history = g_list_append(NULL, NULL);
- /* Setup some initial variables. */
- gtkconv->unseen_state = PIDGIN_UNSEEN_NONE;
- gtkconv->unseen_count = 0;
- gtkconv->last_flags = 0;
if (PURPLE_IS_IM_CONVERSATION(conv)) {
gtkconv->u.im = g_malloc0(sizeof(PidginImPane));
} else if (PURPLE_IS_CHAT_CONVERSATION(conv)) {
@@ -2069,7 +1974,7 @@
pidgin_conv_placement_place(gtkconv);
pidgin_conv_new(PurpleConversation *conv)
private_gtkconv_new(conv, FALSE);
@@ -2217,24 +2122,6 @@
TALKATU_MESSAGE(pidgin_msg)
- /* Tab highlighting stuff */
- if (!(flags & PURPLE_MESSAGE_SEND) && !pidgin_conv_has_focus(conv))
- 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;
- unseen = PIDGIN_UNSEEN_TEXT;
- gtkconv_set_unseen(gtkconv, unseen);
purple_signal_emit(pidgin_conversations_get_handle(),
(PURPLE_IS_IM_CONVERSATION(conv) ? "displayed-im-msg" : "displayed-chat-msg"),
@@ -2434,155 +2321,6 @@
- * Makes sure all the menu items and all the buttons are hidden/shown and
- * sensitive/insensitive. This is called after changing tabs and when an
- * account signs on or off.
-gray_stuff_out(PidginConversation *gtkconv)
-/* This will be replaced by managing an action group in the new conversation
- PurpleConversation *conv = gtkconv->active_conv;
- PurpleProtocol *protocol = NULL;
- PurpleAccount *account;
- win = pidgin_conv_get_window(gtkconv);
- gc = purple_conversation_get_connection(conv);
- account = purple_conversation_get_account(conv);
- protocol = purple_connection_get_protocol(gc);
- * Handle hiding and showing stuff based on what type of conv this is.
- * Stuff that Purple IMs support in general should be shown for IM
- * conversations. Stuff that Purple chats support in general should be
- * shown for chat conversations. It doesn't matter whether the protocol
- * supports it or not--that only affects if the button or menu item
- if (PURPLE_IS_IM_CONVERSATION(conv)) {
- /* Show stuff that applies to IMs, hide stuff that applies to chats */
- /* Deal with menu items */
- gtk_action_set_visible(win->menu->view_log, TRUE);
- gtk_action_set_visible(win->menu->send_file, TRUE);
- gtk_action_set_visible(win->menu->get_info, TRUE);
- gtk_action_set_visible(win->menu->invite, FALSE);
- gtk_action_set_visible(win->menu->alias, TRUE);
- if (purple_account_privacy_check(account, purple_conversation_get_name(conv))) {
- gtk_action_set_visible(win->menu->unblock, FALSE);
- gtk_action_set_visible(win->menu->block, TRUE);
- gtk_action_set_visible(win->menu->block, FALSE);
- gtk_action_set_visible(win->menu->unblock, TRUE);
- if (purple_blist_find_buddy(account, purple_conversation_get_name(conv)) == NULL) {
- gtk_action_set_visible(win->menu->add, TRUE);
- gtk_action_set_visible(win->menu->remove, FALSE);
- gtk_action_set_visible(win->menu->remove, TRUE);
- gtk_action_set_visible(win->menu->add, FALSE);
- gtk_action_set_visible(win->menu->insert_link, TRUE);
- gtk_action_set_visible(win->menu->insert_image, TRUE);
- } else if (PURPLE_IS_CHAT_CONVERSATION(conv)) {
- /* Show stuff that applies to Chats, hide stuff that applies to IMs */
- /* Deal with menu items */
- gtk_action_set_visible(win->menu->view_log, TRUE);
- gtk_action_set_visible(win->menu->send_file, FALSE);
- gtk_action_set_visible(win->menu->get_info, FALSE);
- gtk_action_set_visible(win->menu->invite, TRUE);
- gtk_action_set_visible(win->menu->alias, TRUE);
- gtk_action_set_visible(win->menu->block, FALSE);
- gtk_action_set_visible(win->menu->unblock, FALSE);
- if ((account == NULL) || purple_blist_find_chat(account, purple_conversation_get_name(conv)) == NULL) {
- /* If the chat is NOT in the buddy list */
- gtk_action_set_visible(win->menu->add, TRUE);
- gtk_action_set_visible(win->menu->remove, FALSE);
- /* If the chat IS in the buddy list */
- gtk_action_set_visible(win->menu->add, FALSE);
- gtk_action_set_visible(win->menu->remove, TRUE);
- gtk_action_set_visible(win->menu->insert_link, TRUE);
- gtk_action_set_visible(win->menu->insert_image, TRUE);
- * Handle graying stuff out based on whether an account is connected
- * and what features that account supports.
- (!PURPLE_IS_CHAT_CONVERSATION(conv) ||
- !purple_chat_conversation_has_left(PURPLE_CHAT_CONVERSATION(conv)) ))
- PurpleConnectionFlags features = purple_conversation_get_features(conv);
- /* Account is online */
- /* Deal with menu items */
- gtk_action_set_sensitive(win->menu->view_log, TRUE);
- gtk_action_set_sensitive(win->menu->get_info, (PURPLE_PROTOCOL_IMPLEMENTS(protocol, SERVER, get_info)));
- gtk_action_set_sensitive(win->menu->invite, (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, invite)));
- gtk_action_set_sensitive(win->menu->insert_link, (features & PURPLE_CONNECTION_FLAG_HTML));
- gtk_action_set_sensitive(win->menu->insert_image, !(features & PURPLE_CONNECTION_FLAG_NO_IMAGES));
- if (PURPLE_IS_IM_CONVERSATION(conv))
- gboolean can_send_file = FALSE;
- const gchar *name = purple_conversation_get_name(conv);
- if (PURPLE_IS_PROTOCOL_XFER(protocol) &&
- purple_protocol_xfer_can_receive(PURPLE_PROTOCOL_XFER(protocol), gc, name)
- gtk_action_set_sensitive(win->menu->add, (PURPLE_PROTOCOL_IMPLEMENTS(protocol, SERVER, add_buddy)));
- gtk_action_set_sensitive(win->menu->remove, (PURPLE_PROTOCOL_IMPLEMENTS(protocol, SERVER, remove_buddy)));
- gtk_action_set_sensitive(win->menu->send_file, can_send_file);
- gtk_action_set_sensitive(win->menu->alias,
- (purple_blist_find_buddy(account, purple_conversation_get_name(conv)) != NULL));
- else if (PURPLE_IS_CHAT_CONVERSATION(conv))
- gtk_action_set_sensitive(win->menu->add, (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, join)));
- gtk_action_set_sensitive(win->menu->remove, (PURPLE_PROTOCOL_IMPLEMENTS(protocol, CHAT, join)));
- gtk_action_set_sensitive(win->menu->alias,
- (purple_blist_find_chat(account, purple_conversation_get_name(conv)) != NULL));
- /* Account is offline */
- /* Or it's a chat that we've left. */
- /* Then deal with menu items */
- gtk_action_set_sensitive(win->menu->view_log, TRUE);
- gtk_action_set_sensitive(win->menu->send_file, FALSE);
- gtk_action_set_sensitive(win->menu->get_info, FALSE);
- gtk_action_set_sensitive(win->menu->invite, FALSE);
- gtk_action_set_sensitive(win->menu->alias, FALSE);
- gtk_action_set_sensitive(win->menu->add, FALSE);
- gtk_action_set_sensitive(win->menu->remove, FALSE);
- gtk_action_set_sensitive(win->menu->insert_link, TRUE);
- gtk_action_set_sensitive(win->menu->insert_image, FALSE);
pidgin_conv_update_fields(PurpleConversation *conv, PidginConvFields fields)
@@ -2602,11 +2340,6 @@
purple_conversation_autoset_title(conv);
- if (fields & PIDGIN_CONV_MENU)
- gray_stuff_out(PIDGIN_CONVERSATION(conv));
if ((fields & PIDGIN_CONV_TOPIC) &&
PURPLE_IS_CHAT_CONVERSATION(conv))
@@ -2677,21 +2410,6 @@
- if (gtkconv->unseen_state == PIDGIN_UNSEEN_TEXT ||
- gtkconv->unseen_state == PIDGIN_UNSEEN_NICK ||
- gtkconv->unseen_state == PIDGIN_UNSEEN_EVENT) {
- PangoAttrList *list = pango_attr_list_new();
- PangoAttribute *attr = pango_attr_weight_new(PANGO_WEIGHT_BOLD);
- pango_attr_list_insert(list, attr);
- gtk_label_set_attributes(GTK_LABEL(gtkconv->tab_label), list);
- pango_attr_list_unref(list);
- gtk_label_set_attributes(GTK_LABEL(gtkconv->tab_label), NULL);
if (pidgin_conversation_window_conversation_is_selected(convwin, conv)) {
const char* current_title = gtk_window_get_title(GTK_WINDOW(win));
if (current_title == NULL || !purple_strequal(current_title, title)) {
@@ -2753,49 +2471,16 @@
pidgin_conv_update_fields(conv, flags);
-wrote_msg_update_unseen_cb(PurpleConversation *conv, PurpleMessage *msg,
- PurpleMessageFlags flags;
- flags = purple_message_get_flags(msg);
- 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;
- unseen = PIDGIN_UNSEEN_TEXT;
- conv_set_unseen(conv, unseen);
static PurpleConversationUiOps conversation_ui_ops =
- pidgin_conv_destroy, /* destroy_conversation */
- pidgin_conv_write_conv, /* write_conv */
- pidgin_conv_chat_add_users, /* chat_add_users */
- pidgin_conv_chat_rename_user, /* chat_rename_user */
- pidgin_conv_chat_remove_users, /* chat_remove_users */
- pidgin_conv_chat_update_user, /* chat_update_user */
- pidgin_conv_present_conversation, /* present */
- pidgin_conv_has_focus, /* has_focus */
- NULL, /* send_confirm */
+ .create_conversation = pidgin_conv_new, + .destroy_conversation = pidgin_conv_destroy, + .write_conv = pidgin_conv_write_conv, + .chat_add_users = pidgin_conv_chat_add_users, + .chat_rename_user = pidgin_conv_chat_rename_user, + .chat_remove_users = pidgin_conv_chat_remove_users, + .chat_update_user = pidgin_conv_chat_update_user, + .has_focus = pidgin_conv_has_focus, PurpleConversationUiOps *
@@ -2807,27 +2492,6 @@
/**************************************************************************
* Public conversation utility functions
**************************************************************************/
-pidgin_conv_update_buttons_by_protocol(PurpleConversation *conv)
- PidginConversation *gtkconv;
- if (!PIDGIN_IS_PIDGIN_CONVERSATION(conv))
- gtkconv = PIDGIN_CONVERSATION(conv);
- win = gtk_widget_get_toplevel(gtkconv->tab_cont);
- if(PIDGIN_IS_CONVERSATION_WINDOW(win)) {
- PidginConversationWindow *convwin = PIDGIN_CONVERSATION_WINDOW(win);
- if(pidgin_conversation_window_conversation_is_selected(convwin, conv)) {
- gray_stuff_out(PIDGIN_CONVERSATION(conv));
show_formatting_toolbar_pref_cb(const char *name, PurplePrefType type,
gconstpointer value, gpointer data)
@@ -2851,13 +2515,6 @@
gtkconv = PIDGIN_CONVERSATION(conv);
- gtk_toggle_action_set_active(
- GTK_TOGGLE_ACTION(win->menu->show_formatting_toolbar),
talkatu_editor_set_toolbar_visible(TALKATU_EDITOR(gtkconv->editor), visible);
list = g_list_delete_link(list, list);
@@ -3166,8 +2823,6 @@
pidgin_conv_attach(PurpleConversation *conv)
- g_object_set_data(G_OBJECT(conv), "unseen-count", NULL);
- g_object_set_data(G_OBJECT(conv), "unseen-state", NULL);
purple_conversation_set_ui_ops(conv, pidgin_conversations_get_conv_ui_ops());
if (!PIDGIN_CONVERSATION(conv))
private_gtkconv_new(conv, FALSE);
@@ -3273,22 +2928,10 @@
purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/scrollback_lines", 4000);
/* Conversations -> Chat */
- purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations/chat");
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/chat/entry_height", 54);
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/chat/userlist_width", 80);
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/chat/x", 0);
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/chat/y", 0);
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/chat/width", 340);
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/chat/height", 390);
+ purple_prefs_remove(PIDGIN_PREFS_ROOT "/conversations/chat"); /* Conversations -> IM */
- purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations/im");
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/im/x", 0);
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/im/y", 0);
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/im/width", 340);
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/im/height", 390);
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height", 54);
+ purple_prefs_remove(PIDGIN_PREFS_ROOT "/conversations/im"); purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar",
@@ -3354,8 +2997,6 @@
handle, G_CALLBACK(writing_msg), NULL);
purple_signal_connect(purple_conversations_get_handle(), "received-im-msg",
handle, G_CALLBACK(received_im_msg_cb), NULL);
- purple_signal_connect(purple_conversations_get_handle(), "cleared-message-history",
- handle, G_CALLBACK(clear_conversation_scrollback_cb), NULL);
purple_conversations_set_ui_ops(&conversation_ui_ops);
@@ -3387,10 +3028,6 @@
purple_signal_connect_priority(purple_conversations_get_handle(), "conversation-updated", handle,
G_CALLBACK(pidgin_conv_updated), NULL,
PURPLE_SIGNAL_PRIORITY_LOWEST);
- purple_signal_connect(purple_conversations_get_handle(), "wrote-im-msg", handle,
- G_CALLBACK(wrote_msg_update_unseen_cb), NULL);
- purple_signal_connect(purple_conversations_get_handle(), "wrote-chat-msg", handle,
- G_CALLBACK(wrote_msg_update_unseen_cb), NULL);
@@ -3401,113 +3038,6 @@
purple_signals_unregister_by_instance(pidgin_conversations_get_handle());
-/* down here is where gtkconvwin.c ought to start. except they share like every freaking function,
- * and touch each others' private members all day long */
- * Pidgin is the legal property of its developers, whose names are too numerous
- * to list here. Please refer to the COPYRIGHT file distributed with this
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
-#include <gdk/gdkkeysyms.h>
-/**************************************************************************
- **************************************************************************/
-conv_set_unseen(PurpleConversation *conv, PidginUnseenState state)
- PidginUnseenState unseen_state = PIDGIN_UNSEEN_NONE;
- if(g_object_get_data(G_OBJECT(conv), "unseen-count"))
- unseen_count = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(conv), "unseen-count"));
- if(g_object_get_data(G_OBJECT(conv), "unseen-state"))
- unseen_state = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(conv), "unseen-state"));
- if (state == PIDGIN_UNSEEN_NONE)
- unseen_state = PIDGIN_UNSEEN_NONE;
- if (state >= PIDGIN_UNSEEN_TEXT)
- if (state > unseen_state)
- g_object_set_data(G_OBJECT(conv), "unseen-count", GINT_TO_POINTER(unseen_count));
- g_object_set_data(G_OBJECT(conv), "unseen-state", GINT_TO_POINTER(unseen_state));
- purple_conversation_update(conv, PURPLE_CONVERSATION_UPDATE_UNSEEN);
-gtkconv_set_unseen(PidginConversation *gtkconv, PidginUnseenState state)
- if (state == PIDGIN_UNSEEN_NONE)
- gtkconv->unseen_count = 0;
- gtkconv->unseen_state = PIDGIN_UNSEEN_NONE;
- if (state >= PIDGIN_UNSEEN_TEXT)
- gtkconv->unseen_count++;
- if (state > gtkconv->unseen_state)
- gtkconv->unseen_state = state;
- g_object_set_data(G_OBJECT(gtkconv->active_conv), "unseen-count", GINT_TO_POINTER(gtkconv->unseen_count));
- g_object_set_data(G_OBJECT(gtkconv->active_conv), "unseen-state", GINT_TO_POINTER(gtkconv->unseen_state));
- purple_conversation_update(gtkconv->active_conv, PURPLE_CONVERSATION_UPDATE_UNSEEN);
/**************************************************************************
**************************************************************************/