From 3f84f1e91015247074f5154498aec78e70b8f471 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 3 Jan 2025 13:30:24 +0300 Subject: =?UTF-8?q?fixes=20#4822=20(NS+TabSRMM=20-=20=D0=B3=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B8=D1=82=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/NewStory/src/fonts.cpp | 1 + plugins/NewStory/src/history.h | 2 +- plugins/NewStory/src/history_control.cpp | 14 -------------- plugins/NewStory/src/history_control.h | 2 -- plugins/NewStory/src/history_dlg.cpp | 9 ++++++--- plugins/NewStory/src/history_log.cpp | 6 ++++-- plugins/NewStory/src/main.cpp | 4 +++- plugins/NewStory/src/options.cpp | 1 + plugins/NewStory/src/utils.cpp | 26 ++++++++++++++++++-------- plugins/NewStory/src/utils.h | 2 +- 10 files changed, 35 insertions(+), 32 deletions(-) (limited to 'plugins') diff --git a/plugins/NewStory/src/fonts.cpp b/plugins/NewStory/src/fonts.cpp index 380dc85b21..09720e3406 100644 --- a/plugins/NewStory/src/fonts.cpp +++ b/plugins/NewStory/src/fonts.cpp @@ -77,6 +77,7 @@ int evtFontsChanged(WPARAM, LPARAM) } WindowList_Broadcast(g_hNewstoryLogs, UM_REDRAW_LIST, 0, 0); + WindowList_Broadcast(g_hNewstoryHistLogs, UM_REDRAW_LIST, 0, 0); return 0; } diff --git a/plugins/NewStory/src/history.h b/plugins/NewStory/src/history.h index 0b3bebe5d9..f332a252cf 100644 --- a/plugins/NewStory/src/history.h +++ b/plugins/NewStory/src/history.h @@ -32,7 +32,7 @@ enum UM_LOCATETIME = WM_USER + 0x662, }; -extern MWindowList g_hNewstoryWindows, g_hNewstoryLogs; +extern MWindowList g_hNewstoryWindows, g_hNewstoryLogs, g_hNewstoryHistLogs; void InitMenus(); void InitHotkeys(); diff --git a/plugins/NewStory/src/history_control.cpp b/plugins/NewStory/src/history_control.cpp index 903e0db33d..534febf153 100644 --- a/plugins/NewStory/src/history_control.cpp +++ b/plugins/NewStory/src/history_control.cpp @@ -1007,19 +1007,6 @@ void NewstoryListData::SetCaret(int idx, bool bEnsureVisible) } } -void NewstoryListData::SetContact(MCONTACT hContact) -{ - m_hContact = hContact; - - WindowList_Add(g_hNewstoryLogs, m_hwnd, hContact); -} - -void NewstoryListData::SetDialog(CSrmmBaseDialog *pDlg) -{ - if (pMsgDlg = pDlg) - SetContact(pDlg->m_hContact); -} - void NewstoryListData::SetPos(int pos) { SetSelection((selStart == -1) ? pos : selStart, pos); @@ -1717,7 +1704,6 @@ LRESULT CALLBACK NewstoryListWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM break; case WM_DESTROY: - WindowList_Remove(g_hNewstoryLogs, hwnd); delete data; SetWindowLongPtr(hwnd, 0, 0); break; diff --git a/plugins/NewStory/src/history_control.h b/plugins/NewStory/src/history_control.h index 5c26afb970..b512b37cd9 100644 --- a/plugins/NewStory/src/history_control.h +++ b/plugins/NewStory/src/history_control.h @@ -174,8 +174,6 @@ struct NewstoryListData : public MZeroedObject void ScrollTop(); void ScrollUp(int deltaY); void SetCaret(int idx, bool bEnsureVisible = true); - void SetContact(MCONTACT hContact); - void SetDialog(CSrmmBaseDialog *pDialog); void SetPos(int pos); void SetSelection(int iFirst, int iLast); void ToggleBookmark(); diff --git a/plugins/NewStory/src/history_dlg.cpp b/plugins/NewStory/src/history_dlg.cpp index ef3eb67172..08351bbd81 100644 --- a/plugins/NewStory/src/history_dlg.cpp +++ b/plugins/NewStory/src/history_dlg.cpp @@ -568,8 +568,6 @@ public: // Ask for layout PostMessage(m_hwnd, WM_SIZE, 0, 0); - WindowList_Add(g_hNewstoryWindows, m_hwnd, m_hContact); - ShowHideControls(); UpdateTitle(); @@ -584,6 +582,11 @@ public: if (m_hContact != INVALID_CONTACT_ID) { Utils_RestoreWindowPosition(m_hwnd, m_hContact, MODULENAME, "wnd_"); + WindowList_Add(g_hNewstoryWindows, m_hwnd, m_hContact); + + m_histCtrl->m_hContact = m_hContact; + WindowList_Add(g_hNewstoryHistLogs, m_histCtrl->m_hwnd, m_hContact); + m_histCtrl->AddEvent(m_hContact, 0, -1); BuildTimeTree(); @@ -594,7 +597,6 @@ public: OnResize(); BuildBookmarksList(); - m_histCtrl->SetContact(m_hContact); m_histCtrl->ScrollBottom(); Window_SetIcon_IcoLib(m_hwnd, g_plugin.getIconHandle(IDI_NEWSTORY)); @@ -798,6 +800,7 @@ public: Window_FreeIcon_IcoLib(m_hwnd); WindowList_Remove(g_hNewstoryWindows, m_hwnd); + WindowList_Remove(g_hNewstoryHistLogs, m_histCtrl->m_hwnd); if (m_hwndStatus != nullptr) { DestroyWindow(m_hwndStatus); diff --git a/plugins/NewStory/src/history_log.cpp b/plugins/NewStory/src/history_log.cpp index ad6af1dd38..3cfe682e46 100644 --- a/plugins/NewStory/src/history_log.cpp +++ b/plugins/NewStory/src/history_log.cpp @@ -37,12 +37,14 @@ public: 0, 0, rc.left - rc.right, rc.bottom - rc.top, m_pDlg.GetHwnd(), 0, m_pDlg.GetInst(), 0); m_histCtrl = (NewstoryListData *)GetWindowLongPtr(m_hwnd, 0); - m_histCtrl->SetDialog(&m_pDlg); + m_histCtrl->pMsgDlg = &m_pDlg; + m_histCtrl->m_hContact = m_pDlg.m_hContact; + WindowList_Add(g_hNewstoryLogs, m_hwnd, m_histCtrl->m_hContact); } void Detach() override { - WindowList_Remove(g_hNewstoryLogs, m_pDlg.GetHwnd()); + WindowList_Remove(g_hNewstoryLogs, m_hwnd); ::DestroyWindow(m_hwnd); } diff --git a/plugins/NewStory/src/main.cpp b/plugins/NewStory/src/main.cpp index bec5c9d337..cb03cebe7d 100644 --- a/plugins/NewStory/src/main.cpp +++ b/plugins/NewStory/src/main.cpp @@ -38,7 +38,7 @@ CMOption g_clCustom4(MODULENAME, "CustomColor4", -1); CMOption g_iPreviewHeight(MODULENAME, "PreviewHeight", 300); -MWindowList g_hNewstoryWindows = 0, g_hNewstoryLogs = 0; +MWindowList g_hNewstoryWindows = 0, g_hNewstoryLogs = 0, g_hNewstoryHistLogs = 0; ///////////////////////////////////////////////////////////////////////////////////////// @@ -188,6 +188,7 @@ int CMPlugin::Load() g_hNewstoryLogs = WindowList_Create(); g_hNewstoryWindows = WindowList_Create(); + g_hNewstoryHistLogs = WindowList_Create(); HookEvent(ME_DB_EVENT_ADDED, evtEventAdded); HookEvent(ME_DB_EVENT_DELETED, evtEventDeleted); @@ -208,6 +209,7 @@ int CMPlugin::Unload() { WindowList_Destroy(g_hNewstoryLogs); WindowList_Destroy(g_hNewstoryWindows); + WindowList_Destroy(g_hNewstoryHistLogs); GdiplusShutdown(m_gdiplusToken); diff --git a/plugins/NewStory/src/options.cpp b/plugins/NewStory/src/options.cpp index 193ca1ec0b..ba682a6b76 100644 --- a/plugins/NewStory/src/options.cpp +++ b/plugins/NewStory/src/options.cpp @@ -33,6 +33,7 @@ protected: void OnFinish(void *) { WindowList_BroadcastAsync(g_hNewstoryLogs, NSM_SET_OPTIONS, 0, 0); + WindowList_BroadcastAsync(g_hNewstoryHistLogs, NSM_SET_OPTIONS, 0, 0); } }; diff --git a/plugins/NewStory/src/utils.cpp b/plugins/NewStory/src/utils.cpp index cfe158f433..927b2b0ab2 100644 --- a/plugins/NewStory/src/utils.cpp +++ b/plugins/NewStory/src/utils.cpp @@ -49,19 +49,29 @@ Bitmap* LoadImageFromResource(HINSTANCE hInst, int resourceId, const wchar_t *pw ///////////////////////////////////////////////////////////////////////////////////////// -int SmartSendEvent(int iEventType, MCONTACT hContact, LPARAM hEvent) +static void SmartSendEventWorker(MWindowList wndList, int iEventType, MCONTACT cc1, MCONTACT cc2, MEVENT hEvent) { - if (HWND hwnd = WindowList_Find(g_hNewstoryLogs, hContact)) - SendMessage(hwnd, iEventType, hContact, hEvent); + if (HWND hwnd = WindowList_Find(wndList, cc1)) + PostMessage(hwnd, iEventType, cc1, hEvent); - if (db_mc_isMeta(hContact)) { - // Send a message to a real contact too + if (cc2 != INVALID_CONTACT_ID) + if (HWND hwnd = WindowList_Find(wndList, cc2)) + PostMessage(hwnd, iEventType, cc2, hEvent); +} + +int SmartSendEvent(int iEventType, MCONTACT cc1, MEVENT hEvent) +{ + MCONTACT cc2 = INVALID_CONTACT_ID; + + // Send a message to a real contact too + if (db_mc_isMeta(cc1)) { MCONTACT cc = db_event_getContact(hEvent); - if (cc != hContact) - if (HWND hwnd = WindowList_Find(g_hNewstoryLogs, cc)) - SendMessage(hwnd, iEventType, cc, hEvent); + if (cc != cc1) + cc2 = cc; } + SmartSendEventWorker(g_hNewstoryLogs, iEventType, cc1, cc2, hEvent); + SmartSendEventWorker(g_hNewstoryHistLogs, iEventType, cc1, cc2, hEvent); return 0; } diff --git a/plugins/NewStory/src/utils.h b/plugins/NewStory/src/utils.h index 1858c34d9c..7ebc0a4980 100644 --- a/plugins/NewStory/src/utils.h +++ b/plugins/NewStory/src/utils.h @@ -14,4 +14,4 @@ void RemoveBbcodes(CMStringW &pwszText); Bitmap* LoadImageFromResource(HINSTANCE, int, const wchar_t *); -int SmartSendEvent(int iEvent, MCONTACT hContact, LPARAM lParam); +int SmartSendEvent(int iEvent, MCONTACT hContact, MEVENT lParam); -- cgit v1.2.3