Mercurial > pidgin.yaz
comparison pidgin/gtkblist.c @ 15486:e9a869472b40
really fix that tooltip display glitch
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Fri, 02 Feb 2007 03:01:58 +0000 |
parents | f83ef1bee399 |
children | 5369a4999f1c |
comparison
equal
deleted
inserted
replaced
15485:f83ef1bee399 | 15486:e9a869472b40 |
---|---|
2284 gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, | 2284 gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, |
2285 NULL, gtkblist->tipwindow, "tooltip", 0, 0, -1, -1); | 2285 NULL, gtkblist->tipwindow, "tooltip", 0, 0, -1, -1); |
2286 | 2286 |
2287 max_width = 0; | 2287 max_width = 0; |
2288 max_text_width = 0; | 2288 max_text_width = 0; |
2289 | |
2289 for(l = gtkblist->tooltipdata; l; l = l->next) | 2290 for(l = gtkblist->tooltipdata; l; l = l->next) |
2290 { | 2291 { |
2291 struct tooltip_data *td = l->data; | 2292 struct tooltip_data *td = l->data; |
2292 max_text_width = MAX(max_text_width, | 2293 max_text_width = MAX(max_text_width, |
2293 MAX(td->width, td->name_width)); | 2294 MAX(td->width, td->name_width)); |
2295 } | |
2296 | |
2297 for(l = gtkblist->tooltipdata; l; l = l->next) | |
2298 { | |
2299 struct tooltip_data *td = l->data; | |
2294 max_width = MAX(max_width, | 2300 max_width = MAX(max_width, |
2295 TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + | 2301 TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + |
2296 max_text_width + SMALL_SPACE + td->avatar_width + TOOLTIP_BORDER); | 2302 max_text_width + SMALL_SPACE + td->avatar_width + TOOLTIP_BORDER); |
2297 prpl_col = MAX(prpl_col, | 2303 prpl_col = MAX(prpl_col, |
2298 TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + td->name_width - PRPL_SIZE); | 2304 TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + td->name_width - PRPL_SIZE); |
2306 if (td->avatar && gaim_gdk_pixbuf_is_opaque(td->avatar)) | 2312 if (td->avatar && gaim_gdk_pixbuf_is_opaque(td->avatar)) |
2307 gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, | 2313 gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, |
2308 NULL, gtkblist->tipwindow, "tooltip", | 2314 NULL, gtkblist->tipwindow, "tooltip", |
2309 max_width - (td->avatar_width+ TOOLTIP_BORDER)-1, | 2315 max_width - (td->avatar_width+ TOOLTIP_BORDER)-1, |
2310 current_height-1,td->avatar_width+2, td->avatar_height+2); | 2316 current_height-1,td->avatar_width+2, td->avatar_height+2); |
2311 | |
2312 | 2317 |
2313 #if GTK_CHECK_VERSION(2,2,0) | 2318 #if GTK_CHECK_VERSION(2,2,0) |
2314 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon, | 2319 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon, |
2315 0, 0, TOOLTIP_BORDER, current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); | 2320 0, 0, TOOLTIP_BORDER, current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); |
2316 if(td->avatar) | 2321 if(td->avatar) |
2327 #else | 2332 #else |
2328 gdk_pixbuf_render_to_drawable(td->status_icon, GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, 12, current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); | 2333 gdk_pixbuf_render_to_drawable(td->status_icon, GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, 12, current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); |
2329 if(td->avatar) | 2334 if(td->avatar) |
2330 gdk_pixbuf_render_to_drawable(td->avatar, | 2335 gdk_pixbuf_render_to_drawable(td->avatar, |
2331 GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, | 2336 GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, |
2332 max_width - (td->avatar_width + 12), | 2337 max_width - (td->avatar_width + TOOLTIP_BORDER), |
2333 current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); | 2338 current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); |
2334 #endif | 2339 #endif |
2335 | 2340 |
2336 gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, | 2341 gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, |
2337 NULL, gtkblist->tipwindow, "tooltip", | 2342 NULL, gtkblist->tipwindow, "tooltip", |
2468 h = TOOLTIP_BORDER + MAX(td->height + td->name_height, MAX(STATUS_SIZE, td->avatar_height)) | 2473 h = TOOLTIP_BORDER + MAX(td->height + td->name_height, MAX(STATUS_SIZE, td->avatar_height)) |
2469 + TOOLTIP_BORDER; | 2474 + TOOLTIP_BORDER; |
2470 } else if(GAIM_BLIST_NODE_IS_CONTACT(node)) { | 2475 } else if(GAIM_BLIST_NODE_IS_CONTACT(node)) { |
2471 GaimBlistNode *child; | 2476 GaimBlistNode *child; |
2472 GaimBuddy *b = gaim_contact_get_priority_buddy((GaimContact *)node); | 2477 GaimBuddy *b = gaim_contact_get_priority_buddy((GaimContact *)node); |
2478 GList *l; | |
2473 int tw = 0; | 2479 int tw = 0; |
2474 w = h = 0; | 2480 w = h = 0; |
2481 | |
2475 for(child = node->child; child; child = child->next) | 2482 for(child = node->child; child; child = child->next) |
2476 { | 2483 { |
2477 if(GAIM_BLIST_NODE_IS_BUDDY(child) && buddy_is_displayable((GaimBuddy*)child)) { | 2484 if(GAIM_BLIST_NODE_IS_BUDDY(child) && buddy_is_displayable((GaimBuddy*)child)) { |
2478 struct tooltip_data *td = create_tip_for_node(child, (b == (GaimBuddy*)child)); | 2485 struct tooltip_data *td = create_tip_for_node(child, (b == (GaimBuddy*)child)); |
2479 if (b == (GaimBuddy *)child) { | 2486 if (b == (GaimBuddy *)child) { |
2480 gtkblist->tooltipdata = g_list_prepend(gtkblist->tooltipdata, td); | 2487 gtkblist->tooltipdata = g_list_prepend(gtkblist->tooltipdata, td); |
2481 } else { | 2488 } else { |
2482 gtkblist->tooltipdata = g_list_append(gtkblist->tooltipdata, td); | 2489 gtkblist->tooltipdata = g_list_append(gtkblist->tooltipdata, td); |
2483 } | 2490 } |
2484 tw = MAX(tw, MAX(td->width, td->name_width)); | 2491 tw = MAX(tw, MAX(td->width, td->name_width)); |
2485 w = MAX(w, TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + | 2492 } |
2493 } | |
2494 | |
2495 for(l = gtkblist->tooltipdata; l; l = l->next) | |
2496 { | |
2497 struct tooltip_data *td = l->data; | |
2498 w = MAX(w, TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + | |
2486 tw + SMALL_SPACE + td->avatar_width + TOOLTIP_BORDER); | 2499 tw + SMALL_SPACE + td->avatar_width + TOOLTIP_BORDER); |
2487 h += MAX(TOOLTIP_BORDER + MAX(STATUS_SIZE,td->avatar_height) + TOOLTIP_BORDER, | 2500 h += MAX(TOOLTIP_BORDER + MAX(STATUS_SIZE,td->avatar_height) + TOOLTIP_BORDER, |
2488 TOOLTIP_BORDER + td->height + td->name_height + TOOLTIP_BORDER); | 2501 TOOLTIP_BORDER + td->height + td->name_height + TOOLTIP_BORDER); |
2489 } | |
2490 } | 2502 } |
2491 } else { | 2503 } else { |
2492 gtk_widget_destroy(gtkblist->tipwindow); | 2504 gtk_widget_destroy(gtkblist->tipwindow); |
2493 gtkblist->tipwindow = NULL; | 2505 gtkblist->tipwindow = NULL; |
2494 return FALSE; | 2506 return FALSE; |