diff -r 052b58f0209b -r 943ecd58841b pidgin/gtkconv.c --- a/pidgin/gtkconv.c Mon Nov 09 01:42:24 2009 +0000 +++ b/pidgin/gtkconv.c Fri Jan 22 00:51:25 2010 +0000 @@ -3830,8 +3830,7 @@ gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 4); if (buddy != NULL && - !purple_presence_is_online(purple_buddy_get_presence(buddy)) && - !purple_account_supports_offline_message(account, buddy)) + !purple_presence_is_online(purple_buddy_get_presence(buddy))) { gtk_widget_set_sensitive(label, FALSE); @@ -5366,10 +5365,12 @@ } /* Somebody wants to keep this conversation around, so don't time it out */ - timer = GPOINTER_TO_INT(purple_conversation_get_data(conv, "close-timer")); - if (timer) { - purple_timeout_remove(timer); - purple_conversation_set_data(conv, "close-timer", GINT_TO_POINTER(0)); + if (conv) { + timer = GPOINTER_TO_INT(purple_conversation_get_data(conv, "close-timer")); + if (timer) { + purple_timeout_remove(timer); + purple_conversation_set_data(conv, "close-timer", GINT_TO_POINTER(0)); + } } } @@ -7256,16 +7257,24 @@ } } +struct _status_timeout_user { + gchar *name; + PurpleAccount *account; +}; + static gboolean -update_buddy_status_timeout(PurpleBuddy *buddy) +update_buddy_status_timeout(struct _status_timeout_user *user) { /* To remove the signing-on/off door icon */ PurpleConversation *conv; - conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, buddy->name, buddy->account); + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, user->name, user->account); if (conv) pidgin_conv_update_fields(conv, PIDGIN_CONV_TAB_ICON); + g_free(user->name); + g_free(user); + return FALSE; } @@ -7274,6 +7283,7 @@ { PidginConversation *gtkconv; PurpleConversation *conv; + struct _status_timeout_user *user; gtkconv = get_gtkconv_with_contact(purple_buddy_get_contact(buddy)); if (gtkconv) @@ -7286,8 +7296,12 @@ pidgin_conv_update_fields(conv, PIDGIN_CONV_MENU); } + user = g_malloc(sizeof(struct _status_timeout_user)); + user->name = g_strdup(buddy->name); + user->account = buddy->account; + /* In case a conversation is started after the buddy has signed-on/off */ - purple_timeout_add_seconds(11, (GSourceFunc)update_buddy_status_timeout, buddy); + purple_timeout_add_seconds(11, (GSourceFunc)update_buddy_status_timeout, user); } static void @@ -7564,8 +7578,10 @@ purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/tab_side", GTK_POS_TOP); purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/scrollback_lines", 4000); +#ifdef _WIN32 purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font", TRUE); purple_prefs_add_string(PIDGIN_PREFS_ROOT "/conversations/custom_font", ""); +#endif /* Conversations -> Chat */ purple_prefs_add_none(PIDGIN_PREFS_ROOT "/conversations/chat");