From e19a213605f1974c2000a9f2b1b7d6d4666cdb90 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 25 Jun 2018 20:43:51 +0300 Subject: duplicate cache item removed to avoid rare crashes --- src/core/stdclist/src/clc.h | 3 +++ src/core/stdclist/src/contact.cpp | 8 ++++---- src/mir_app/src/clc.cpp | 2 +- src/mir_app/src/clcidents.cpp | 2 +- src/mir_app/src/clcitems.cpp | 1 - 5 files changed, 9 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/core/stdclist/src/clc.h b/src/core/stdclist/src/clc.h index 67a0ad228c..3ed5186534 100644 --- a/src/core/stdclist/src/clc.h +++ b/src/core/stdclist/src/clc.h @@ -28,6 +28,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. int CompareContacts(const ClcContact *contact1, const ClcContact *contact2); +struct ClcCacheEntry : public ClcCacheEntryBase +{}; + struct ClcContact : public ClcContactBase { }; diff --git a/src/core/stdclist/src/contact.cpp b/src/core/stdclist/src/contact.cpp index 95a5e2212a..853a5b140b 100644 --- a/src/core/stdclist/src/contact.cpp +++ b/src/core/stdclist/src/contact.cpp @@ -58,8 +58,8 @@ int CompareContacts(const ClcContact* c1, const ClcContact* c2) MCONTACT a = c1->hContact, b = c2->hContact; wchar_t namea[128], *nameb; - int statusa = db_get_w(a, c1->proto, "Status", ID_STATUS_OFFLINE); - int statusb = db_get_w(b, c2->proto, "Status", ID_STATUS_OFFLINE); + int statusa = db_get_w(a, c1->pce->szProto, "Status", ID_STATUS_OFFLINE); + int statusb = db_get_w(b, c2->pce->szProto, "Status", ID_STATUS_OFFLINE); if (g_bSortByProto) { /* deal with statuses, online contacts have to go above offline */ @@ -67,8 +67,8 @@ int CompareContacts(const ClcContact* c1, const ClcContact* c2) return 2 * (statusa == ID_STATUS_OFFLINE) - 1; } /* both are online, now check protocols */ - if (c1->proto != nullptr && c2->proto != nullptr) { - int rc = mir_strcmp(c1->proto, c2->proto); + if (c1->pce->szProto != nullptr && c2->pce->szProto != nullptr) { + int rc = mir_strcmp(c1->pce->szProto, c2->pce->szProto); if (rc != 0) return rc; } diff --git a/src/mir_app/src/clc.cpp b/src/mir_app/src/clc.cpp index 6869e431f1..40f6b5e6cb 100644 --- a/src/mir_app/src/clc.cpp +++ b/src/mir_app/src/clc.cpp @@ -544,7 +544,7 @@ LRESULT CALLBACK fnContactListControlWndProc(HWND hwnd, UINT uMsg, WPARAM wParam if (!Clist_FindItem(hwnd, dat, wParam, &contact, nullptr, nullptr)) break; - contact->proto = GetContactProto(wParam); + contact->pce->szProto = GetContactProto(wParam); g_clistApi.pfnInvalidateDisplayNameCacheEntry(wParam); mir_wstrncpy(contact->szText, Clist_GetContactDisplayName(wParam), _countof(contact->szText)); SortClcByTimer(hwnd); diff --git a/src/mir_app/src/clcidents.cpp b/src/mir_app/src/clcidents.cpp index 817da20873..350a07e8ae 100644 --- a/src/mir_app/src/clcidents.cpp +++ b/src/mir_app/src/clcidents.cpp @@ -221,7 +221,7 @@ MIR_APP_DLL(HANDLE) Clist_ContactToItemHandle(ClcContact *cc, DWORD *nmFlags) MIR_APP_DLL(int) Clist_GetRealStatus(ClcContact *cc, int iDefaultValue) { - PROTOACCOUNT *pa = Proto_GetAccount(cc->proto); + PROTOACCOUNT *pa = Proto_GetAccount(cc->pce->szProto); if (pa) return pa->iRealStatus; diff --git a/src/mir_app/src/clcitems.cpp b/src/mir_app/src/clcitems.cpp index 418fde4cd2..8c35188d75 100644 --- a/src/mir_app/src/clcitems.cpp +++ b/src/mir_app/src/clcitems.cpp @@ -188,7 +188,6 @@ ClcContact* fnAddContactToGroup(ClcData *dat, ClcGroup *group, MCONTACT hContact cc->type = CLCIT_CONTACT; cc->iImage = Clist_GetContactIcon(hContact); cc->hContact = hContact; - cc->proto = szProto; cc->pce = pce; if (szProto != nullptr && !Clist_IsHiddenMode(dat, db_get_w(hContact, szProto, "Status", ID_STATUS_OFFLINE))) cc->flags |= CONTACTF_ONLINE; -- cgit v1.2.3