changeset 4732:c15e0699acae

[gaim-migrate @ 5047] hopefully this doesn't break anything. - Capabilities are back in the tooltips - Jabber does the neat status thing in the buddy list - jabber "broken" buddies are gone! woohoo! - most of the right-click menu items moved back to where they used to live, but Get Info remains at the top, because that's where it should be. committer: Tailor Script <tailor@pidgin.im>
author Nathan Walp <nwalp@pidgin.im>
date Thu, 13 Mar 2003 06:08:56 +0000
parents 6f0ecc21db46
children 76ccf9740183
files src/buddy.c src/core.h src/protocols/gg/gg.c src/protocols/icq/gaim_icq.c src/protocols/irc/irc.c src/protocols/jabber/jabber.c src/protocols/msn/msn.c src/protocols/napster/napster.c src/protocols/oscar/oscar.c src/protocols/toc/toc.c src/protocols/yahoo/yahoo.c src/protocols/zephyr/zephyr.c src/prpl.h src/server.c
diffstat 14 files changed, 123 insertions(+), 123 deletions(-) [+]
line wrap: on
line diff
--- a/src/buddy.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/buddy.c	Thu Mar 13 06:08:56 2003 +0000
@@ -75,6 +75,11 @@
 		do_quit();
 }
 
+static void gtk_blist_menu_info_cb(GtkWidget *w, struct buddy *b)
+{
+	serv_get_info(b->account->gc, b->name);
+}
+
 static void gtk_blist_menu_im_cb(GtkWidget *w, struct buddy *b)
 {
        gaim_conversation_new(GAIM_CONV_IM, b->account, b->name);
@@ -203,6 +208,31 @@
 
 	/* Protocol specific options */
 	prpl = find_prpl(((struct buddy*)node)->account->protocol);
+
+	if(prpl && prpl->get_info) {
+		menuitem = gtk_image_menu_item_new_with_mnemonic("_Get Info");
+		g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_info_cb), node);
+		gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
+	}
+
+	menuitem = gtk_image_menu_item_new_with_mnemonic("_IM");
+	g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_im_cb), node);
+	image = gtk_image_new_from_stock(GAIM_STOCK_IM, GTK_ICON_SIZE_MENU);
+	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
+
+	menuitem = gtk_image_menu_item_new_with_mnemonic("_Alias");
+	g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_alias_cb), node);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
+
+	menuitem = gtk_image_menu_item_new_with_mnemonic("Add Buddy _Pounce");
+	g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_bp_cb), node);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
+
+	menuitem = gtk_image_menu_item_new_with_mnemonic("View _Log");
+	g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_showlog_cb), node);
+	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
+
 	if (prpl) {
 		list = prpl->buddy_menu(((struct buddy*)node)->account->gc, ((struct buddy*)node)->name);
 		while (list) {
@@ -214,24 +244,6 @@
 			list = list->next;
 		}
 	}
-	
-	menuitem = gtk_image_menu_item_new_with_mnemonic("_IM");
-	g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_im_cb), node);
-	image = gtk_image_new_from_stock(GAIM_STOCK_IM, GTK_ICON_SIZE_MENU);
-	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image);	
-	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
-	
-	menuitem = gtk_image_menu_item_new_with_mnemonic("_Alias");
-	g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_alias_cb), node);
-	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
-	
-	menuitem = gtk_image_menu_item_new_with_mnemonic("Add Buddy _Pounce");
-	g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_bp_cb), node);
-	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
-	
-	menuitem = gtk_image_menu_item_new_with_mnemonic("View _Log");
-	g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_showlog_cb), node);
-	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
 
 	gtk_widget_show_all(menu);
 	
@@ -344,11 +356,13 @@
 	GdkPixbuf *pixbuf = gaim_gtk_blist_get_status_icon(b, GAIM_STATUS_ICON_LARGE);
 	PangoLayout *layout;
 	char *tooltiptext = gaim_get_tooltip_text(b);
