diff pidgin/gtkblist.c @ 15481:62a1ebd08b74

fix a weird tooltip rendering bug when the second buddy in a contact tooltip had an icon, but the first one didn't, and the name on the first one was longer than the name on the second one. Also, remove the now duplicated protocol icon from blist chats
author Nathan Walp <nwalp@pidgin.im>
date Thu, 01 Feb 2007 05:47:08 +0000
parents 5551adcf8f97
children f83ef1bee399
line wrap: on
line diff
--- a/pidgin/gtkblist.c	Thu Feb 01 00:37:13 2007 +0000
+++ b/pidgin/gtkblist.c	Thu Feb 01 05:47:08 2007 +0000
@@ -2108,21 +2108,6 @@
 				if (!(icon = gaim_buddy_icons_find(buddy->account, buddy->name))) /* Not sure I like this...*/
 					return NULL;
 			data = gaim_buddy_icon_get_data(icon, &len);
-		} else if(chat != NULL) {
-			if(prpl_info && prpl_info->list_icon) {
-				char *contents;
-				char *image = g_strdup_printf("%s.png", prpl_info->list_icon(account, NULL));
-				char *filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "status", "32", image, NULL);
-				g_free(image);
-
-				gaim_debug_info("icon", "Using %s as a buddy icon for a chat\n");
-
-				/* we'll exit below with data == NULL if this fails */
-				if(g_file_get_contents(filename, &contents, &len, NULL)) {
-					data = (const guchar*)contents;
-				}
-				g_free(filename);
-			}
 		}
 		custom = FALSE;  /* We are not using the custom icon */
 	}
@@ -2289,6 +2274,7 @@
 {
 	GtkStyle *style;
 	int current_height, max_width;
+	int max_text_width;
 	GList *l;
 	int prpl_col = 0;
 
@@ -2300,13 +2286,16 @@
 			NULL, gtkblist->tipwindow, "tooltip", 0, 0, -1, -1);
 
 	max_width = 0;
+	max_text_width = 0;
 	for(l = gtkblist->tooltipdata; l; l = l->next)
 	{
 		struct tooltip_data *td = l->data;
+		max_text_width = MAX(max_text_width,
+				MAX(td->width, td->name_width));
 		max_width = MAX(max_width,
 				TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE +
-				MAX(td->width, td->name_width) + SMALL_SPACE + td->avatar_width + TOOLTIP_BORDER);
-		prpl_col = MAX(prpl_col, 
+				max_text_width + SMALL_SPACE + td->avatar_width + TOOLTIP_BORDER);
+		prpl_col = MAX(prpl_col,
 				TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + td->name_width - PRPL_SIZE);
 	}
 
@@ -2475,13 +2464,14 @@
 	if(GAIM_BLIST_NODE_IS_CHAT(node) || GAIM_BLIST_NODE_IS_BUDDY(node)) {
 		struct tooltip_data *td = create_tip_for_node(node, TRUE);
 		gtkblist->tooltipdata = g_list_append(gtkblist->tooltipdata, td);
-		w = TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + 
+		w = TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE +
 			MAX(td->width, td->name_width) + SMALL_SPACE + td->avatar_width + TOOLTIP_BORDER;
 		h = TOOLTIP_BORDER + MAX(td->height + td->name_height, MAX(STATUS_SIZE, td->avatar_height))
 			+ TOOLTIP_BORDER;
 	} else if(GAIM_BLIST_NODE_IS_CONTACT(node)) {
 		GaimBlistNode *child;
 		GaimBuddy *b = gaim_contact_get_priority_buddy((GaimContact *)node);
+		int tw = 0;
 		w = h = 0;
 		for(child = node->child; child; child = child->next)
 		{
@@ -2492,10 +2482,10 @@
 				} else {
 					gtkblist->tooltipdata = g_list_append(gtkblist->tooltipdata, td);
 				}
-				w = MAX(w, TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + 
-					MAX(td->width, td->name_width) + SMALL_SPACE + 
-					td->avatar_width + TOOLTIP_BORDER);
-				h += MAX(TOOLTIP_BORDER + MAX(STATUS_SIZE,td->avatar_height) + TOOLTIP_BORDER, 
+				tw = MAX(tw, MAX(td->width, td->name_width));
+				w = MAX(w, TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE +
+					tw + SMALL_SPACE + td->avatar_width + TOOLTIP_BORDER);
+				h += MAX(TOOLTIP_BORDER + MAX(STATUS_SIZE,td->avatar_height) + TOOLTIP_BORDER,
 					 TOOLTIP_BORDER + td->height + td->name_height + TOOLTIP_BORDER);
 			}
 		}