Mercurial > pidgin.yaz
comparison src/buddy.c @ 4697:4be12ff42986
[gaim-migrate @ 5008]
I hand merged patches from Ka-Hing Cheung (not Ha-King, as I accidentally slipped on
last night) and Nathan Conrad and combined it with some of my own code.
Thanks, guys.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Mon, 10 Mar 2003 22:07:59 +0000 |
parents | abec345c8c92 |
children | aa2ceea841b4 |
comparison
equal
deleted
inserted
replaced
4696:abec345c8c92 | 4697:4be12ff42986 |
---|---|
60 | 60 |
61 /*************************************************** | 61 /*************************************************** |
62 * Callbacks * | 62 * Callbacks * |
63 ***************************************************/ | 63 ***************************************************/ |
64 | 64 |
65 static void gtk_blist_menu_im_cb(GtkWidget *w, struct buddy *b) | |
66 { | |
67 gaim_conversation_new(GAIM_CONV_IM, b->account, b->name); | |
68 } | |
69 | |
70 static void gtk_blist_menu_alias_cb(GtkWidget *w, struct buddy *b) | |
71 { | |
72 alias_dialog_bud(b); | |
73 } | |
74 | |
75 static void gtk_blist_menu_bp_cb(GtkWidget *w, struct buddy *b) | |
76 { | |
77 show_new_bp(b->name, b->account->gc, b->idle, | |
78 b->uc & UC_UNAVAILABLE, NULL); | |
79 } | |
80 | |
81 static void gtk_blist_menu_showlog_cb(GtkWidget *w, struct buddy *b) | |
82 { | |
83 show_log(b->name); | |
84 } | |
85 | |
86 static void gtk_blist_show_systemlog_cb() | |
87 { | |
88 show_log(NULL); | |
89 } | |
90 | |
65 static void gtk_blist_button_im_cb(GtkWidget *w, GtkTreeView *tv) | 91 static void gtk_blist_button_im_cb(GtkWidget *w, GtkTreeView *tv) |
66 { | 92 { |
67 GtkTreeIter iter; | 93 GtkTreeIter iter; |
68 GtkTreeModel *model = gtk_tree_view_get_model(tv); | 94 GtkTreeModel *model = gtk_tree_view_get_model(tv); |
69 GtkTreeSelection *sel = gtk_tree_view_get_selection(tv); | 95 GtkTreeSelection *sel = gtk_tree_view_get_selection(tv); |
116 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); | 142 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); |
117 node = g_value_get_pointer(&val); | 143 node = g_value_get_pointer(&val); |
118 | 144 |
119 if (GAIM_BLIST_NODE_IS_BUDDY(node)) { | 145 if (GAIM_BLIST_NODE_IS_BUDDY(node)) { |
120 gaim_conversation_new(GAIM_CONV_IM, ((struct buddy*)node)->account, ((struct buddy*)node)->name); | 146 gaim_conversation_new(GAIM_CONV_IM, ((struct buddy*)node)->account, ((struct buddy*)node)->name); |
147 } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { | |
148 if (gtk_tree_view_row_expanded(tv, path)) | |
149 gtk_tree_view_collapse_row(tv, path); | |
150 else | |
151 gtk_tree_view_expand_row(tv,path,FALSE); | |
121 } | 152 } |
122 } | 153 } |
123 | 154 |
124 static void gaim_proto_menu_cb(GtkMenuItem *item, struct buddy *b) | 155 static void gaim_proto_menu_cb(GtkMenuItem *item, struct buddy *b) |
125 { | 156 { |
167 list = list->next; | 198 list = list->next; |
168 } | 199 } |
169 } | 200 } |
170 | 201 |
171 menuitem = gtk_image_menu_item_new_with_mnemonic("_IM"); | 202 menuitem = gtk_image_menu_item_new_with_mnemonic("_IM"); |
172 image = gtk_image_new_from_stock(GAIM_STOCK_IM, GTK_ICON_SIZE_MENU); | 203 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_im_cb), node); |
204 image = gtk_image_new_from_stock(GAIM_STOCK_IM, GTK_ICON_SIZE_MENU); | |
173 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); | 205 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); |
174 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | 206 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
175 | 207 |
176 menuitem = gtk_image_menu_item_new_with_mnemonic("_Alias"); | 208 menuitem = gtk_image_menu_item_new_with_mnemonic("_Alias"); |
209 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_alias_cb), node); | |
177 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | 210 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
178 | 211 |
179 menuitem = gtk_image_menu_item_new_with_mnemonic("Add Buddy _Pounce"); | 212 menuitem = gtk_image_menu_item_new_with_mnemonic("Add Buddy _Pounce"); |
213 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_bp_cb), node); | |
180 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | 214 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
181 | 215 |
182 menuitem = gtk_image_menu_item_new_with_mnemonic("View _Log"); | 216 menuitem = gtk_image_menu_item_new_with_mnemonic("View _Log"); |
217 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(gtk_blist_menu_showlog_cb), node); | |
183 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | 218 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
184 | 219 |
185 gtk_widget_show_all(menu); | 220 gtk_widget_show_all(menu); |
186 | 221 |
187 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); | 222 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); |
220 if (GAIM_BLIST_NODE_IS_BUDDY(node)) | 255 if (GAIM_BLIST_NODE_IS_BUDDY(node)) |
221 show_add_buddy(NULL, NULL, ((struct group*)node->parent)->name, NULL); | 256 show_add_buddy(NULL, NULL, ((struct group*)node->parent)->name, NULL); |
222 else if (GAIM_BLIST_NODE_IS_GROUP(node)) | 257 else if (GAIM_BLIST_NODE_IS_GROUP(node)) |
223 show_add_buddy(NULL, NULL, ((struct group*)node)->name, NULL); | 258 show_add_buddy(NULL, NULL, ((struct group*)node)->name, NULL); |
224 } | 259 } |
225 else{ | 260 else { |
226 show_add_buddy(NULL, NULL, NULL, NULL); | 261 show_add_buddy(NULL, NULL, NULL, NULL); |
227 } | 262 } |
228 } | 263 } |
229 | 264 |
265 static void gaim_gtk_blist_update_toolbar_icons (GtkWidget *widget, gpointer data) { | |
266 if (GTK_IS_IMAGE(widget)) { | |
267 if (blist_options & OPT_BLIST_SHOW_BUTTON_XPM) | |
268 gtk_widget_show(widget); | |
269 else | |
270 gtk_widget_hide(widget); | |
271 } else if (GTK_IS_CONTAINER(widget)) { | |
272 gtk_container_foreach(GTK_CONTAINER(widget), gaim_gtk_blist_update_toolbar_icons, NULL); | |
273 } | |
274 } | |
230 | 275 |
231 /*************************************************** | 276 /*************************************************** |
232 * Crap * | 277 * Crap * |
233 ***************************************************/ | 278 ***************************************************/ |
234 static GtkItemFactoryEntry blist_menu[] = | 279 static GtkItemFactoryEntry blist_menu[] = |
260 { N_("/Tools/_File Transfers"), NULL, NULL, 0, | 305 { N_("/Tools/_File Transfers"), NULL, NULL, 0, |
261 "<StockItem>", GTK_STOCK_REVERT_TO_SAVED }, | 306 "<StockItem>", GTK_STOCK_REVERT_TO_SAVED }, |
262 { N_("/Tools/sep2"), NULL, NULL, 0, "<Separator>" }, | 307 { N_("/Tools/sep2"), NULL, NULL, 0, "<Separator>" }, |
263 { N_("/Tools/P_rotocol Actions"), NULL, NULL, 0, "<Branch>" }, | 308 { N_("/Tools/P_rotocol Actions"), NULL, NULL, 0, "<Branch>" }, |
264 { N_("/Tools/Pr_ivacy"), NULL, show_privacy_options, 0, NULL }, | 309 { N_("/Tools/Pr_ivacy"), NULL, show_privacy_options, 0, NULL }, |
265 { N_("/Tools/View System _Log"), NULL, NULL, 0, NULL }, | 310 { N_("/Tools/View System _Log"), NULL, gtk_blist_show_systemlog_cb, 0, NULL }, |
266 | 311 |
267 /* Help */ | 312 /* Help */ |
268 { N_("/_Help"), NULL, NULL, 0, "<Branch>" }, | 313 { N_("/_Help"), NULL, NULL, 0, "<Branch>" }, |
269 { N_("/Help/Online _Help"), "F1", NULL, 0, | 314 { N_("/Help/Online _Help"), "F1", NULL, 0, |
270 "<StockItem>", GTK_STOCK_HELP }, | 315 "<StockItem>", GTK_STOCK_HELP }, |
271 { N_("/Help/_Debug Window"), NULL, NULL, 0, NULL }, | 316 { N_("/Help/_Debug Window"), NULL, show_debug, 0, NULL }, |
272 { N_("/Help/_About"), NULL, show_about, 0, NULL }, | 317 { N_("/Help/_About"), NULL, show_about, 0, NULL }, |
273 | 318 |
274 }; | 319 }; |
275 | 320 |
276 /********************************************************* | 321 /********************************************************* |
581 button = gaim_pixbuf_button_from_stock(_("IM"), GAIM_STOCK_IM, GAIM_BUTTON_VERTICAL); | 626 button = gaim_pixbuf_button_from_stock(_("IM"), GAIM_STOCK_IM, GAIM_BUTTON_VERTICAL); |
582 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0); | 627 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0); |
583 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | 628 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
584 gtk_size_group_add_widget(sg, button); | 629 gtk_size_group_add_widget(sg, button); |
585 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_im_cb), | 630 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_im_cb), |
586 gtkblist->treeview); | 631 gtkblist->treeview); |
587 | 632 |
588 button = gaim_pixbuf_button_from_stock(_("Get Info"), GAIM_STOCK_INFO, GAIM_BUTTON_VERTICAL); | 633 button = gaim_pixbuf_button_from_stock(_("Get Info"), GAIM_STOCK_INFO, GAIM_BUTTON_VERTICAL); |
589 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0); | 634 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0); |
590 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | 635 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
591 gtk_size_group_add_widget(sg, button); | 636 gtk_size_group_add_widget(sg, button); |
592 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_info_cb), | 637 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_info_cb), |
593 gtkblist->treeview); | 638 gtkblist->treeview); |
594 | 639 |
595 button = gaim_pixbuf_button_from_stock(_("Chat"), GAIM_STOCK_CHAT, GAIM_BUTTON_VERTICAL); | 640 button = gaim_pixbuf_button_from_stock(_("Chat"), GAIM_STOCK_CHAT, GAIM_BUTTON_VERTICAL); |
596 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0); | 641 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0); |
597 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | 642 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
598 gtk_size_group_add_widget(sg, button); | 643 gtk_size_group_add_widget(sg, button); |
599 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_chat_cb), NULL); | 644 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_chat_cb), NULL); |
605 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_away_cb), NULL); | 650 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_away_cb), NULL); |
606 | 651 |
607 /* OK... let's show this bad boy. */ | 652 /* OK... let's show this bad boy. */ |
608 gaim_gtk_blist_refresh(list); | 653 gaim_gtk_blist_refresh(list); |
609 gtk_widget_show_all(gtkblist->window); | 654 gtk_widget_show_all(gtkblist->window); |
655 | |
656 gaim_gtk_blist_update_toolbar(); | |
657 | |
610 } | 658 } |
611 | 659 |
612 void gaim_gtk_blist_refresh(struct gaim_buddy_list *list) | 660 void gaim_gtk_blist_refresh(struct gaim_buddy_list *list) |
613 { | 661 { |
614 GaimBlistNode *group = list->root; | 662 GaimBlistNode *group = list->root; |
621 gaim_gtk_blist_update(list, buddy); | 669 gaim_gtk_blist_update(list, buddy); |
622 buddy = buddy->next; | 670 buddy = buddy->next; |
623 } | 671 } |
624 group = group->next; | 672 group = group->next; |
625 } | 673 } |
674 } | |
675 | |
676 void gaim_gtk_blist_update_toolbar() { | |
677 if (!gtkblist) | |
678 return; | |
679 | |
680 gtk_container_foreach(GTK_CONTAINER(gtkblist->bbox), gaim_gtk_blist_update_toolbar_icons, NULL); | |
681 | |
682 if (blist_options & OPT_BLIST_NO_BUTTONS) | |
683 gtk_widget_hide(gtkblist->bbox); | |
684 else | |
685 gtk_widget_show_all(gtkblist->bbox); | |
626 } | 686 } |
627 | 687 |
628 static void gaim_gtk_blist_update(struct gaim_buddy_list *list, GaimBlistNode *node) | 688 static void gaim_gtk_blist_update(struct gaim_buddy_list *list, GaimBlistNode *node) |
629 { | 689 { |
630 struct gaim_gtk_blist_node *gtknode; | 690 struct gaim_gtk_blist_node *gtknode; |
692 } | 752 } |
693 | 753 |
694 if (GAIM_BLIST_NODE_IS_BUDDY(node) && ((struct buddy*)node)->present) { | 754 if (GAIM_BLIST_NODE_IS_BUDDY(node) && ((struct buddy*)node)->present) { |
695 GdkPixbuf *status, *avatar; | 755 GdkPixbuf *status, *avatar; |
696 char *mark; | 756 char *mark; |
697 | 757 char *warning = NULL, *idle = NULL; |
758 | |
698 status = gaim_gtk_blist_get_status_icon((struct buddy*)node); | 759 status = gaim_gtk_blist_get_status_icon((struct buddy*)node); |
699 avatar = gaim_gtk_blist_get_buddy_icon((struct buddy*)node); | 760 avatar = gaim_gtk_blist_get_buddy_icon((struct buddy*)node); |
700 mark = gaim_gtk_blist_get_name_markup((struct buddy*)node); | 761 mark = gaim_gtk_blist_get_name_markup((struct buddy*)node); |
701 | 762 |
763 if ((((struct buddy*)node)->idle > 0) && | |
764 (!(blist_options & OPT_BLIST_SHOW_ICONS) && (blist_options & OPT_BLIST_SHOW_IDLETIME))) { | |
765 time_t t; | |
766 int ihrs, imin; | |
767 time(&t); | |
768 ihrs = (t - ((struct buddy *)node)->idle) / 3600; | |
769 imin = ((t - ((struct buddy*)node)->idle) / 60) % 60; | |
770 idle = g_strdup_printf("%d:%02d", ihrs, imin); | |
771 } | |
772 | |
773 if ((((struct buddy*)node)->evil > 0) && | |
774 (!(blist_options & OPT_BLIST_SHOW_ICONS) && (blist_options & OPT_BLIST_SHOW_WARN))) { | |
775 warning = g_strdup_printf("%d%%", ((struct buddy*)node)->evil); | |
776 } | |
777 | |
702 gtk_tree_store_set(gtkblist->treemodel, iter, | 778 gtk_tree_store_set(gtkblist->treemodel, iter, |
703 STATUS_ICON_COLUMN, status, | 779 STATUS_ICON_COLUMN, status, |
704 NAME_COLUMN, mark, | 780 NAME_COLUMN, mark, |
705 WARNING_COLUMN, "", | 781 WARNING_COLUMN, warning, |
706 IDLE_COLUMN, "", | 782 IDLE_COLUMN, idle, |
707 BUDDY_ICON_COLUMN, avatar, | 783 BUDDY_ICON_COLUMN, avatar, |
708 NODE_COLUMN, node, | 784 NODE_COLUMN, node, |
709 -1); | 785 -1); |
710 | 786 |
711 g_free(mark); | 787 g_free(mark); |
788 if (idle) | |
789 g_free(idle); | |
790 if (warning) | |
791 g_free(warning); | |
712 | 792 |
713 if (status != NULL) | 793 if (status != NULL) |
714 g_object_unref(status); | 794 g_object_unref(status); |
715 | 795 |
716 if (avatar != NULL) | 796 if (avatar != NULL) |