Mercurial > pidgin
comparison finch/gntblist.c @ 21695:52bbf38a1cd2
Refactor the code a little bit.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Fri, 30 Nov 2007 18:58:56 +0000 |
parents | 2de3a2de5f13 |
children | e3e64d1e4869 |
comparison
equal
deleted
inserted
replaced
21694:2de3a2de5f13 | 21695:52bbf38a1cd2 |
---|---|
129 static int color_available; | 129 static int color_available; |
130 static int color_away; | 130 static int color_away; |
131 static int color_offline; | 131 static int color_offline; |
132 static int color_idle; | 132 static int color_idle; |
133 | 133 |
134 static int | |
135 get_display_color(PurpleBlistNode *node) | |
136 { | |
137 PurpleBuddy *buddy; | |
138 int color = 0; | |
139 | |
140 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) | |
141 node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); | |
142 if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) | |
143 return 0; | |
144 | |
145 buddy = (PurpleBuddy*)node; | |
146 if (purple_presence_is_idle(purple_buddy_get_presence(buddy))) { | |
147 color = color_idle; | |
148 } else if (purple_presence_is_available(purple_buddy_get_presence(buddy))) { | |
149 color = color_available; | |
150 } else if (purple_presence_is_online(purple_buddy_get_presence(buddy)) && | |
151 !purple_presence_is_available(purple_buddy_get_presence(buddy))) { | |
152 color = color_away; | |
153 } else if (!purple_presence_is_online(purple_buddy_get_presence(buddy))) { | |
154 color = color_offline; | |
155 } | |
156 | |
157 return color; | |
158 } | |
159 | |
134 static gboolean | 160 static gboolean |
135 is_contact_online(PurpleContact *contact) | 161 is_contact_online(PurpleContact *contact) |
136 { | 162 { |
137 PurpleBlistNode *node; | 163 PurpleBlistNode *node; |
138 for (node = ((PurpleBlistNode*)contact)->child; node; node = node->next) { | 164 for (node = ((PurpleBlistNode*)contact)->child; node; node = node->next) { |
233 | 259 |
234 if (node->ui_data != NULL) { | 260 if (node->ui_data != NULL) { |
235 gnt_tree_change_text(GNT_TREE(ggblist->tree), node, | 261 gnt_tree_change_text(GNT_TREE(ggblist->tree), node, |
236 0, get_display_name(node)); | 262 0, get_display_name(node)); |
237 gnt_tree_sort_row(GNT_TREE(ggblist->tree), node); | 263 gnt_tree_sort_row(GNT_TREE(ggblist->tree), node); |
264 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), node, get_display_color(node)); | |
238 } | 265 } |
239 | 266 |
240 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { | 267 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
241 PurpleBuddy *buddy = (PurpleBuddy*)node; | 268 PurpleBuddy *buddy = (PurpleBuddy*)node; |
242 if (purple_account_is_connected(buddy->account) && | 269 if (purple_account_is_connected(buddy->account) && |
586 PurpleBlistNode *node = (PurpleBlistNode*)contact; | 613 PurpleBlistNode *node = (PurpleBlistNode*)contact; |
587 const char *name; | 614 const char *name; |
588 | 615 |
589 if (node->ui_data) | 616 if (node->ui_data) |
590 return; | 617 return; |
591 | 618 |
592 name = get_display_name(node); | 619 name = get_display_name(node); |
593 if (name == NULL) | 620 if (name == NULL) |
594 return; | 621 return; |
595 | 622 |
596 group = (PurpleGroup*)node->parent; | 623 group = (PurpleGroup*)node->parent; |
597 add_node((PurpleBlistNode*)group, ggblist); | 624 add_node((PurpleBlistNode*)group, ggblist); |
598 | 625 |
599 node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), contact, | 626 node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), contact, |
600 gnt_tree_create_row(GNT_TREE(ggblist->tree), name), | 627 gnt_tree_create_row(GNT_TREE(ggblist->tree), name), |
606 static void | 633 static void |
607 add_buddy(PurpleBuddy *buddy, FinchBlist *ggblist) | 634 add_buddy(PurpleBuddy *buddy, FinchBlist *ggblist) |
608 { | 635 { |
609 PurpleContact *contact; | 636 PurpleContact *contact; |
610 PurpleBlistNode *node = (PurpleBlistNode *)buddy; | 637 PurpleBlistNode *node = (PurpleBlistNode *)buddy; |
638 int color = 0; | |
611 if (node->ui_data) | 639 if (node->ui_data) |
612 return; | 640 return; |
613 | 641 |
614 if (!purple_account_is_connected(buddy->account)) | 642 if (!purple_account_is_connected(buddy->account)) |
615 return; | 643 return; |
621 | 649 |
622 node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, | 650 node->ui_data = gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, |
623 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), | 651 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), |
624 contact, NULL); | 652 contact, NULL); |
625 | 653 |
626 if (purple_presence_is_idle(purple_buddy_get_presence(buddy))) { | 654 color = get_display_color((PurpleBlistNode*)buddy); |
627 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_idle); | 655 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color); |
628 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_idle); | 656 if (buddy == purple_contact_get_priority_buddy(contact)) |
629 } else if (purple_presence_is_available(purple_buddy_get_presence(buddy)) && color_available) { | 657 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color); |
630 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_available); | |
631 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_available); | |
632 } else if (purple_presence_is_online(purple_buddy_get_presence(buddy)) && | |
633 !purple_presence_is_available(purple_buddy_get_presence(buddy)) && color_away) { | |
634 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_away); | |
635 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_away); | |
636 } else if (!purple_presence_is_online(purple_buddy_get_presence(buddy)) && color_offline) { | |
637 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_offline); | |
638 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_offline); | |
639 } | |
640 } | 658 } |
641 | 659 |
642 #if 0 | 660 #if 0 |
643 static void | 661 static void |
644 buddy_signed_on(PurpleBuddy *buddy, FinchBlist *ggblist) | 662 buddy_signed_on(PurpleBuddy *buddy, FinchBlist *ggblist) |
1555 static void | 1573 static void |
1556 update_buddy_display(PurpleBuddy *buddy, FinchBlist *ggblist) | 1574 update_buddy_display(PurpleBuddy *buddy, FinchBlist *ggblist) |
1557 { | 1575 { |
1558 PurpleContact *contact; | 1576 PurpleContact *contact; |
1559 GntTextFormatFlags bflag = 0, cflag = 0; | 1577 GntTextFormatFlags bflag = 0, cflag = 0; |
1560 | 1578 int color = 0; |
1579 | |
1561 contact = purple_buddy_get_contact(buddy); | 1580 contact = purple_buddy_get_contact(buddy); |
1562 | 1581 |
1563 gnt_tree_change_text(GNT_TREE(ggblist->tree), buddy, 0, get_display_name((PurpleBlistNode*)buddy)); | 1582 gnt_tree_change_text(GNT_TREE(ggblist->tree), buddy, 0, get_display_name((PurpleBlistNode*)buddy)); |
1564 gnt_tree_change_text(GNT_TREE(ggblist->tree), contact, 0, get_display_name((PurpleBlistNode*)contact)); | 1583 gnt_tree_change_text(GNT_TREE(ggblist->tree), contact, 0, get_display_name((PurpleBlistNode*)contact)); |
1565 | 1584 |
1569 cflag |= GNT_TEXT_FLAG_BOLD; | 1588 cflag |= GNT_TEXT_FLAG_BOLD; |
1570 | 1589 |
1571 if (ggblist->tnode == (PurpleBlistNode*)buddy) | 1590 if (ggblist->tnode == (PurpleBlistNode*)buddy) |
1572 draw_tooltip(ggblist); | 1591 draw_tooltip(ggblist); |
1573 | 1592 |
1574 if (purple_presence_is_idle(purple_buddy_get_presence(buddy))) { | 1593 color = get_display_color((PurpleBlistNode*)buddy); |
1575 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_idle); | 1594 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color); |
1576 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_idle); | 1595 if (buddy == purple_contact_get_priority_buddy(contact)) |
1577 if (buddy == purple_contact_get_priority_buddy(contact)) | 1596 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color); |
1578 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_idle); | 1597 |
1579 } else if (purple_presence_is_available(purple_buddy_get_presence(buddy)) && color_available) { | |
1580 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_available); | |
1581 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_available); | |
1582 if (buddy == purple_contact_get_priority_buddy(contact)) | |
1583 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_available); | |
1584 } else if (purple_presence_is_online(purple_buddy_get_presence(buddy)) && | |
1585 !purple_presence_is_available(purple_buddy_get_presence(buddy)) && color_away) { | |
1586 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_away); | |
1587 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_away); | |
1588 if (buddy == purple_contact_get_priority_buddy(contact)) | |
1589 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_away); | |
1590 } else if (!purple_presence_is_online(purple_buddy_get_presence(buddy)) && color_offline) { | |
1591 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), buddy, color_offline); | |
1592 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_offline); | |
1593 if (buddy == purple_contact_get_priority_buddy(contact)) | |
1594 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), contact, color_offline); | |
1595 } | |
1596 gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, bflag); | 1598 gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), buddy, bflag); |
1597 if (buddy == purple_contact_get_priority_buddy(contact)) | 1599 if (buddy == purple_contact_get_priority_buddy(contact)) |
1598 gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, cflag); | 1600 gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), contact, cflag); |
1599 | 1601 |
1600 if (buddy != purple_contact_get_priority_buddy(contact)) | 1602 if (buddy != purple_contact_get_priority_buddy(contact)) |