Mercurial > pidgin.yaz
comparison src/buddy.c @ 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 | 9d3b7b106def |
children | 76ccf9740183 |
comparison
equal
deleted
inserted
replaced
4731:6f0ecc21db46 | 4732:c15e0699acae |
---|---|
73 gaim_blist_set_visible(FALSE); | 73 gaim_blist_set_visible(FALSE); |
74 else | 74 else |
75 do_quit(); | 75 do_quit(); |
76 } | 76 } |
77 | 77 |
78 static void gtk_blist_menu_info_cb(GtkWidget *w, struct buddy *b) | |
79 { | |
80 serv_get_info(b->account->gc, b->name); | |
81 } | |
82 | |
78 static void gtk_blist_menu_im_cb(GtkWidget *w, struct buddy *b) | 83 static void gtk_blist_menu_im_cb(GtkWidget *w, struct buddy *b) |
79 { | 84 { |
80 gaim_conversation_new(GAIM_CONV_IM, b->account, b->name); | 85 gaim_conversation_new(GAIM_CONV_IM, b->account, b->name); |
81 } | 86 } |
82 | 87 |
201 | 206 |
202 menu = gtk_menu_new(); | 207 menu = gtk_menu_new(); |
203 | 208 |
204 /* Protocol specific options */ | 209 /* Protocol specific options */ |
205 prpl = find_prpl(((struct buddy*)node)->account->protocol); | 210 prpl = find_prpl(((struct buddy*)node)->account->protocol); |
211 | |
212 if(prpl && prpl->get_info) { | |
213 menuitem = gtk_image_menu_item_new_with_mnemonic("_Get Info"); | |
214 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_info_cb), node); | |
215 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
216 } | |
217 | |
218 menuitem = gtk_image_menu_item_new_with_mnemonic("_IM"); | |
219 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_im_cb), node); | |
220 image = gtk_image_new_from_stock(GAIM_STOCK_IM, GTK_ICON_SIZE_MENU); | |
221 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); | |
222 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
223 | |
224 menuitem = gtk_image_menu_item_new_with_mnemonic("_Alias"); | |
225 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_alias_cb), node); | |
226 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
227 | |
228 menuitem = gtk_image_menu_item_new_with_mnemonic("Add Buddy _Pounce"); | |
229 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_bp_cb), node); | |
230 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
231 | |
232 menuitem = gtk_image_menu_item_new_with_mnemonic("View _Log"); | |
233 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_showlog_cb), node); | |
234 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
235 | |
206 if (prpl) { | 236 if (prpl) { |
207 list = prpl->buddy_menu(((struct buddy*)node)->account->gc, ((struct buddy*)node)->name); | 237 list = prpl->buddy_menu(((struct buddy*)node)->account->gc, ((struct buddy*)node)->name); |
208 while (list) { | 238 while (list) { |
209 struct proto_buddy_menu *pbm = list->data; | 239 struct proto_buddy_menu *pbm = list->data; |
210 menuitem = gtk_menu_item_new_with_mnemonic(pbm->label); | 240 menuitem = gtk_menu_item_new_with_mnemonic(pbm->label); |
212 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gaim_proto_menu_cb), node); | 242 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gaim_proto_menu_cb), node); |
213 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | 243 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
214 list = list->next; | 244 list = list->next; |
215 } | 245 } |
216 } | 246 } |
217 | |
218 menuitem = gtk_image_menu_item_new_with_mnemonic("_IM"); | |
219 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_im_cb), node); | |
220 image = gtk_image_new_from_stock(GAIM_STOCK_IM, GTK_ICON_SIZE_MENU); | |
221 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); | |
222 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
223 | |
224 menuitem = gtk_image_menu_item_new_with_mnemonic("_Alias"); | |
225 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_alias_cb), node); | |
226 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
227 | |
228 menuitem = gtk_image_menu_item_new_with_mnemonic("Add Buddy _Pounce"); | |
229 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_bp_cb), node); | |
230 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
231 | |
232 menuitem = gtk_image_menu_item_new_with_mnemonic("View _Log"); | |
233 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_showlog_cb), node); | |
234 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
235 | 247 |
236 gtk_widget_show_all(menu); | 248 gtk_widget_show_all(menu); |
237 | 249 |
238 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); | 250 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); |
239 | 251 |
342 { | 354 { |
343 GtkStyle *style; | 355 GtkStyle *style; |
344 GdkPixbuf *pixbuf = gaim_gtk_blist_get_status_icon(b, GAIM_STATUS_ICON_LARGE); | 356 GdkPixbuf *pixbuf = gaim_gtk_blist_get_status_icon(b, GAIM_STATUS_ICON_LARGE); |
345 PangoLayout *layout; | 357 PangoLayout *layout; |
346 char *tooltiptext = gaim_get_tooltip_text(b); | 358 char *tooltiptext = gaim_get_tooltip_text(b); |
359 int width; | |
347 | 360 |
348 layout = gtk_widget_create_pango_layout (gtkblist->tipwindow, NULL); | 361 layout = gtk_widget_create_pango_layout (gtkblist->tipwindow, NULL); |
349 pango_layout_set_markup(layout, tooltiptext, strlen(tooltiptext)); | 362 pango_layout_set_markup(layout, tooltiptext, strlen(tooltiptext)); |
363 pango_layout_set_wrap(layout, PANGO_WRAP_WORD); | |
350 style = gtkblist->tipwindow->style; | 364 style = gtkblist->tipwindow->style; |
351 | 365 |
352 gtk_paint_flat_box (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, | 366 gtk_paint_flat_box (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, |
353 NULL, gtkblist->tipwindow, "tooltip", 0, 0, -1, -1); | 367 NULL, gtkblist->tipwindow, "tooltip", 0, 0, -1, -1); |
354 | 368 |
355 #if GTK_CHECK_VERSION(2,2,0) | 369 #if GTK_CHECK_VERSION(2,2,0) |
356 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, pixbuf, | 370 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, pixbuf, |
437 { | 451 { |
438 GtkTreePath *path; | 452 GtkTreePath *path; |
439 | 453 |
440 if (gtkblist->timeout) { | 454 if (gtkblist->timeout) { |
441 if ((event->y > gtkblist->rect.y) && ((event->y - gtkblist->rect.height) < gtkblist->rect.y)) | 455 if ((event->y > gtkblist->rect.y) && ((event->y - gtkblist->rect.height) < gtkblist->rect.y)) |
442 return; | 456 return FALSE; |
443 /* We've left the cell. Remove the timeout and create a new one below */ | 457 /* We've left the cell. Remove the timeout and create a new one below */ |
444 if (gtkblist->tipwindow) { | 458 if (gtkblist->tipwindow) { |
445 gtk_widget_destroy(gtkblist->tipwindow); | 459 gtk_widget_destroy(gtkblist->tipwindow); |
446 gtkblist->tipwindow = NULL; | 460 gtkblist->tipwindow = NULL; |
447 } | 461 } |
524 struct prpl* prpl = find_prpl(b->account->protocol); | 538 struct prpl* prpl = find_prpl(b->account->protocol); |
525 char *statustext = NULL; | 539 char *statustext = NULL; |
526 char *warning = NULL, *idletime = NULL; | 540 char *warning = NULL, *idletime = NULL; |
527 | 541 |
528 if (prpl->tooltip_text) { | 542 if (prpl->tooltip_text) { |
529 char *tmp = prpl->tooltip_text(b); | 543 statustext = prpl->tooltip_text(b); |
530 if (tmp) { | 544 } |
531 statustext = g_markup_escape_text(tmp, strlen(tmp)); | 545 |
532 g_free(tmp); | |
533 } | |
534 } | |
535 | |
536 if (b->idle) { | 546 if (b->idle) { |
537 int ihrs, imin; | 547 int ihrs, imin; |
538 time_t t; | 548 time_t t; |
539 time(&t); | 549 time(&t); |
540 ihrs = (t - b->idle) / 3600; | 550 ihrs = (t - b->idle) / 3600; |
541 imin = ((t - b->idle) / 60) % 60; | 551 imin = ((t - b->idle) / 60) % 60; |
542 if (ihrs) | 552 if (ihrs) |
543 idletime = g_strdup_printf(_("<b>Idle</b> %dh%02dm"), ihrs, imin); | 553 idletime = g_strdup_printf(_("<b>Idle:</b> %dh%02dm"), ihrs, imin); |
544 else | 554 else |
545 idletime = g_strdup_printf(_("<b>Idle</b> %dm"), imin); | 555 idletime = g_strdup_printf(_("<b>Idle:</b> %dm"), imin); |
546 } | 556 } |
547 | 557 |
548 if (b->evil > 0) | 558 if (b->evil > 0) |
549 warning = g_strdup_printf(_("<b>Warned</b> %d%%"), b->evil); | 559 warning = g_strdup_printf(_("<b>Warned:</b> %d%%"), b->evil); |
550 | 560 |
551 text = g_strdup_printf("<span size='larger' weight='bold'>%s</span>" | 561 text = g_strdup_printf("<span size='larger' weight='bold'>%s</span>" |
552 "%s %s %s" /* Alias */ | 562 "%s %s %s" /* Alias */ |
553 "%s %s %s" /* Nickname */ | 563 "%s %s %s" /* Nickname */ |
554 "%s %s" /* Idle */ | 564 "%s %s" /* Idle */ |
555 "%s %s" /* Warning */ | 565 "%s %s" /* Warning */ |
556 "%s %s", /* Status */ | 566 "%s %s", /* Status */ |
557 b->name, | 567 b->name, |
558 b->alias && b->alias[0] ? "\n" : "", b->alias && b->alias[0] ? _("<b>Alias</b> ") : "", b->alias ? b->alias : "", | 568 b->alias && b->alias[0] ? "\n" : "", b->alias && b->alias[0] ? _("<b>Alias:</b> ") : "", b->alias ? b->alias : "", |
559 b->server_alias ? "\n" : "", b->server_alias ? _("<b>Nickname</b> ") : "", b->server_alias ? b->server_alias : "", | 569 b->server_alias ? "\n" : "", b->server_alias ? _("<b>Nickname:</b> ") : "", b->server_alias ? b->server_alias : "", |
560 b->idle ? "\n" : "", b->idle ? idletime : "", | 570 b->idle ? "\n" : "", b->idle ? idletime : "", |
561 b->evil ? "\n" : "", b->evil ? warning : "", | 571 b->evil ? "\n" : "", b->evil ? warning : "", |
562 statustext ? "\n" : "", statustext ? statustext : ""); | 572 statustext ? "\n" : "", statustext ? statustext : ""); |
563 return text; | 573 return text; |
564 | 574 |
728 | 738 |
729 /* XXX Clean up this crap */ | 739 /* XXX Clean up this crap */ |
730 | 740 |
731 int ihrs, imin; | 741 int ihrs, imin; |
732 char *idletime = NULL, *warning = NULL, *statustext = NULL; | 742 char *idletime = NULL, *warning = NULL, *statustext = NULL; |
733 time_t t; | 743 time_t t; |
734 | 744 |
735 if (!(blist_options & OPT_BLIST_SHOW_ICONS)) { | 745 if (!(blist_options & OPT_BLIST_SHOW_ICONS)) { |
736 if (b->idle > 0 && blist_options & OPT_BLIST_GREY_IDLERS) { | 746 if (b->idle > 0 && blist_options & OPT_BLIST_GREY_IDLERS) { |
737 text = g_strdup_printf("<span color='dim grey'>%s</span>", | 747 text = g_strdup_printf("<span color='dim grey'>%s</span>", |
738 esc); | 748 esc); |
746 time(&t); | 756 time(&t); |
747 ihrs = (t - b->idle) / 3600; | 757 ihrs = (t - b->idle) / 3600; |
748 imin = ((t - b->idle) / 60) % 60; | 758 imin = ((t - b->idle) / 60) % 60; |
749 | 759 |
750 if (prpl->status_text) { | 760 if (prpl->status_text) { |
751 const char *tmp = prpl->status_text(b); | 761 char *tmp = prpl->status_text(b); |
752 if (tmp) | 762 |
753 statustext = g_markup_escape_text(tmp, strlen(tmp)); | 763 if(tmp) { |
754 } | 764 if(strlen(tmp) > 20) |
755 | 765 statustext = g_strdup_printf("%.16s...", tmp); |
766 else | |
767 statustext = g_strdup(tmp); | |
768 g_free(tmp); | |
769 } | |
770 } | |
771 | |
756 if (b->idle) { | 772 if (b->idle) { |
757 if (ihrs) | 773 if (ihrs) |
758 idletime = g_strdup_printf(_("Idle (%dh%02dm)"), ihrs, imin); | 774 idletime = g_strdup_printf(_("Idle (%dh%02dm)"), ihrs, imin); |
759 else | 775 else |
760 idletime = g_strdup_printf(_("Idle (%dm)"), imin); | 776 idletime = g_strdup_printf(_("Idle (%dm)"), imin); |