749 |
752 |
750 // buddylist_set_hide_offline_buddies(hide) |
753 // buddylist_set_hide_offline_buddies(hide) |
751 // "hide" values: 1=hide 0=show_all -1=invert |
754 // "hide" values: 1=hide 0=show_all -1=invert |
752 void buddylist_set_hide_offline_buddies(int hide) |
755 void buddylist_set_hide_offline_buddies(int hide) |
753 { |
756 { |
754 if (hide < 0) // NEG (invert) |
757 if (hide < 0) { // NEG (invert) |
755 hide_offline_buddies = !hide_offline_buddies; |
758 if (display_filter == DFILTER_ALL) |
756 else if (hide == 0) // FALSE (don't hide) |
759 display_filter = DFILTER_ONLINE; |
757 hide_offline_buddies = 0; |
760 else |
758 else // TRUE (hide) |
761 display_filter = DFILTER_ALL; |
759 hide_offline_buddies = 1; |
762 } else if (hide == 0) { // FALSE (don't hide -- andfo_) |
760 } |
763 display_filter = DFILTER_ALL; |
761 |
764 } else { // TRUE (hide -- andfo) |
762 inline int buddylist_get_hide_offline_buddies(void) |
765 display_filter = DFILTER_ONLINE; |
763 { |
766 } |
764 return hide_offline_buddies; |
767 } |
|
768 |
|
769 inline int buddylist_isset_filter(void) |
|
770 { |
|
771 return (display_filter != DFILTER_ALL); |
|
772 } |
|
773 |
|
774 void buddylist_set_filter(guchar filter) |
|
775 { |
|
776 display_filter = filter; |
|
777 } |
|
778 |
|
779 guchar buddylist_get_filter(void) |
|
780 { |
|
781 return display_filter; |
765 } |
782 } |
766 |
783 |
767 // buddylist_build() |
784 // buddylist_build() |
768 // Creates the buddylist from the roster entries. |
785 // Creates the buddylist from the roster entries. |
769 void buddylist_build(void) |
786 void buddylist_build(void) |
792 |
809 |
793 // Create the new list |
810 // Create the new list |
794 while (sl_roster_elt) { |
811 while (sl_roster_elt) { |
795 GSList *sl_roster_usrelt; |
812 GSList *sl_roster_usrelt; |
796 roster *roster_usrelt; |
813 roster *roster_usrelt; |
797 guint pending_group = FALSE; |
814 guint pending_group = TRUE; |
798 roster_elt = (roster*) sl_roster_elt->data; |
815 roster_elt = (roster*) sl_roster_elt->data; |
799 |
|
800 // Add the group now unless hide_offline_buddies is set, |
|
801 // in which case we'll add it only if an online buddy belongs to it. |
|
802 // We take care to keep the current_buddy in the list, too. |
|
803 if (!hide_offline_buddies || roster_elt == roster_current_buddy) |
|
804 buddylist = g_list_append(buddylist, roster_elt); |
|
805 else |
|
806 pending_group = TRUE; |
|
807 |
816 |
808 shrunk_group = roster_elt->flags & ROSTER_FLAG_HIDE; |
817 shrunk_group = roster_elt->flags & ROSTER_FLAG_HIDE; |
809 |
818 |
810 sl_roster_usrelt = roster_elt->list; |
819 sl_roster_usrelt = roster_elt->list; |
811 while (sl_roster_usrelt) { |
820 while (sl_roster_usrelt) { |
812 roster_usrelt = (roster*) sl_roster_usrelt->data; |
821 roster_usrelt = (roster*) sl_roster_usrelt->data; |
813 |
822 |
814 // Buddy will be added if either: |
823 // Buddy will be added if either: |
815 // - hide_offline_buddies is FALSE |
824 // - buddy's status matches the display_filter |
816 // - buddy is not offline |
|
817 // - buddy has a lock (for example the buddy window is currently open) |
825 // - buddy has a lock (for example the buddy window is currently open) |
818 // - buddy has a pending (non-read) message |
826 // - buddy has a pending (non-read) message |
819 // - group isn't hidden (shrunk) |
827 // - group isn't hidden (shrunk) |
820 // - this is the current_buddy |
828 // - this is the current_buddy |
821 if (!hide_offline_buddies || roster_usrelt == roster_current_buddy || |
829 if (roster_usrelt == roster_current_buddy || |
822 (buddy_getstatus((gpointer)roster_usrelt, NULL) != offline) || |
830 display_filter & 1<<buddy_getstatus((gpointer)roster_usrelt, NULL) || |
823 (buddy_getflags((gpointer)roster_usrelt) & |
831 (buddy_getflags((gpointer)roster_usrelt) & |
824 (ROSTER_FLAG_LOCK | ROSTER_FLAG_USRLOCK | ROSTER_FLAG_MSG))) { |
832 (ROSTER_FLAG_LOCK | ROSTER_FLAG_USRLOCK | ROSTER_FLAG_MSG))) { |
825 // This user should be added. Maybe the group hasn't been added yet? |
833 // This user should be added. Maybe the group hasn't been added yet? |
826 if (pending_group && |
834 if (pending_group) { |
827 (hide_offline_buddies || roster_usrelt == roster_current_buddy)) { |
|
828 // It hasn't been done yet |
835 // It hasn't been done yet |
829 buddylist = g_list_append(buddylist, roster_elt); |
836 buddylist = g_list_append(buddylist, roster_elt); |
830 pending_group = FALSE; |
837 pending_group = FALSE; |
831 } |
838 } |
832 // Add user |
839 // Add user |