pidgin/gtkstatusbox.c

changeset 41209
909561f42b1f
parent 41065
b46de1b53654
child 41228
cfabfc1afd50
equal deleted inserted replaced
41208:48baac6c8989 41209:909561f42b1f
700 g_list_free(list); 700 g_list_free(list);
701 } 701 }
702 702
703 /* This returns NULL if the active accounts don't have identical 703 /* This returns NULL if the active accounts don't have identical
704 * statuses and a token account if they do */ 704 * statuses and a token account if they do */
705 static PurpleAccount* check_active_accounts_for_identical_statuses(void) 705 static
706 { 706 PurpleAccount *check_active_accounts_for_identical_statuses(void) {
707 GList *iter, *active_accts = purple_accounts_get_all_active(); 707 PurpleAccountManager *manager = NULL;
708 GList *iter, *active_accts = NULL;
708 PurpleAccount *acct1 = NULL; 709 PurpleAccount *acct1 = NULL;
709 const char *proto1 = NULL; 710 const char *proto1 = NULL;
711
712 manager = purple_account_manager_get_default();
713 active_accts = purple_account_manager_get_active(manager);
710 714
711 if (active_accts) { 715 if (active_accts) {
712 acct1 = active_accts->data; 716 acct1 = active_accts->data;
713 proto1 = purple_account_get_protocol_id(acct1); 717 proto1 = purple_account_get_protocol_id(acct1);
714 } else { 718 } else {
1711 1715
1712 if (changed) 1716 if (changed)
1713 { 1717 {
1714 /* Manually find the appropriate transient status */ 1718 /* Manually find the appropriate transient status */
1715 if (status_box->token_status_account) { 1719 if (status_box->token_status_account) {
1720 PurpleAccountManager *manager = NULL;
1716 GList *iter = purple_savedstatuses_get_all(); 1721 GList *iter = purple_savedstatuses_get_all();
1717 GList *tmp, *active_accts = purple_accounts_get_all_active(); 1722 GList *active_accts = NULL;
1723
1724 manager = purple_account_manager_get_default();
1725 active_accts = purple_account_manager_get_active(manager);
1718 1726
1719 for (; iter != NULL; iter = iter->next) { 1727 for (; iter != NULL; iter = iter->next) {
1720 PurpleSavedStatus *ss = iter->data; 1728 PurpleSavedStatus *ss = iter->data;
1721 const char *ss_msg = purple_savedstatus_get_message(ss); 1729 const char *ss_msg = purple_savedstatus_get_message(ss);
1722 /* find a known transient status that is the same as the 1730 /* find a known transient status that is the same as the
1725 purple_savedstatus_has_substatuses(ss) && /* Must have substatuses */ 1733 purple_savedstatus_has_substatuses(ss) && /* Must have substatuses */
1726 purple_strequal(ss_msg, message)) 1734 purple_strequal(ss_msg, message))
1727 { 1735 {
1728 gboolean found = FALSE; 1736 gboolean found = FALSE;
1729 /* this status must have substatuses for all the active accts */ 1737 /* this status must have substatuses for all the active accts */
1730 for(tmp = active_accts; tmp != NULL; tmp = tmp->next) { 1738 while(active_accts != NULL) {
1731 PurpleAccount *acct = tmp->data; 1739 PurpleAccount *acct = active_accts->data;
1732 PurpleSavedStatusSub *sub = purple_savedstatus_get_substatus(ss, acct); 1740 PurpleSavedStatusSub *sub = purple_savedstatus_get_substatus(ss, acct);
1733 if (sub) { 1741 if (sub) {
1734 const PurpleStatusType *sub_type = 1742 const PurpleStatusType *sub_type =
1735 purple_savedstatus_substatus_get_status_type(sub); 1743 purple_savedstatus_substatus_get_status_type(sub);
1736 const char *subtype_status_id = purple_status_type_get_id(sub_type); 1744 const char *subtype_status_id = purple_status_type_get_id(sub_type);
1737 if (purple_strequal(subtype_status_id, id)) { 1745 if (purple_strequal(subtype_status_id, id)) {
1738 found = TRUE; 1746 found = TRUE;
1739 break; 1747 break;
1740 } 1748 }
1741 } 1749 }
1750
1751 active_accts = g_list_delete_link(active_accts,
1752 active_accts);
1742 } 1753 }
1743 1754
1744 if (found) { 1755 if (found) {
1745 saved_status = ss; 1756 saved_status = ss;
1746 break; 1757 break;
1754 /* If we've used this type+message before, lookup the transient status */ 1765 /* If we've used this type+message before, lookup the transient status */
1755 saved_status = purple_savedstatus_find_transient_by_type_and_message(primitive, message); 1766 saved_status = purple_savedstatus_find_transient_by_type_and_message(primitive, message);
1756 } 1767 }
1757 1768
1758 /* If this type+message is unique then create a new transient saved status */ 1769 /* If this type+message is unique then create a new transient saved status */
1759 if (saved_status == NULL) 1770 if(saved_status == NULL) {
1760 {
1761 saved_status = purple_savedstatus_new(NULL, primitive); 1771 saved_status = purple_savedstatus_new(NULL, primitive);
1762 purple_savedstatus_set_message(saved_status, message); 1772 purple_savedstatus_set_message(saved_status, message);
1773
1763 if (status_box->token_status_account) { 1774 if (status_box->token_status_account) {
1764 GList *tmp, *active_accts = purple_accounts_get_all_active(); 1775 PurpleAccountManager *manager = NULL;
1765 for (tmp = active_accts; tmp != NULL; tmp = tmp->next) { 1776 GList *active_accts = NULL;
1766 purple_savedstatus_set_substatus(saved_status, 1777
1767 (PurpleAccount*) tmp->data, acct_status_type, message); 1778 manager = purple_account_manager_get_default();
1779 active_accts = purple_account_manager_get_active(manager);
1780
1781 while(active_accts != NULL) {
1782 PurpleAccount *account = NULL;
1783
1784 account = PURPLE_ACCOUNT(active_accts->data);
1785 purple_savedstatus_set_substatus(saved_status, account,
1786 acct_status_type,
1787 message);
1788
1789 active_accts = g_list_delete_link(active_accts,
1790 active_accts);
1768 } 1791 }
1769 g_list_free(active_accts);
1770 } 1792 }
1771 } 1793 }
1772 1794
1773 /* Set the status for each account */ 1795 /* Set the status for each account */
1774 purple_savedstatus_activate(saved_status); 1796 purple_savedstatus_activate(saved_status);
1887 /* 1909 /*
1888 * Show the message box whenever the primitive allows for a 1910 * Show the message box whenever the primitive allows for a
1889 * message attribute on any protocol that is enabled, 1911 * message attribute on any protocol that is enabled,
1890 * or our protocol, if we have account set 1912 * or our protocol, if we have account set
1891 */ 1913 */
1892 if (status_box->account) 1914 if(status_box->account) {
1893 accounts = g_list_prepend(accounts, status_box->account); 1915 accounts = g_list_prepend(accounts, status_box->account);
1894 else 1916 } else {
1895 accounts = purple_accounts_get_all_active(); 1917 PurpleAccountManager *manager = NULL;
1918
1919 manager = purple_account_manager_get_default();
1920
1921 accounts = purple_account_manager_get_active(manager);
1922 }
1923
1896 status_box->editor_visible = FALSE; 1924 status_box->editor_visible = FALSE;
1897 for (node = accounts; node != NULL; node = node->next) 1925 for (node = accounts; node != NULL; node = node->next)
1898 { 1926 {
1899 PurpleAccount *account; 1927 PurpleAccount *account;
1900 PurpleStatusType *status_type; 1928 PurpleStatusType *status_type;

mercurial