From 1202cf04c667c72fb30bd01608585283b9cc1914 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 13 Mar 2018 22:25:26 +0300 Subject: chat engine: - fixes #1174 (Group chat icons became "blank exe" icons if role cound exceeds 10); - unused chat api members removed; --- src/mir_app/src/chat.h | 3 +++ src/mir_app/src/chat_manager.cpp | 42 ++++++++++++++++------------------------ src/mir_app/src/chat_svc.cpp | 17 +++++++--------- 3 files changed, 27 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/mir_app/src/chat.h b/src/mir_app/src/chat.h index 69ee4bde3e..fbb6fcf539 100644 --- a/src/mir_app/src/chat.h +++ b/src/mir_app/src/chat.h @@ -76,6 +76,9 @@ BOOL SM_TakeStatus(const wchar_t *pszID, const char *pszModule, const wchar_ SESSION_INFO* SM_FindSession(const wchar_t *pszID, const char *pszModule); +STATUSINFO* TM_AddStatus(STATUSINFO **ppStatusList, const wchar_t *pszStatus, int *iCount); +WORD TM_StringToWord(STATUSINFO *pStatusList, const wchar_t *pszStatus); + // clist.c BOOL AddEvent(MCONTACT hContact, HICON hIcon, MEVENT hEvent, int type, wchar_t* fmt, ...); MCONTACT AddRoom(const char *pszModule, const wchar_t *pszRoom, const wchar_t *pszDisplayName, int iType); diff --git a/src/mir_app/src/chat_manager.cpp b/src/mir_app/src/chat_manager.cpp index 64e206bcc6..17a34ec221 100644 --- a/src/mir_app/src/chat_manager.cpp +++ b/src/mir_app/src/chat_manager.cpp @@ -188,12 +188,9 @@ static HICON SM_GetStatusIcon(SESSION_INFO *si, USERINFO *ui) return nullptr; STATUSINFO *ti = chatApi.TM_FindStatus(si->pStatuses, chatApi.TM_WordToString(si->pStatuses, ui->Status)); - if (ti != nullptr) { - if ((UINT_PTR)ti->hIcon >= STATUSICONCOUNT) - return ti->hIcon; - - return chatApi.hIcons[ICON_STATUS0 + (INT_PTR)ti->hIcon]; - } + if (ti != nullptr) + return chatApi.hIcons[ICON_STATUS0 + ti->iIconIndex]; + return chatApi.hIcons[ICON_STATUS0]; } @@ -280,7 +277,7 @@ BOOL SM_GiveStatus(const wchar_t *pszID, const char *pszModule, const wchar_t *p if (si == nullptr) return FALSE; - USERINFO *ui = chatApi.UM_GiveStatus(si->pUsers, pszUID, chatApi.TM_StringToWord(si->pStatuses, pszStatus)); + USERINFO *ui = chatApi.UM_GiveStatus(si->pUsers, pszUID, TM_StringToWord(si->pStatuses, pszStatus)); if (ui) { SM_MoveUser(si->ptszID, si->pszModule, ui->pszUID); if (si->pDlg) @@ -310,7 +307,7 @@ BOOL SM_TakeStatus(const wchar_t *pszID, const char *pszModule, const wchar_t *p if (si == nullptr) return FALSE; - USERINFO *ui = chatApi.UM_TakeStatus(si->pUsers, pszUID, chatApi.TM_StringToWord(si->pStatuses, pszStatus)); + USERINFO *ui = chatApi.UM_TakeStatus(si->pUsers, pszUID, TM_StringToWord(si->pStatuses, pszStatus)); if (ui) { SM_MoveUser(si->ptszID, si->pszModule, ui->pszUID); if (si->pDlg) @@ -590,26 +587,25 @@ static BOOL MM_RemoveAll(void) // Status manager functions // Necessary to keep track of what user statuses per window nicklist that is available -static STATUSINFO* TM_AddStatus(STATUSINFO **ppStatusList, const wchar_t *pszStatus, int *iCount) +STATUSINFO* TM_AddStatus(STATUSINFO **ppStatusList, const wchar_t *pszStatus, int *iCount) { if (!ppStatusList || !pszStatus) return nullptr; if (!chatApi.TM_FindStatus(*ppStatusList, pszStatus)) { - STATUSINFO *node = (STATUSINFO*)mir_alloc(sizeof(STATUSINFO)); - memset(node, 0, sizeof(STATUSINFO)); + STATUSINFO *node = (STATUSINFO*)mir_calloc(sizeof(STATUSINFO)); replaceStrW(node->pszGroup, pszStatus); - node->hIcon = (HICON)(*iCount); - while ((INT_PTR)node->hIcon > STATUSICONCOUNT - 1) - node->hIcon--; + node->iIconIndex = *iCount; + while (node->iIconIndex > STATUSICONCOUNT - 1) + node->iIconIndex--; if (*ppStatusList == nullptr) { // list is empty - node->Status = 1; + node->iStatus = 1; *ppStatusList = node; node->next = nullptr; } else { - node->Status = ppStatusList[0]->Status * 2; + node->iStatus = ppStatusList[0]->iStatus * 2; node->next = *ppStatusList; *ppStatusList = node; } @@ -631,17 +627,17 @@ static STATUSINFO* TM_FindStatus(STATUSINFO *pStatusList, const wchar_t *pszStat return nullptr; } -static WORD TM_StringToWord(STATUSINFO *pStatusList, const wchar_t *pszStatus) +WORD TM_StringToWord(STATUSINFO *pStatusList, const wchar_t *pszStatus) { if (!pStatusList || !pszStatus) return 0; for (STATUSINFO *pTemp = pStatusList; pTemp != nullptr; pTemp = pTemp->next) { if (mir_wstrcmpi(pTemp->pszGroup, pszStatus) == 0) - return pTemp->Status; + return pTemp->iStatus; if (pTemp->next == nullptr) - return pStatusList->Status; + return pStatusList->iStatus; } return 0; } @@ -652,8 +648,8 @@ static wchar_t* TM_WordToString(STATUSINFO *pStatusList, WORD Status) return nullptr; for (STATUSINFO *pTemp = pStatusList; pTemp != nullptr; pTemp = pTemp->next) { - if (pTemp->Status & Status) { - Status -= pTemp->Status; + if (pTemp->iStatus & Status) { + Status -= pTemp->iStatus; if (Status == 0) return pTemp->pszGroup; } @@ -669,8 +665,6 @@ static BOOL TM_RemoveAll(STATUSINFO **ppStatusList) while (*ppStatusList != nullptr) { STATUSINFO *pLast = ppStatusList[0]->next; mir_free(ppStatusList[0]->pszGroup); - if ((INT_PTR)ppStatusList[0]->hIcon > 10) - DestroyIcon(ppStatusList[0]->hIcon); mir_free(*ppStatusList); *ppStatusList = pLast; } @@ -1035,9 +1029,7 @@ MIR_APP_DLL(CHAT_MANAGER*) Chat_GetInterface(CHAT_MANAGER_INITDATA *pInit, int _ chatApi.MM_IconsChanged = MM_IconsChanged; chatApi.MM_RemoveAll = MM_RemoveAll; - chatApi.TM_AddStatus = TM_AddStatus; chatApi.TM_FindStatus = TM_FindStatus; - chatApi.TM_StringToWord = TM_StringToWord; chatApi.TM_WordToString = TM_WordToString; chatApi.TM_RemoveAll = TM_RemoveAll; diff --git a/src/mir_app/src/chat_svc.cpp b/src/mir_app/src/chat_svc.cpp index 7b70998612..a6e17cb81b 100644 --- a/src/mir_app/src/chat_svc.cpp +++ b/src/mir_app/src/chat_svc.cpp @@ -261,8 +261,8 @@ static void SetInitDone(SESSION_INFO *si) si->bInitDone = true; for (STATUSINFO *p = si->pStatuses; p; p = p->next) - if ((UINT_PTR)p->hIcon < STATUSICONCOUNT) - p->hIcon = HICON(si->iStatusCount - (INT_PTR)p->hIcon - 1); + if (p->iIconIndex < STATUSICONCOUNT) + p->iIconIndex = si->iStatusCount - p->iIconIndex - 1; } static INT_PTR __stdcall stubRoomControl(void *param) @@ -369,7 +369,7 @@ static void AddUser(GCEVENT *gce) if (si == nullptr) return; - WORD status = chatApi.TM_StringToWord(si->pStatuses, gce->ptszStatus); + WORD status = TM_StringToWord(si->pStatuses, gce->ptszStatus); USERINFO *ui = chatApi.UM_AddUser(si->pStatuses, &si->pUsers, gce->ptszUID, gce->ptszNick, status); if (ui == nullptr) @@ -383,7 +383,7 @@ static void AddUser(GCEVENT *gce) if (gce->bIsMe) si->pMe = ui; ui->Status = status; - ui->Status |= si->pStatuses->Status; + ui->Status |= si->pStatuses->iStatus; if (si->pDlg) si->pDlg->UpdateNickList(); @@ -579,7 +579,7 @@ EXTERN_C MIR_APP_DLL(int) Chat_Event(GCEVENT *gce) ///////////////////////////////////////////////////////////////////////////////////////// // chat control functions -MIR_APP_DLL(int) Chat_AddGroup(const char *szModule, const wchar_t *wszId, const wchar_t *wszText, HICON hIcon) +MIR_APP_DLL(int) Chat_AddGroup(const char *szModule, const wchar_t *wszId, const wchar_t *wszText) { if (wszText == nullptr) return GC_EVENT_ERROR; @@ -589,12 +589,9 @@ MIR_APP_DLL(int) Chat_AddGroup(const char *szModule, const wchar_t *wszId, const if (si == nullptr) return 0; - STATUSINFO *ti = chatApi.TM_AddStatus(&si->pStatuses, wszText, &si->iStatusCount); - if (ti) { + STATUSINFO *ti = TM_AddStatus(&si->pStatuses, wszText, &si->iStatusCount); + if (ti) si->iStatusCount++; - if (hIcon) - ti->hIcon = CopyIcon(hIcon); - } if (chatApi.OnAddStatus) chatApi.OnAddStatus(si, ti); -- cgit v1.2.3