Mercurial > ~mikael > mcabber > hg
comparison mcabber/src/roster.c @ 1581:b29ac1f171ea
Fix UNREAD event when a special buffer changes
The events script wasn't called when the "status buffer" flag was updated,
for example.
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Sat, 18 Apr 2009 12:00:16 +0200 |
parents | 9fafea381eb8 |
children | dcd5d4c75199 |
comparison
equal
deleted
inserted
replaced
1580:c8be6c2243d6 | 1581:b29ac1f171ea |
---|---|
597 //sl_user = roster_find(jid, namesearch, ROSTER_TYPE_SPECIAL); | 597 //sl_user = roster_find(jid, namesearch, ROSTER_TYPE_SPECIAL); |
598 //if (!sl_user) return; | 598 //if (!sl_user) return; |
599 //roster_usr = (roster*)sl_user->data; | 599 //roster_usr = (roster*)sl_user->data; |
600 roster_usr = &roster_special; | 600 roster_usr = &roster_special; |
601 if (value) { | 601 if (value) { |
602 if (!(roster_usr->flags & ROSTER_FLAG_MSG)) | |
603 unread_list_modified = TRUE; | |
602 roster_usr->flags |= ROSTER_FLAG_MSG; | 604 roster_usr->flags |= ROSTER_FLAG_MSG; |
603 // Append the roster_usr to unread_list, but avoid duplicates | 605 // Append the roster_usr to unread_list, but avoid duplicates |
604 if (!g_slist_find(unread_list, roster_usr)) | 606 if (!g_slist_find(unread_list, roster_usr)) |
605 unread_list = g_slist_append(unread_list, roster_usr); | 607 unread_list = g_slist_append(unread_list, roster_usr); |
606 } else { | 608 } else { |
609 if (roster_usr->flags & ROSTER_FLAG_MSG) | |
610 unread_list_modified = TRUE; | |
607 roster_usr->flags &= ~ROSTER_FLAG_MSG; | 611 roster_usr->flags &= ~ROSTER_FLAG_MSG; |
608 if (unread_list) { | 612 if (unread_list) { |
609 GSList *node = g_slist_find(unread_list, roster_usr); | 613 GSList *node = g_slist_find(unread_list, roster_usr); |
610 if (node) unread_list = g_slist_delete_link(unread_list, node); | 614 if (node) |
615 unread_list = g_slist_delete_link(unread_list, node); | |
611 } | 616 } |
612 } | 617 } |
613 return; | 618 goto roster_msg_setflag_return; |
614 } | 619 } |
615 | 620 |
616 sl_user = roster_find(jid, jidsearch, | 621 sl_user = roster_find(jid, jidsearch, |
617 ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT); | 622 ROSTER_TYPE_USER|ROSTER_TYPE_ROOM|ROSTER_TYPE_AGENT); |
618 // If we can't find it, we add it | 623 // If we can't find it, we add it |
639 if (roster_usr->flags & ROSTER_FLAG_MSG) | 644 if (roster_usr->flags & ROSTER_FLAG_MSG) |
640 unread_list_modified = TRUE; | 645 unread_list_modified = TRUE; |
641 roster_usr->flags &= ~ROSTER_FLAG_MSG; | 646 roster_usr->flags &= ~ROSTER_FLAG_MSG; |
642 if (unread_list) { | 647 if (unread_list) { |
643 GSList *node = g_slist_find(unread_list, roster_usr); | 648 GSList *node = g_slist_find(unread_list, roster_usr); |
644 if (node) unread_list = g_slist_delete_link(unread_list, node); | 649 if (node) |
650 unread_list = g_slist_delete_link(unread_list, node); | |
645 } | 651 } |
646 // For the group value we need to watch all buddies in this group; | 652 // For the group value we need to watch all buddies in this group; |
647 // if one is flagged, then the group will be flagged. | 653 // if one is flagged, then the group will be flagged. |
648 // I will re-use sl_user and roster_usr here, as they aren't used | 654 // I will re-use sl_user and roster_usr here, as they aren't used |
649 // anymore. | 655 // anymore. |
665 } | 671 } |
666 | 672 |
667 if (buddylist && (new_roster_item || !g_list_find(buddylist, roster_usr))) | 673 if (buddylist && (new_roster_item || !g_list_find(buddylist, roster_usr))) |
668 buddylist_build(); | 674 buddylist_build(); |
669 | 675 |
676 roster_msg_setflag_return: | |
670 if (unread_list_modified) { | 677 if (unread_list_modified) { |
671 guint unread_count = g_slist_length(unread_list); | 678 guint unread_count = g_slist_length(unread_list); |
672 hlog_save_state(); | 679 hlog_save_state(); |
673 /* Call external command */ | 680 /* Call external command */ |
674 hk_ext_cmd("", 'U', (guchar)MIN(255, unread_count), NULL); | 681 hk_ext_cmd("", 'U', (guchar)MIN(255, unread_count), NULL); |