diff options
author | George Hazan <george.hazan@gmail.com> | 2023-06-19 13:50:44 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2023-06-19 13:50:44 +0300 |
commit | a6bb80933c2984cf9a703e6dae6f1f18851c19b6 (patch) | |
tree | 2444742cfa248bd4c8edb382d7ee4fe64e99bca4 /src/mir_app | |
parent | 185ebd42c6f6364a615d8fe09d060c713ec10b46 (diff) |
UM_FindUserFromIndex: another major useless crutch died
Diffstat (limited to 'src/mir_app')
-rw-r--r-- | src/mir_app/src/chat.h | 1 | ||||
-rw-r--r-- | src/mir_app/src/chat_manager.cpp | 15 | ||||
-rw-r--r-- | src/mir_app/src/mir_app.def | 2 | ||||
-rw-r--r-- | src/mir_app/src/mir_app64.def | 2 | ||||
-rw-r--r-- | src/mir_app/src/srmm_base.cpp | 47 |
5 files changed, 37 insertions, 30 deletions
diff --git a/src/mir_app/src/chat.h b/src/mir_app/src/chat.h index 1c50e3ac4a..d1082c802e 100644 --- a/src/mir_app/src/chat.h +++ b/src/mir_app/src/chat.h @@ -87,7 +87,6 @@ STATUSINFO* TM_AddStatus(STATUSINFO **ppStatusList, const wchar_t *pszStatus, uint16_t TM_StringToWord(STATUSINFO *pStatusList, const wchar_t *pszStatus);
USERINFO* UM_AddUser(SESSION_INFO *si, const wchar_t *pszUID, const wchar_t *pszNick, uint16_t wStatus);
-USERINFO* UM_FindUserFromIndex(SESSION_INFO *si, int index);
BOOL UM_RemoveAll(SESSION_INFO *si);
BOOL UM_SetStatusEx(SESSION_INFO *si, const wchar_t* pszText, int flags);
void UM_SortKeys(SESSION_INFO *si);
diff --git a/src/mir_app/src/chat_manager.cpp b/src/mir_app/src/chat_manager.cpp index f8ceb299cf..0474d942bb 100644 --- a/src/mir_app/src/chat_manager.cpp +++ b/src/mir_app/src/chat_manager.cpp @@ -651,20 +651,6 @@ static int UM_CompareItem(const USERINFO *u1, const USERINFO *u2) return mir_wstrcmpi(u1->pszNick, u2->pszNick);
}
-USERINFO* UM_FindUserFromIndex(SESSION_INFO *si, int index)
-{
- if (!si)
- return nullptr;
-
- int i = 0;
- for (auto &ui : si->getUserList()) {
- if (i == index)
- return ui;
- i++;
- }
- return nullptr;
-}
-
static USERINFO* UM_GiveStatus(SESSION_INFO *si, const wchar_t *pszUID, uint16_t status)
{
USERINFO *ui = UM_FindUser(si, pszUID);
@@ -794,7 +780,6 @@ static void ResetApi() g_chatApi.UM_AddUser = ::UM_AddUser;
g_chatApi.UM_CompareItem = ::UM_CompareItem;
g_chatApi.UM_FindUser = ::UM_FindUser;
- g_chatApi.UM_FindUserFromIndex = ::UM_FindUserFromIndex;
g_chatApi.UM_GiveStatus = ::UM_GiveStatus;
g_chatApi.UM_SetContactStatus = ::UM_SetContactStatus;
g_chatApi.UM_TakeStatus = ::UM_TakeStatus;
diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index 0f02928081..161aad88ce 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -327,7 +327,7 @@ Chat_UpdateOptions @418 NONAME ?ShowFilterMenu@CSrmmBaseDialog@@UAEXXZ @422 NONAME
?OnInitDialog@CSrmmBaseDialog@@MAE_NXZ @423 NONAME
?AddLog@CSrmmBaseDialog@@UAEXABULOGINFO@@@Z @425 NONAME
-?UpdateNickList@CSrmmBaseDialog@@UAEXXZ @428 NONAME
+?UpdateNickList@CSrmmBaseDialog@@QAEXXZ @426 NONAME
?onClick_BIU@CSrmmBaseDialog@@IAEXPAVCCtrlButton@@@Z @430 NONAME
?onClick_BkColor@CSrmmBaseDialog@@IAEXPAVCCtrlButton@@@Z @431 NONAME
?onClick_Color@CSrmmBaseDialog@@IAEXPAVCCtrlButton@@@Z @432 NONAME
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 9fe2e92c6a..55a7147c2c 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -327,7 +327,7 @@ Chat_UpdateOptions @418 NONAME ?ShowFilterMenu@CSrmmBaseDialog@@UEAAXXZ @422 NONAME
?OnInitDialog@CSrmmBaseDialog@@MEAA_NXZ @423 NONAME
?AddLog@CSrmmBaseDialog@@UEAAXAEBULOGINFO@@@Z @425 NONAME
-?UpdateNickList@CSrmmBaseDialog@@UEAAXXZ @428 NONAME
+?UpdateNickList@CSrmmBaseDialog@@QEAAXXZ @426 NONAME
?onClick_BIU@CSrmmBaseDialog@@IEAAXPEAVCCtrlButton@@@Z @430 NONAME
?onClick_BkColor@CSrmmBaseDialog@@IEAAXPEAVCCtrlButton@@@Z @431 NONAME
?onClick_Color@CSrmmBaseDialog@@IEAAXPEAVCCtrlButton@@@Z @432 NONAME
diff --git a/src/mir_app/src/srmm_base.cpp b/src/mir_app/src/srmm_base.cpp index 99eea7065d..e2a0912349 100644 --- a/src/mir_app/src/srmm_base.cpp +++ b/src/mir_app/src/srmm_base.cpp @@ -239,7 +239,7 @@ LRESULT CSrmmBaseDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) // process mouse - hovering for the nickname list.fires events so the protocol can
// show the userinfo - tooltip.
-static void ProcessNickListHovering(HWND hwnd, int hoveredItem, SESSION_INFO *parentdat)
+static void ProcessNickListHovering(const CCtrlListBox &listBox, int hoveredItem, SESSION_INFO *parentdat)
{
static int currentHovered = -1;
static HWND hwndToolTip = nullptr;
@@ -250,6 +250,7 @@ static void ProcessNickListHovering(HWND hwnd, int hoveredItem, SESSION_INFO *pa currentHovered = hoveredItem;
+ MWindow hwnd = listBox.GetHwnd();
if (oldParent != hwnd && hwndToolTip) {
SendMessage(hwndToolTip, TTM_DELTOOL, 0, 0);
DestroyWindow(hwndToolTip);
@@ -281,9 +282,7 @@ static void ProcessNickListHovering(HWND hwnd, int hoveredItem, SESSION_INFO *pa ti.rect = clientRect;
CMStringW wszBuf;
-
- USERINFO *ui1 = g_chatApi.UM_FindUserFromIndex(parentdat, currentHovered);
- if (ui1) {
+ if (auto *ui1 = (USERINFO *)listBox.GetItemData(currentHovered)) {
if (ProtoServiceExists(parentdat->pszModule, MS_GC_PROTO_GETTOOLTIPTEXT)) {
wchar_t *p = (wchar_t*)CallProtoService(parentdat->pszModule, MS_GC_PROTO_GETTOOLTIPTEXT, (WPARAM)parentdat->ptszID, (LPARAM)ui1->pszUID);
if (p != nullptr) {
@@ -323,8 +322,7 @@ static void CALLBACK ChatTimerProc(HWND hwnd, UINT, UINT_PTR idEvent, DWORD) return;
}
- USERINFO *ui1 = g_chatApi.UM_FindUserFromIndex(si, si->currentHovered);
- if (ui1) {
+ if (auto *ui1 = (USERINFO *)SendMessage(hwnd, LB_GETITEMDATA, 0, 0)) {
CMStringW wszBuf;
if (ProtoServiceExists(si->pszModule, MS_GC_PROTO_GETTOOLTIPTEXT)) {
wchar_t *p = (wchar_t*)CallProtoService(si->pszModule, MS_GC_PROTO_GETTOOLTIPTEXT, (WPARAM)si->ptszID, (LPARAM)ui1->pszUID);
@@ -406,7 +404,7 @@ LRESULT CSrmmBaseDialog::WndProc_Nicklist(UINT msg, WPARAM wParam, LPARAM lParam if (nItemUnderMouse != -1)
SetTimer(m_nickList.GetHwnd(), (UINT_PTR)m_si, 450, ChatTimerProc);
}
- else ProcessNickListHovering(m_nickList.GetHwnd(), (int)nItemUnderMouse, m_si);
+ else ProcessNickListHovering(m_nickList, (int)nItemUnderMouse, m_si);
}
else {
if (bTooltipExists) {
@@ -416,7 +414,7 @@ LRESULT CSrmmBaseDialog::WndProc_Nicklist(UINT msg, WPARAM wParam, LPARAM lParam m_si->bHasToolTip = false;
}
}
- else ProcessNickListHovering(m_nickList.GetHwnd(), -1, nullptr);
+ else ProcessNickListHovering(m_nickList, -1, nullptr);
}
}
break;
@@ -466,7 +464,7 @@ LRESULT CSrmmBaseDialog::WndProc_Nicklist(UINT msg, WPARAM wParam, LPARAM lParam if (HIWORD(item) != 0) // clicked outside the client area
break;
- if (USERINFO *ui = g_chatApi.UM_FindUserFromIndex(m_si, item)) {
+ if (auto *ui = (USERINFO *)m_nickList.GetItemData(item)) {
if (pt.x == -1 && pt.y == -1)
pt.y += height - 4;
ClientToScreen(m_nickList.GetHwnd(), &pt);
@@ -476,6 +474,15 @@ LRESULT CSrmmBaseDialog::WndProc_Nicklist(UINT msg, WPARAM wParam, LPARAM lParam }
}
break;
+
+ case WM_KEYDOWN:
+ if (wParam == VK_RETURN) {
+ int index = m_nickList.GetCurSel();
+ if (index != LB_ERR)
+ if (auto *ui = (USERINFO *)m_nickList.GetItemData(index))
+ Chat_DoEventHook(m_si, GC_USER_PRIVMESS, ui, nullptr, 0);
+ }
+ break;
}
return mir_callNextSubclass(m_nickList.GetHwnd(), stubNicklistProc, msg, wParam, lParam);
@@ -557,8 +564,7 @@ INT_PTR CSrmmBaseDialog::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) {
DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lParam;
if (dis->CtlID == IDC_SRMM_NICKLIST) {
- USERINFO *ui = UM_FindUserFromIndex(m_si, dis->itemID);
- if (ui != nullptr)
+ if (auto *ui = (USERINFO *)m_nickList.GetItemData(dis->itemID))
DrawNickList(ui, dis);
return TRUE;
}
@@ -669,6 +675,23 @@ void CSrmmBaseDialog::UpdateFilterButton() m_btnFilter.SendMsg(BUTTONADDTOOLTIP, (WPARAM)(m_bFilterEnabled ? TranslateT("Disable the event filter (Ctrl+F)") : TranslateT("Enable the event filter (Ctrl+F)")), BATF_UNICODE);
}
+void CSrmmBaseDialog::UpdateNickList()
+{
+ int idx = m_nickList.SendMsg(LB_GETTOPINDEX, 0, 0);
+
+ m_nickList.SetDraw(false);
+ m_nickList.ResetContent();
+ for (auto &ui : m_si->getUserList())
+ m_nickList.AddString(ui->pszNick, LPARAM(ui));
+
+ m_nickList.SendMsg(LB_SETTOPINDEX, idx, 0);
+ m_nickList.SetDraw(true);
+ InvalidateRect(m_nickList.GetHwnd(), nullptr, FALSE);
+ UpdateWindow(m_nickList.GetHwnd());
+
+ UpdateTitle();
+}
+
/////////////////////////////////////////////////////////////////////////////////////////
void CSrmmBaseDialog::onClick_Color(CCtrlButton *pButton)
@@ -761,7 +784,7 @@ void CSrmmBaseDialog::onDblClick_List(CCtrlListBox *pList) ScreenToClient(pList->GetHwnd(), &hti.pt);
int item = LOWORD(pList->SendMsg(LB_ITEMFROMPOINT, 0, MAKELPARAM(hti.pt.x, hti.pt.y)));
- USERINFO *ui = UM_FindUserFromIndex(m_si, item);
+ auto *ui = (USERINFO *)m_nickList.GetItemData(item);
if (ui == nullptr)
return;
|