void TAccountXmpp::PresenceUpdateFromContextMenu(EMenuAction eMenuAction_Presence) { Assert(eMenuAction_Presence <= eMenuAction_PresenceLast); const UINT uFlagsAccountStatus = (m_uFlagsAccountStatus & ~FAS_kmStatusPresenceMask) | eMenuAction_Presence; if (uFlagsAccountStatus == m_uFlagsAccountStatus) return; m_uFlagsAccountStatus = uFlagsAccountStatus; // Update the presence if (m_paSocket != NULL && m_paSocket->Socket_FuIsReadyToSendMessages()) { switch (eMenuAction_Presence) { case eMenuAction_PresenceAccountOnline: case eMenuAction_PresenceAway: case eMenuAction_PresenceAwayExtended: case eMenuAction_PresenceBusy: m_paSocket->Socket_WriteXmlPresence(); break; default: m_paSocket->Socket_Disconnect(); TContact ** ppContactStop; TContact ** ppContact = m_arraypaContacts.PrgpGetContactsStop(OUT &ppContactStop); while (ppContact != ppContactStop) { TContact * pContact = *ppContact++; Assert(pContact != NULL); Assert(pContact->EGetRuntimeClass() == RTI(TContact)); Assert(pContact->m_pAccount == this); pContact->TreeItemContact_UpdateIconOffline(); } } // switch } // if TreeItemAccount_UpdateIcon(); // Update the icon according to the new presence } // PresenceUpdateFromContextMenu()