Mercurial > pidgin.yaz
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); |