+	int width;
 
 	layout = gtk_widget_create_pango_layout (gtkblist->tipwindow, NULL);
 	pango_layout_set_markup(layout, tooltiptext, strlen(tooltiptext));
+	pango_layout_set_wrap(layout, PANGO_WRAP_WORD);
 	style = gtkblist->tipwindow->style;
-	
+
 	gtk_paint_flat_box (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
 			    NULL, gtkblist->tipwindow, "tooltip", 0, 0, -1, -1);
 
@@ -439,7 +453,7 @@
 
 	if (gtkblist->timeout) {
 		if ((event->y > gtkblist->rect.y) && ((event->y - gtkblist->rect.height) < gtkblist->rect.y))
-			return;
+			return FALSE;
 		/* We've left the cell.  Remove the timeout and create a new one below */
 		if (gtkblist->tipwindow) {
 			gtk_widget_destroy(gtkblist->tipwindow);
@@ -526,13 +540,9 @@
 	char *warning = NULL, *idletime = NULL;
 
 	if (prpl->tooltip_text) {
-		char *tmp = prpl->tooltip_text(b);
-		if (tmp) {
-			statustext = g_markup_escape_text(tmp, strlen(tmp));
-			g_free(tmp);
-		}
+		statustext = prpl->tooltip_text(b);
 	}
-	
+
 	if (b->idle) {
 		int ihrs, imin;
 		time_t t;
@@ -540,14 +550,14 @@
 		ihrs = (t - b->idle) / 3600;
 		imin = ((t - b->idle) / 60) % 60;
 		if (ihrs)
-			idletime = g_strdup_printf(_("<b>Idle</b> %dh%02dm"), ihrs, imin);
+			idletime = g_strdup_printf(_("<b>Idle:</b> %dh%02dm"), ihrs, imin);
 		else
-			idletime = g_strdup_printf(_("<b>Idle</b> %dm"), imin);
+			idletime = g_strdup_printf(_("<b>Idle:</b> %dm"), imin);
 	}
-	
+
 	if (b->evil > 0)
-		warning = g_strdup_printf(_("<b>Warned</b> %d%%"), b->evil);
-	
+		warning = g_strdup_printf(_("<b>Warned:</b> %d%%"), b->evil);
+
 	text = g_strdup_printf("<span size='larger' weight='bold'>%s</span>"
 			       "%s %s %s"  /* Alias */
 			       "%s %s %s"  /* Nickname */
@@ -555,8 +565,8 @@
 			       "%s %s"     /* Warning */
 			       "%s %s",    /* Status */
 			       b->name,
-			       b->alias && b->alias[0] ? "\n" : "", b->alias && b->alias[0] ? _("<b>Alias</b> ") : "", b->alias ? b->alias : "", 
-			       b->server_alias ? "\n" : "", b->server_alias ? _("<b>Nickname</b> ") : "", b->server_alias ? b->server_alias : "", 
+			       b->alias && b->alias[0] ? "\n" : "", b->alias && b->alias[0] ? _("<b>Alias:</b> ") : "", b->alias ? b->alias : "", 
+			       b->server_alias ? "\n" : "", b->server_alias ? _("<b>Nickname:</b> ") : "", b->server_alias ? b->server_alias : "", 
 			       b->idle ? "\n" : "", b->idle ? idletime : "", 
 			       b->evil ? "\n" : "", b->evil ? warning : "",
 			       statustext ? "\n" : "", statustext ? statustext : "");
@@ -730,7 +740,7 @@
 
 	int ihrs, imin;
 	char *idletime = NULL, *warning = NULL, *statustext = NULL;
-       	time_t t;
+	time_t t;
 
 	if (!(blist_options & OPT_BLIST_SHOW_ICONS)) {
 		if (b->idle > 0 && blist_options & OPT_BLIST_GREY_IDLERS) {
@@ -748,11 +758,17 @@
 	imin = ((t - b->idle) / 60) % 60;
 
 	if (prpl->status_text) {
-		const char *tmp = prpl->status_text(b);
-		if (tmp)
-			statustext = g_markup_escape_text(tmp, strlen(tmp));
+		char *tmp = prpl->status_text(b);
+
+		if(tmp) {
+			if(strlen(tmp) > 20)
+				statustext = g_strdup_printf("%.16s...", tmp);
+			else
+				statustext = g_strdup(tmp);
+			g_free(tmp);
+		}
 	}
-	
+
 	if (b->idle) {
 		if (ihrs)
 			idletime = g_strdup_printf(_("Idle (%dh%02dm)"), ihrs, imin);
--- a/src/core.h	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/core.h	Thu Mar 13 06:08:56 2003 +0000
@@ -208,7 +208,7 @@
 extern char *event_name(enum gaim_event);
 
 /* Functions in server.c */
-extern void serv_got_update(struct gaim_connection *, char *, int, int, time_t, time_t, int, guint);
+extern void serv_got_update(struct gaim_connection *, char *, int, int, time_t, time_t, int);
 extern void serv_got_im(struct gaim_connection *, char *, char *, guint32, time_t, gint);
 extern void serv_got_typing(struct gaim_connection *, char *, int, int);
 extern void serv_got_typing_stopped(struct gaim_connection *, char *);
--- a/src/protocols/gg/gg.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/protocols/gg/gg.c	Thu Mar 13 06:08:56 2003 +0000
@@ -1,6 +1,6 @@
 /*
  * gaim - Gadu-Gadu Protocol Plugin
- * $Id: gg.c 5016 2003-03-11 18:15:36Z faceprint $
+ * $Id: gg.c 5047 2003-03-13 06:08:56Z faceprint $
  *
  * Copyright (C) 2001 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
  * 
@@ -365,7 +365,7 @@
 
 				g_snprintf(user, sizeof(user), "%lu", n->uin);
 				serv_got_update(gc, user, (status == UC_UNAVAILABLE) ? 0 : 1, 0, 0, 0,
-						status, 0);
+						status);
 				n++;
 			}
 		}
@@ -391,7 +391,7 @@
 
 			g_snprintf(user, sizeof(user), "%lu", e->event.status.uin);
 			serv_got_update(gc, user, (status == UC_UNAVAILABLE) ? 0 : 1, 0, 0, 0,
-					status, 0);
+					status);
 		}
 		break;
 	case GG_EVENT_ACK:
--- a/src/protocols/icq/gaim_icq.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/protocols/icq/gaim_icq.c	Thu Mar 13 06:08:56 2003 +0000
@@ -118,13 +118,13 @@
 
 	g_snprintf(buf, sizeof buf, "%lu", uin);
 	status = (st == STATUS_ONLINE) ? 0 : UC_UNAVAILABLE | (st << 1);
-	serv_got_update(gc, buf, 1, 0, 0, 0, status, 0);
+	serv_got_update(gc, buf, 1, 0, 0, 0, status);
 }
 
 static void icq_user_offline(icq_Link *link, unsigned long uin) {
 	struct gaim_connection *gc = link->icq_UserData;
 	char buf[256]; g_snprintf(buf, sizeof buf, "%lu", uin);
-	serv_got_update(gc, buf, 0, 0, 0, 0, 0, 0);
+	serv_got_update(gc, buf, 0, 0, 0, 0, 0);
 }
 
 static void icq_user_status(icq_Link *link, unsigned long uin, unsigned long st) {
@@ -134,7 +134,7 @@
 
 	g_snprintf(buf, sizeof buf, "%lu", uin);
 	status = (st == STATUS_ONLINE) ? 0 : UC_UNAVAILABLE | (st << 1);
-	serv_got_update(gc, buf, 1, 0, 0, 0, status, 0);
+	serv_got_update(gc, buf, 1, 0, 0, 0, status);
 }
 
 static gboolean icq_set_timeout_cb(gpointer data) {
@@ -462,23 +462,6 @@
 	icq_SendInfoReq(id->link, atol(who));
 }
 
-static void icq_info(struct gaim_connection *gc, char *who) {
-	serv_get_info(gc, who);
-}
-
-static GList *icq_buddy_menu(struct gaim_connection *gc, char *who) {
-	GList *m = NULL;
-	struct proto_buddy_menu *pbm;
-
-	pbm = g_new0(struct proto_buddy_menu, 1);
-	pbm->label = _("Get Info");
-	pbm->callback = icq_info;
-	pbm->gc = gc;
-	m = g_list_append(m, pbm);
-
-	return m;
-}
-
 static GList *icq_away_states(struct gaim_connection *gc) {
 	GList *m = NULL;
 
@@ -499,7 +482,7 @@
 	ret->name = g_strdup("ICQ");
 	ret->list_icon = icq_list_icon;
 	ret->away_states = icq_away_states;
-	ret->buddy_menu = icq_buddy_menu;
+	ret->buddy_menu = NULL;
 	ret->login = icq_login;
 	ret->close = icq_close;
 	ret->send_im = icq_send_msg;
--- a/src/protocols/irc/irc.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/protocols/irc/irc.c	Thu Mar 13 06:08:56 2003 +0000
@@ -593,9 +593,9 @@
 				if (x && (*l != ' ' && *l != 0))
 					x = 0;
 				if (!b->present && x)
-					serv_got_update(gc, b->name, 1, 0, 0, 0, 0, 0);
+					serv_got_update(gc, b->name, 1, 0, 0, 0, 0);
 				else if (b->present && !x)
-					serv_got_update(gc, b->name, 0, 0, 0, 0, 0, 0);
+					serv_got_update(gc, b->name, 0, 0, 0, 0, 0);
 				g_free(tmp);
 			}
 			m = m->next;
@@ -2762,12 +2762,6 @@
 	struct proto_buddy_menu *pbm;
 
 	pbm = g_new0(struct proto_buddy_menu, 1);
-	pbm->label = _("Get Info");
-	pbm->callback = irc_get_info;
-	pbm->gc = gc;
-	m = g_list_append(m, pbm);
-
-	pbm = g_new0(struct proto_buddy_menu, 1);
 	pbm->label = _("DCC Chat");
 	pbm->callback = irc_start_chat;
 	pbm->gc = gc;
--- a/src/protocols/jabber/jabber.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/protocols/jabber/jabber.c	Thu Mar 13 06:08:56 2003 +0000
@@ -1519,7 +1519,7 @@
 		}
 	}
 
-	if (type && (strcasecmp(type, "unavailable") == 0))
+	if (state == UC_ERROR || (type && (strcasecmp(type, "unavailable") == 0)))
 		jabber_remove_resource(GJ_GC(gjc), buddy, gjid->resource);
 	else {
 		jabber_track_resource(GJ_GC(gjc), buddy, gjid->resource, priority, state);
@@ -1533,9 +1533,9 @@
 		/* this is where we handle presence information for "regular" buddies */
 		jab_res_info jri = jabber_find_resource(GJ_GC(gjc), buddy);
 		if(jri) {
-			serv_got_update(GJ_GC(gjc), buddy, 1, 0, b->signon, b->idle, jri->state, 0);
+			serv_got_update(GJ_GC(gjc), buddy, 1, 0, b->signon, b->idle, jri->state);
 		} else
-			serv_got_update(GJ_GC(gjc), buddy, 0, 0, 0, 0, 0, 0);
+			serv_got_update(GJ_GC(gjc), buddy, 0, 0, 0, 0, 0);
 
 	} else {
 		if (gjid->resource) {
@@ -1797,7 +1797,7 @@
 				gaim_blist_save();
 				if(present) {
 					serv_got_update(GJ_GC(gjc), buddyname, 1, 0, signon, idle,
-							uc, 0);
+							uc);
 				}
 			} else if(name != NULL && strcmp(b->alias, name)) {
 				g_free(b->alias);
@@ -3202,6 +3202,15 @@
 
 }
 
+static char *jabber_status_text(struct buddy *b)
+{
+	struct jabber_data *jd = b->account->gc->proto_data;
+	if (b->uc & UC_UNAVAILABLE) {
+			return strip_html(jabber_lookup_away(jd->gjc, b->name));
+	}
+	return NULL;
+}
+
 static GList *jabber_buddy_menu(struct gaim_connection *gc, char *who) {
 	GList *m = NULL;
 	struct proto_buddy_menu *pbm;
@@ -3222,11 +3231,6 @@
 		g_free(realwho);
 
 		pbm = g_new0(struct proto_buddy_menu, 1);
-		pbm->label = _("Get Info");
-		pbm->callback = jabber_get_info;
-		pbm->gc = gc;
-		m = g_list_append(m, pbm);
-		pbm = g_new0(struct proto_buddy_menu, 1);
 		pbm->label = _("Get Away Msg");
 		pbm->callback = jabber_get_away_msg;
 		pbm->gc = gc;
@@ -4157,6 +4161,7 @@
 	ret->options = OPT_PROTO_UNIQUE_CHATNAME | OPT_PROTO_CHAT_TOPIC;
 	ret->name = g_strdup("Jabber");
 	ret->list_icon = jabber_list_icon;
+	ret->status_text = jabber_status_text;
 	ret->away_states = jabber_away_states;
 	ret->actions = jabber_actions;
 	ret->buddy_menu = jabber_buddy_menu;
--- a/src/protocols/msn/msn.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/protocols/msn/msn.c	Thu Mar 13 06:08:56 2003 +0000
@@ -418,7 +418,7 @@
 		char *usr = buf;
 
 		GET_NEXT(usr);
-		serv_got_update(gc, usr, 0, 0, 0, 0, 0, 0);
+		serv_got_update(gc, usr, 0, 0, 0, 0, 0);
 	} else if (!g_strncasecmp(buf, "GTC", 3)) {
 	} else if (!g_strncasecmp(buf, "INF", 3)) {
 	} else if (!g_strncasecmp(buf, "ILN", 3)) {
@@ -452,7 +452,7 @@
 			status |= UC_UNAVAILABLE | (MSN_LUNCH << 1);
 		}
 
-		serv_got_update(gc, user, 1, 0, 0, 0, status, 0);
+		serv_got_update(gc, user, 1, 0, 0, 0, status);
 	} else if (!g_strncasecmp(buf, "LST", 3)) {
 		char *which, *who, *friend, *tmp = buf;
 		struct msn_add_permit *ap; /* for any as yet undealt with buddies who've added you to their buddy list when you were off-line.  How dare they! */
@@ -596,7 +596,7 @@
 			status |= UC_UNAVAILABLE | (MSN_LUNCH << 1);
 		}
 
-		serv_got_update(gc, user, 1, 0, 0, 0, status, 0);
+		serv_got_update(gc, user, 1, 0, 0, 0, status);
 	} else if (!g_strncasecmp(buf, "OUT", 3)) {
 		char *tmp = buf;
 
@@ -1637,14 +1637,14 @@
 	mft->xfer = transfer_out_add(gc, mft->sn);
 }
 #endif
-static const char *msn_status_text(struct buddy *b) {
+static char *msn_status_text(struct buddy *b) {
 	if (b->uc & UC_UNAVAILABLE)
-		return msn_get_away_text(b->uc >> 1);
+		return strip_html(msn_get_away_text(b->uc >> 1));
 	return NULL;
 }
 
-static const char *msn_tooltip_text(struct buddy *b) {
-	return g_strdup(msn_get_away_text(b->uc >> 1));
+static char *msn_tooltip_text(struct buddy *b) {
+	return strip_html(msn_get_away_text(b->uc >> 1));
 }
 
 static GList *msn_buddy_menu(struct gaim_connection *gc, char *who)
--- a/src/protocols/napster/napster.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/protocols/napster/napster.c	Thu Mar 13 06:08:56 2003 +0000
@@ -320,7 +320,7 @@
 
 		g_free(buf);
 		return;
-		
+
 	}
 
 	if (command == 0xd1) {
@@ -328,15 +328,15 @@
 
 		res = g_strsplit(buf, " ", 0);
 
-		serv_got_update(gc, res[0], 1, 0, 0, 0, 0, 0);
-		
+		serv_got_update(gc, res[0], 1, 0, 0, 0, 0);
+
 		g_strfreev(res);
 		g_free(buf);
 		return;
 	}
 
 	if (command == 0xd2) {
-		serv_got_update(gc, buf, 0, 0, 0, 0, 0, 0);
+		serv_got_update(gc, buf, 0, 0, 0, 0, 0);
 		g_free(buf);
 		return;
 	}
--- a/src/protocols/oscar/oscar.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/protocols/oscar/oscar.c	Thu Mar 13 06:08:56 2003 +0000
@@ -111,6 +111,7 @@
 	GSList *file_transfers;
 	GSList *hasicons;
 	GHashTable *supports_tn;
+	GHashTable *buddy_caps;
 
 	gboolean killme;
 	gboolean icq;
@@ -549,6 +550,7 @@
 		gc->flags |= OPT_CONN_AUTO_RESP;
 	}
 	od->supports_tn = g_hash_table_new(g_str_hash, g_str_equal);
+	od->buddy_caps = g_hash_table_new(g_str_hash, g_str_equal);
 
 	sess = g_new0(aim_session_t, 1);
 
@@ -623,6 +625,7 @@
 		g_free(n);
 	}
 	g_hash_table_destroy(od->supports_tn);
+	g_hash_table_destroy(od->buddy_caps);
 	while (od->evilhack) {
 		g_free(od->evilhack->data);
 		od->evilhack = g_slist_remove(od->evilhack, od->evilhack->data);
@@ -1629,8 +1632,11 @@
 	if (!aim_sncmp(gc->username, info->sn))
 		g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", info->sn);
 
+	g_hash_table_replace(od->buddy_caps, normalize(info->sn),
+			GINT_TO_POINTER(caps));
+
 	serv_got_update(gc, info->sn, 1, info->warnlevel/10, signon,
-			time_idle, type, caps);
+			time_idle, type);
 
 	return 1;
 }
