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);