comparison finch/gntblist.c @ 32827:4a34689eeb33 default tip

merged from im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Sat, 19 Nov 2011 14:42:54 +0900
parents 33f5c8ac8f97
children
comparison
equal deleted inserted replaced
32692:0f94ec89f0bc 32827:4a34689eeb33
167 { 167 {
168 gboolean offline = purple_prefs_get_bool(PREF_ROOT "/showoffline"); 168 gboolean offline = purple_prefs_get_bool(PREF_ROOT "/showoffline");
169 169
170 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { 170 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) {
171 PurpleBuddy *buddy = (PurpleBuddy*)node; 171 PurpleBuddy *buddy = (PurpleBuddy*)node;
172 FinchBlistNode *fnode = FINCH_GET_DATA(node); 172 FinchBlistNode *fnode = purple_blist_node_get_ui_data(node);
173 if (!purple_buddy_get_contact(buddy)) 173 if (!purple_buddy_get_contact(buddy))
174 return FALSE; /* When a new buddy is added and show-offline is set */ 174 return FALSE; /* When a new buddy is added and show-offline is set */
175 if (PURPLE_BUDDY_IS_ONLINE(buddy)) 175 if (PURPLE_BUDDY_IS_ONLINE(buddy))
176 return TRUE; /* The buddy is online */ 176 return TRUE; /* The buddy is online */
177 if (!purple_account_is_connected(purple_buddy_get_account(buddy))) 177 if (!purple_account_is_connected(purple_buddy_get_account(buddy)))
327 static GList *managers; 327 static GList *managers;
328 328
329 static FinchBlistNode * 329 static FinchBlistNode *
330 create_finch_blist_node(PurpleBlistNode *node, gpointer row) 330 create_finch_blist_node(PurpleBlistNode *node, gpointer row)
331 { 331 {
332 FinchBlistNode *fnode = FINCH_GET_DATA(node); 332 FinchBlistNode *fnode = purple_blist_node_get_ui_data(node);
333 if (!fnode) { 333 if (!fnode) {
334 fnode = g_new0(FinchBlistNode, 1); 334 fnode = g_new0(FinchBlistNode, 1);
335 fnode->signed_timer = 0; 335 fnode->signed_timer = 0;
336 FINCH_SET_DATA(node, fnode); 336 purple_blist_node_set_ui_data(node, fnode);
337 } 337 }
338 fnode->row = row; 338 fnode->row = row;
339 return fnode; 339 return fnode;
340 } 340 }
341 341
342 static void 342 static void
343 reset_blist_node_ui_data(PurpleBlistNode *node) 343 reset_blist_node_ui_data(PurpleBlistNode *node)
344 { 344 {
345 FinchBlistNode *fnode = FINCH_GET_DATA(node); 345 FinchBlistNode *fnode = purple_blist_node_get_ui_data(node);
346 if (fnode == NULL) 346 if (fnode == NULL)
347 return; 347 return;
348 if (fnode->signed_timer) 348 if (fnode->signed_timer)
349 purple_timeout_remove(fnode->signed_timer); 349 purple_timeout_remove(fnode->signed_timer);
350 g_free(fnode); 350 g_free(fnode);
351 FINCH_SET_DATA(node, NULL); 351 purple_blist_node_set_ui_data(node, NULL);
352 } 352 }
353 353
354 static int 354 static int
355 get_display_color(PurpleBlistNode *node) 355 get_display_color(PurpleBlistNode *node)
356 { 356 {
379 379
380 static GntTextFormatFlags 380 static GntTextFormatFlags
381 get_blist_node_flag(PurpleBlistNode *node) 381 get_blist_node_flag(PurpleBlistNode *node)
382 { 382 {
383 GntTextFormatFlags flag = 0; 383 GntTextFormatFlags flag = 0;
384 FinchBlistNode *fnode = FINCH_GET_DATA(node); 384 FinchBlistNode *fnode = purple_blist_node_get_ui_data(node);
385 385
386 if (ggblist->tagged && g_list_find(ggblist->tagged, node)) 386 if (ggblist->tagged && g_list_find(ggblist->tagged, node))
387 flag |= GNT_TEXT_FLAG_BOLD; 387 flag |= GNT_TEXT_FLAG_BOLD;
388 388
389 if (fnode && fnode->signed_timer) 389 if (fnode && fnode->signed_timer)
390 flag |= GNT_TEXT_FLAG_BLINK; 390 flag |= GNT_TEXT_FLAG_BLINK;
391 else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { 391 else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) {
392 node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node))); 392 node = PURPLE_BLIST_NODE(purple_contact_get_priority_buddy(PURPLE_CONTACT(node)));
393 fnode = FINCH_GET_DATA(node); 393 fnode = purple_blist_node_get_ui_data(node);
394 if (fnode && fnode->signed_timer) 394 if (fnode && fnode->signed_timer)
395 flag |= GNT_TEXT_FLAG_BLINK; 395 flag |= GNT_TEXT_FLAG_BLINK;
396 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { 396 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) {
397 /* If the node is collapsed, then check to see if any of the priority buddies of 397 /* If the node is collapsed, then check to see if any of the priority buddies of
398 * any of the contacts within this group recently signed on/off, and set the blink 398 * any of the contacts within this group recently signed on/off, and set the blink
404 if (!gnt_tree_get_expanded(GNT_TREE(ggblist->tree), node)) { 404 if (!gnt_tree_get_expanded(GNT_TREE(ggblist->tree), node)) {
405 for (node = purple_blist_node_get_first_child(node); node; 405 for (node = purple_blist_node_get_first_child(node); node;
406 node = purple_blist_node_get_sibling_next(node)) { 406 node = purple_blist_node_get_sibling_next(node)) {
407 PurpleBlistNode *pnode; 407 PurpleBlistNode *pnode;
408 pnode = purple_contact_get_priority_buddy((PurpleContact*)node); 408 pnode = purple_contact_get_priority_buddy((PurpleContact*)node);
409 fnode = FINCH_GET_DATA(node); 409 fnode = purple_blist_node_get_ui_data(node);
410 if (fnode && fnode->signed_timer) { 410 if (fnode && fnode->signed_timer) {
411 flag |= GNT_TEXT_FLAG_BLINK; 411 flag |= GNT_TEXT_FLAG_BLINK;
412 break; 412 break;
413 } 413 }
414 } 414 }
431 is_contact_online(PurpleContact *contact) 431 is_contact_online(PurpleContact *contact)
432 { 432 {
433 PurpleBlistNode *node; 433 PurpleBlistNode *node;
434 for (node = purple_blist_node_get_first_child(((PurpleBlistNode*)contact)); node; 434 for (node = purple_blist_node_get_first_child(((PurpleBlistNode*)contact)); node;
435 node = purple_blist_node_get_sibling_next(node)) { 435 node = purple_blist_node_get_sibling_next(node)) {
436 FinchBlistNode *fnode = FINCH_GET_DATA(node); 436 FinchBlistNode *fnode = purple_blist_node_get_ui_data(node);
437 if (PURPLE_BUDDY_IS_ONLINE((PurpleBuddy*)node) || 437 if (PURPLE_BUDDY_IS_ONLINE((PurpleBuddy*)node) ||
438 (fnode && fnode->signed_timer)) 438 (fnode && fnode->signed_timer))
439 return TRUE; 439 return TRUE;
440 } 440 }
441 return FALSE; 441 return FALSE;
463 } 463 }
464 464
465 static void 465 static void
466 add_node(PurpleBlistNode *node, FinchBlist *ggblist) 466 add_node(PurpleBlistNode *node, FinchBlist *ggblist)
467 { 467 {
468 if (FINCH_GET_DATA(node)) 468 if (purple_blist_node_get_ui_data(node))
469 return; 469 return;
470 470
471 if (!ggblist->manager->can_add_node(node)) 471 if (!ggblist->manager->can_add_node(node))
472 return; 472 return;
473 473
500 node_remove(PurpleBuddyList *list, PurpleBlistNode *node) 500 node_remove(PurpleBuddyList *list, PurpleBlistNode *node)
501 { 501 {
502 FinchBlist *ggblist = FINCH_GET_DATA(list); 502 FinchBlist *ggblist = FINCH_GET_DATA(list);
503 PurpleBlistNode *parent; 503 PurpleBlistNode *parent;
504 504
505 if (ggblist == NULL || FINCH_GET_DATA(node) == NULL) 505 if (ggblist == NULL || purple_blist_node_get_ui_data(node) == NULL)
506 return; 506 return;
507 507
508 if (PURPLE_BLIST_NODE_IS_GROUP(node) && ggblist->new_group) { 508 if (PURPLE_BLIST_NODE_IS_GROUP(node) && ggblist->new_group) {
509 ggblist->new_group = g_list_remove(ggblist->new_group, node); 509 ggblist->new_group = g_list_remove(ggblist->new_group, node);
510 } 510 }
541 return; /* XXX: this is probably the place to auto-join chats */ 541 return; /* XXX: this is probably the place to auto-join chats */
542 542
543 if (ggblist->window == NULL) 543 if (ggblist->window == NULL)
544 return; 544 return;
545 545
546 if (FINCH_GET_DATA(node)!= NULL) { 546 if (purple_blist_node_get_ui_data(node)!= NULL) {
547 gnt_tree_change_text(GNT_TREE(ggblist->tree), node, 547 gnt_tree_change_text(GNT_TREE(ggblist->tree), node,
548 0, get_display_name(node)); 548 0, get_display_name(node));
549 gnt_tree_sort_row(GNT_TREE(ggblist->tree), node); 549 gnt_tree_sort_row(GNT_TREE(ggblist->tree), node);
550 blist_update_row_flags(node); 550 blist_update_row_flags(node);
551 if (gnt_tree_get_parent_key(GNT_TREE(ggblist->tree), node) != 551 if (gnt_tree_get_parent_key(GNT_TREE(ggblist->tree), node) !=
558 add_node((PurpleBlistNode*)buddy, FINCH_GET_DATA(list)); 558 add_node((PurpleBlistNode*)buddy, FINCH_GET_DATA(list));
559 node_update(list, purple_blist_node_get_parent(node)); 559 node_update(list, purple_blist_node_get_parent(node));
560 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { 560 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) {
561 add_node(node, FINCH_GET_DATA(list)); 561 add_node(node, FINCH_GET_DATA(list));
562 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { 562 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) {
563 if (FINCH_GET_DATA(node)== NULL) { 563 if (purple_blist_node_get_ui_data(node)== NULL) {
564 /* The core seems to expect the UI to add the buddies. */ 564 /* The core seems to expect the UI to add the buddies. */
565 for (node = purple_blist_node_get_first_child(node); node; node = purple_blist_node_get_sibling_next(node)) 565 for (node = purple_blist_node_get_first_child(node); node; node = purple_blist_node_get_sibling_next(node))
566 add_node(node, FINCH_GET_DATA(list)); 566 add_node(node, FINCH_GET_DATA(list));
567 } 567 }
568 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { 568 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) {
837 ggblist->new_group_timeout = purple_timeout_add_seconds(SHOW_EMPTY_GROUP_TIMEOUT, 837 ggblist->new_group_timeout = purple_timeout_add_seconds(SHOW_EMPTY_GROUP_TIMEOUT,
838 remove_new_empty_group, NULL); 838 remove_new_empty_group, NULL);
839 839
840 /* Select the group */ 840 /* Select the group */
841 if (ggblist->tree) { 841 if (ggblist->tree) {
842 FinchBlistNode *fnode = FINCH_GET_DATA((PurpleBlistNode*)grp); 842 FinchBlistNode *fnode = purple_blist_node_get_ui_data((PurpleBlistNode*)grp);
843 if (!fnode) 843 if (!fnode)
844 add_node((PurpleBlistNode*)grp, ggblist); 844 add_node((PurpleBlistNode*)grp, ggblist);
845 gnt_tree_set_selected(GNT_TREE(ggblist->tree), grp); 845 gnt_tree_set_selected(GNT_TREE(ggblist->tree), grp);
846 } 846 }
847 } 847 }
885 static void 885 static void
886 add_group(PurpleGroup *group, FinchBlist *ggblist) 886 add_group(PurpleGroup *group, FinchBlist *ggblist)
887 { 887 {
888 gpointer parent; 888 gpointer parent;
889 PurpleBlistNode *node = (PurpleBlistNode *)group; 889 PurpleBlistNode *node = (PurpleBlistNode *)group;
890 if (FINCH_GET_DATA(node)) 890 if (purple_blist_node_get_ui_data(node))
891 return; 891 return;
892 parent = ggblist->manager->find_parent((PurpleBlistNode*)group); 892 parent = ggblist->manager->find_parent((PurpleBlistNode*)group);
893 create_finch_blist_node(node, gnt_tree_add_row_after(GNT_TREE(ggblist->tree), group, 893 create_finch_blist_node(node, gnt_tree_add_row_after(GNT_TREE(ggblist->tree), group,
894 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), 894 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)),
895 parent, NULL)); 895 parent, NULL));
958 static void 958 static void
959 add_chat(PurpleChat *chat, FinchBlist *ggblist) 959 add_chat(PurpleChat *chat, FinchBlist *ggblist)
960 { 960 {
961 gpointer parent; 961 gpointer parent;
962 PurpleBlistNode *node = (PurpleBlistNode *)chat; 962 PurpleBlistNode *node = (PurpleBlistNode *)chat;
963 if (FINCH_GET_DATA(node)) 963 if (purple_blist_node_get_ui_data(node))
964 return; 964 return;
965 if (!purple_account_is_connected(purple_chat_get_account(chat))) 965 if (!purple_account_is_connected(purple_chat_get_account(chat)))
966 return; 966 return;
967 967
968 parent = ggblist->manager->find_parent((PurpleBlistNode*)chat); 968 parent = ggblist->manager->find_parent((PurpleBlistNode*)chat);
977 { 977 {
978 gpointer parent; 978 gpointer parent;
979 PurpleBlistNode *node = (PurpleBlistNode*)contact; 979 PurpleBlistNode *node = (PurpleBlistNode*)contact;
980 const char *name; 980 const char *name;
981 981
982 if (FINCH_GET_DATA(node)) 982 if (purple_blist_node_get_ui_data(node))
983 return; 983 return;
984 984
985 name = get_display_name(node); 985 name = get_display_name(node);
986 if (name == NULL) 986 if (name == NULL)
987 return; 987 return;
1000 { 1000 {
1001 gpointer parent; 1001 gpointer parent;
1002 PurpleBlistNode *node = (PurpleBlistNode *)buddy; 1002 PurpleBlistNode *node = (PurpleBlistNode *)buddy;
1003 PurpleContact *contact; 1003 PurpleContact *contact;
1004 1004
1005 if (FINCH_GET_DATA(node)) 1005 if (purple_blist_node_get_ui_data(node))
1006 return; 1006 return;
1007 1007
1008 contact = purple_buddy_get_contact(buddy); 1008 contact = purple_buddy_get_contact(buddy);
1009 parent = ggblist->manager->find_parent((PurpleBlistNode*)buddy); 1009 parent = ggblist->manager->find_parent((PurpleBlistNode*)buddy);
1010 1010
1559 const char *name, *sec = NULL; 1559 const char *name, *sec = NULL;
1560 1560
1561 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { 1561 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) {
1562 PurpleContact *c = (PurpleContact*)node; 1562 PurpleContact *c = (PurpleContact*)node;
1563 name = purple_contact_get_alias(c); 1563 name = purple_contact_get_alias(c);
1564 if (c->totalsize > 1) 1564 if (purple_contact_get_contact_size(c, TRUE) > 1)
1565 sec = _("Removing this contact will also remove all the buddies in the contact"); 1565 sec = _("Removing this contact will also remove all the buddies in the contact");
1566 } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { 1566 } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) {
1567 name = purple_buddy_get_name((PurpleBuddy*)node); 1567 name = purple_buddy_get_name((PurpleBuddy*)node);
1568 account = purple_buddy_get_account((PurpleBuddy*)node); 1568 account = purple_buddy_get_account((PurpleBuddy*)node);
1569 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { 1569 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) {
2543 2543
2544 static gboolean 2544 static gboolean
2545 buddy_recent_signed_on_off(gpointer data) 2545 buddy_recent_signed_on_off(gpointer data)
2546 { 2546 {
2547 PurpleBlistNode *node = data; 2547 PurpleBlistNode *node = data;
2548 FinchBlistNode *fnode = FINCH_GET_DATA(node); 2548 FinchBlistNode *fnode = purple_blist_node_get_ui_data(node);
2549 2549
2550 purple_timeout_remove(fnode->signed_timer); 2550 purple_timeout_remove(fnode->signed_timer);
2551 fnode->signed_timer = 0; 2551 fnode->signed_timer = 0;
2552 2552
2553 if (!ggblist->manager->can_add_node(node)) { 2553 if (!ggblist->manager->can_add_node(node)) {
2563 2563
2564 static gboolean 2564 static gboolean
2565 buddy_signed_on_off_cb(gpointer data) 2565 buddy_signed_on_off_cb(gpointer data)
2566 { 2566 {
2567 PurpleBlistNode *node = data; 2567 PurpleBlistNode *node = data;
2568 FinchBlistNode *fnode = FINCH_GET_DATA(node); 2568 FinchBlistNode *fnode = purple_blist_node_get_ui_data(node);
2569 if (!ggblist || !fnode) 2569 if (!ggblist || !fnode)
2570 return FALSE; 2570 return FALSE;
2571 2571
2572 if (fnode->signed_timer) 2572 if (fnode->signed_timer)
2573 purple_timeout_remove(fnode->signed_timer); 2573 purple_timeout_remove(fnode->signed_timer);