@@ -1644,7 +1650,7 @@
 	info = va_arg(ap, aim_userinfo_t *);
 	va_end(ap);
 
-	serv_got_update(gc, info->sn, 0, 0, 0, 0, 0, 0);
+	serv_got_update(gc, info->sn, 0, 0, 0, 0, 0);
 
 	return 1;
 }
@@ -2779,7 +2785,6 @@
 }
 
 
-/* XXX This is horribly copied from ../../buddy.c. */
 static char *caps_string(guint caps)
 {
 	static char buf[512], *tmp;
@@ -2851,6 +2856,14 @@
 	return buf;
 }
 
+static char *oscar_tooltip_text(struct buddy *b) {
+	struct oscar_data *od = b->account->gc->proto_data;
+	guint caps = GPOINTER_TO_INT(g_hash_table_lookup(od->buddy_caps,
+				normalize(b->name)));
+
+	return g_strdup_printf(_("<b>Capabilities:</b> %s"), caps_string(caps));
+}
+
 static int gaim_parse_user_info(aim_session_t *sess, aim_frame_t *fr, ...) {
 	aim_userinfo_t *info;
 	char *text_enc = NULL, *text = NULL, *utf8 = NULL;
@@ -5190,12 +5203,6 @@
 	GList *m = NULL;
 	struct proto_buddy_menu *pbm;
 
-	pbm = g_new0(struct proto_buddy_menu, 1);
-	pbm->label = _("Get Info");
-	pbm->callback = oscar_get_info;
-	pbm->gc = gc;
-	m = g_list_append(m, pbm);
-
 	if (od->icq) {
 #if 0
 		pbm = g_new0(struct proto_buddy_menu, 1);
@@ -5607,6 +5614,7 @@
 	ret->chat_send = oscar_chat_send;
 	ret->keepalive = oscar_keepalive;
 	ret->convo_closed = oscar_convo_closed;
+	ret->tooltip_text = oscar_tooltip_text;
 
 	puo = g_new0(struct proto_user_opt, 1);
 	puo->label = g_strdup("Auth Host:");
--- a/src/protocols/toc/toc.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/protocols/toc/toc.c	Thu Mar 13 06:08:56 2003 +0000
@@ -754,7 +754,7 @@
 			g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", c);
 		g_free(tmp);
 
-		serv_got_update(gc, c, logged, evil, signon, time_idle, type, 0);
+		serv_got_update(gc, c, logged, evil, signon, time_idle, type);
 	} else if (!strcasecmp(c, "ERROR")) {
 		do_error_dialog(show_error_message(), NULL, GAIM_ERROR);
 	} else if (!strcasecmp(c, "EVILED")) {
@@ -1305,12 +1305,6 @@
 	struct proto_buddy_menu *pbm;
 
 	pbm = g_new0(struct proto_buddy_menu, 1);
-	pbm->label = _("Get Info");
-	pbm->callback = toc_get_info;
-	pbm->gc = gc;
-	m = g_list_append(m, pbm);
-
-	pbm = g_new0(struct proto_buddy_menu, 1);
 	pbm->label = _("Get Dir Info");
 	pbm->callback = toc_get_dir;
 	pbm->gc = gc;
--- a/src/protocols/yahoo/yahoo.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/protocols/yahoo/yahoo.c	Thu Mar 13 06:08:56 2003 +0000
@@ -408,15 +408,15 @@
 		case 13: /* in pager? */
 			if (pkt->service == YAHOO_SERVICE_LOGOFF ||
 			    strtol(pair->value, NULL, 10) == 0) {
-				serv_got_update(gc, name, 0, 0, 0, 0, 0, 0);
+				serv_got_update(gc, name, 0, 0, 0, 0, 0);
 				break;
 			}
 			if (g_hash_table_lookup(yd->games, name))
 				gamestate = YAHOO_STATUS_GAME;
 			if (state == YAHOO_STATUS_AVAILABLE)
-				serv_got_update(gc, name, 1, 0, 0, 0, gamestate, 0);
+				serv_got_update(gc, name, 1, 0, 0, 0, gamestate);
 			else 
-				serv_got_update(gc, name, 1, 0, 0, 0, (state << 2) | UC_UNAVAILABLE | gamestate, 0);
+				serv_got_update(gc, name, 1, 0, 0, 0, (state << 2) | UC_UNAVAILABLE | gamestate);
 			if (state == YAHOO_STATUS_CUSTOM) {
 				gpointer val = g_hash_table_lookup(yd->hash, name);
 				if (val) {
@@ -527,7 +527,7 @@
 			}
 			g_hash_table_insert (yd->games, g_strdup(from), g_strdup(game));
 			if (bud)
-				serv_got_update(gc, from, 1, 0, 0, 0, bud->uc | YAHOO_STATUS_GAME, 0);
+				serv_got_update(gc, from, 1, 0, 0, 0, bud->uc | YAHOO_STATUS_GAME);
 		} else {
 			if (g_hash_table_lookup_extended (yd->games, from, free1, free2)) {
 				g_free(free1);
@@ -535,7 +535,7 @@
 				g_hash_table_remove (yd->games, from);
 			}
 			if (bud)
-				serv_got_update(gc, from, 1, 0, 0, 0, bud->uc & ~YAHOO_STATUS_GAME, 0);
+				serv_got_update(gc, from, 1, 0, 0, 0, bud->uc & ~YAHOO_STATUS_GAME);
 		}
 	}
 }
