Index: src/protocols/oscar/oscar.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/protocols/oscar/oscar.c,v retrieving revision 1.663 diff -u -p -r1.663 oscar.c --- src/protocols/oscar/oscar.c 3 Sep 2004 03:05:56 -0000 1.663 +++ src/protocols/oscar/oscar.c 3 Sep 2004 16:53:23 -0000 @@ -90,7 +90,7 @@ struct _OscarData { gboolean chpass; char *oldp; char *newp; - + GSList *oscar_chats; GSList *direct_ims; GSList *file_transfers; @@ -102,6 +102,7 @@ struct _OscarData { guint icontimer; guint getblisttimer; guint getinfotimer; + guint recentbuddies_cbid; struct { guint maxwatchers; /* max users who can watch you */ @@ -1720,7 +1721,7 @@ static void oscar_login(GaimAccount *acc sess->aux_data = gc; /* Connect to core Gaim signals */ - gaim_prefs_connect_callback("/plugins/prpl/oscar/recent_buddies", recent_buddies_cb, gc); + od->recentbuddies_cbid = gaim_prefs_connect_callback("/plugins/prpl/oscar/recent_buddies", recent_buddies_cb, gc); conn = aim_newconn(sess, AIM_CONN_TYPE_AUTH, NULL); if (conn == NULL) { @@ -1807,6 +1808,7 @@ static void oscar_close(GaimConnection * od->sess = NULL; g_free(gc->proto_data); gc->proto_data = NULL; + gaim_prefs_disconnect_callback(od->recentbuddies_cbid); gaim_debug_info("oscar", "Signed off.\n"); } @@ -7296,13 +7298,16 @@ recent_buddies_cb(const char *name, Gaim aim_session_t *sess = od->sess; fu32_t presence; + if (sess == NULL) + return; + presence = aim_ssi_getpresence(sess->ssi.local); if (value) { - presence |= 0x00400000; + presence &= ~0x00020000; aim_ssi_setpresence(sess, presence); } else { - presence &= ~0x00400000; + presence |= 0x00020000; aim_ssi_setpresence(sess, presence); } }