@@ -614,11 +614,11 @@
 		show_got_added(gc, id, who, NULL, msg);
 	if (name) {
 		if (state == YAHOO_STATUS_AVAILABLE)
-			serv_got_update(gc, name, 1, 0, 0, 0, 0, 0);
+			serv_got_update(gc, name, 1, 0, 0, 0, 0);
 		else if (state == YAHOO_STATUS_IDLE)
-			serv_got_update(gc, name, 1, 0, 0, time(NULL) - 600, (state << 2), 0);
+			serv_got_update(gc, name, 1, 0, 0, time(NULL) - 600, (state << 2));
 		else
-			serv_got_update(gc, name, 1, 0, 0, 0, (state << 2) | UC_UNAVAILABLE, 0);
+			serv_got_update(gc, name, 1, 0, 0, 0, (state << 2) | UC_UNAVAILABLE);
 		if (state == YAHOO_STATUS_CUSTOM) {
 			gpointer val = g_hash_table_lookup(yd->hash, name);
 			if (val) {
@@ -1067,14 +1067,14 @@
 	g_free(game);
 }
 
-static const char *yahoo_status_text(struct buddy *b)
+static char *yahoo_status_text(struct buddy *b)
 {
 	struct yahoo_data *yd = (struct yahoo_data*)b->account->gc->proto_data;
 	if (b->uc & UC_UNAVAILABLE) {
-	       	if ((b->uc >> 2) != YAHOO_STATUS_CUSTOM)
-			return yahoo_get_status_string(b->uc >> 2);
+		if ((b->uc >> 2) != YAHOO_STATUS_CUSTOM)
+			return g_strdup(yahoo_get_status_string(b->uc >> 2));
 		else
-			return g_hash_table_lookup(yd->hash, b->name);
+			return strip_html(g_hash_table_lookup(yd->hash, b->name));
 	}
 	return NULL;
 }
@@ -1086,7 +1086,7 @@
 		if ((b->uc >> 2) != YAHOO_STATUS_CUSTOM)
 			return g_strdup(yahoo_get_status_string(b->uc >> 2));
 		else
-			return g_strdup(g_hash_table_lookup(yd->hash, b->name));
+			return strip_html(g_hash_table_lookup(yd->hash, b->name));
 	}
 	return NULL;
 }
--- a/src/protocols/zephyr/zephyr.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/protocols/zephyr/zephyr.c	Thu Mar 13 06:08:56 2003 +0000
@@ -347,7 +347,7 @@
 				g_show_info_text(NULL, NULL, 2, str->str, NULL);
 				g_string_free(str, TRUE);
 			} else
-				serv_got_update(zgc, b->name, nlocs, 0, 0, 0, 0, 0);
+				serv_got_update(zgc, b->name, nlocs, 0, 0, 0, 0);
 
 			free(user);
 		}
--- a/src/prpl.h	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/prpl.h	Thu Mar 13 06:08:56 2003 +0000
@@ -195,7 +195,7 @@
 	 * Gets a short string representing this buddy's status.  This will be shown
 	 * on the buddy list.
 	 */
-	const char *(* status_text)(struct buddy *buddy);
+	char *(* status_text)(struct buddy *buddy);
 	
 	/**
 	 * Gets a string to put in the buddy list tooltip.
--- a/src/server.c	Thu Mar 13 00:10:56 2003 +0000
+++ b/src/server.c	Thu Mar 13 06:08:56 2003 +0000
@@ -848,7 +848,7 @@
 
 
 void serv_got_update(struct gaim_connection *gc, char *name, int loggedin,
-					 int evil, time_t signon, time_t idle, int type, guint caps)
+					 int evil, time_t signon, time_t idle, int type)
 {
 	struct buddy *b = gaim_find_buddy(gc->account, name);