summaryrefslogtreecommitdiff
path: root/src/core/stdmsg
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2023-03-30 22:06:05 +0300
committerGeorge Hazan <ghazan@miranda.im>2023-03-30 22:06:05 +0300
commit0106b105c7ac842eec10c5683be41cb50fd2e26c (patch)
tree062f27951606187a00b252784ebd0f39ce7e12b1 /src/core/stdmsg
parent357540d5d8f0e67a2b3efdef7bc40c8db91fccf8 (diff)
fix for #3471 applied to StdMsg & Scriver
Diffstat (limited to 'src/core/stdmsg')
-rw-r--r--src/core/stdmsg/src/chat_options.cpp31
-rw-r--r--src/core/stdmsg/src/chat_window.cpp36
-rw-r--r--src/core/stdmsg/src/msgdialog.cpp7
3 files changed, 48 insertions, 26 deletions
diff --git a/src/core/stdmsg/src/chat_options.cpp b/src/core/stdmsg/src/chat_options.cpp
index b6b519ab10..da48cd223a 100644
--- a/src/core/stdmsg/src/chat_options.cpp
+++ b/src/core/stdmsg/src/chat_options.cpp
@@ -67,9 +67,27 @@ void AddIcons(void)
}
/////////////////////////////////////////////////////////////////////////////////////////
+
+struct CChatOptionsBaseDlg : public CDlgBase
+{
+ CChatOptionsBaseDlg(int iDlgId) :
+ CDlgBase(g_plugin, iDlgId)
+ {
+ m_OnFinishWizard = Callback(this, &CChatOptionsBaseDlg::onFinish);
+ }
+
+ void onFinish(void *)
+ {
+ g_chatApi.ReloadSettings();
+ Chat_UpdateOptions();
+ Chat_ReconfigureFilters();
+ }
+};
+
+/////////////////////////////////////////////////////////////////////////////////////////
// General options
-class COptMainDlg : public CDlgBase
+class COptMainDlg : public CChatOptionsBaseDlg
{
uint32_t m_dwFlags;
@@ -77,7 +95,7 @@ class COptMainDlg : public CDlgBase
public:
COptMainDlg() :
- CDlgBase(g_plugin, IDD_OPTIONS1),
+ CChatOptionsBaseDlg(IDD_OPTIONS1),
checkBoxes(this, IDC_CHECKBOXES)
{
m_dwFlags = db_get_dw(0, CHAT_MODULE, "IconFlags");
@@ -120,9 +138,6 @@ public:
bool OnApply() override
{
db_set_dw(0, CHAT_MODULE, "IconFlags", m_dwFlags);
-
- g_chatApi.ReloadSettings();
- Chat_UpdateOptions();
return true;
}
};
@@ -146,7 +161,7 @@ static INT CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM p
return 0;
}
-class COptLogDlg : public CDlgBase
+class COptLogDlg : public CChatOptionsBaseDlg
{
CCtrlEdit edtGroup, edtLogDir, edtLogTimestamp, edtTimestamp, edtHighlight, edtInStamp, edtOutStamp, edtLimit;
CCtrlSpin spin2, spin3, spin4;
@@ -155,7 +170,7 @@ class COptLogDlg : public CDlgBase
public:
COptLogDlg() :
- CDlgBase(g_plugin, IDD_OPTIONS2),
+ CChatOptionsBaseDlg(IDD_OPTIONS2),
spin2(this, IDC_SPIN2, 5000),
spin3(this, IDC_SPIN3, 10000),
spin4(this, IDC_SPIN4, 255, 10),
@@ -263,8 +278,6 @@ public:
else
db_unset(0, CHAT_MODULE, "NicklistRowDist");
- g_chatApi.ReloadSettings();
- Chat_UpdateOptions();
return true;
}
diff --git a/src/core/stdmsg/src/chat_window.cpp b/src/core/stdmsg/src/chat_window.cpp
index 4cc1fa7a3f..a8806f0cbc 100644
--- a/src/core/stdmsg/src/chat_window.cpp
+++ b/src/core/stdmsg/src/chat_window.cpp
@@ -213,21 +213,25 @@ void CLogWindow::LogEvents(LOGINFO *lin, bool bRedraw)
INT_PTR CALLBACK CMsgDialog::FilterWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
+ int iFlags;
static CMsgDialog *pDlg = nullptr;
+
switch (uMsg) {
case WM_INITDIALOG:
pDlg = (CMsgDialog*)lParam;
- CheckDlgButton(hwndDlg, IDC_1, pDlg->m_iLogFilterFlags & GC_EVENT_ACTION ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_2, pDlg->m_iLogFilterFlags & GC_EVENT_MESSAGE ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_3, pDlg->m_iLogFilterFlags & GC_EVENT_NICK ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_4, pDlg->m_iLogFilterFlags & GC_EVENT_JOIN ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_5, pDlg->m_iLogFilterFlags & GC_EVENT_PART ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_6, pDlg->m_iLogFilterFlags & GC_EVENT_TOPIC ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_7, pDlg->m_iLogFilterFlags & GC_EVENT_ADDSTATUS ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_8, pDlg->m_iLogFilterFlags & GC_EVENT_INFORMATION ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_9, pDlg->m_iLogFilterFlags & GC_EVENT_QUIT ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_10, pDlg->m_iLogFilterFlags & GC_EVENT_KICK ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_11, pDlg->m_iLogFilterFlags & GC_EVENT_NOTICE ? BST_CHECKED : BST_UNCHECKED);
+
+ iFlags = db_get_dw(pDlg->m_hContact, CHAT_MODULE, "FilterFlags");
+ CheckDlgButton(hwndDlg, IDC_1, iFlags & GC_EVENT_ACTION ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_2, iFlags & GC_EVENT_MESSAGE ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_3, iFlags & GC_EVENT_NICK ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_4, iFlags & GC_EVENT_JOIN ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_5, iFlags & GC_EVENT_PART ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_6, iFlags & GC_EVENT_TOPIC ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_7, iFlags & GC_EVENT_ADDSTATUS ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_8, iFlags & GC_EVENT_INFORMATION ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_9, iFlags & GC_EVENT_QUIT ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_10, iFlags & GC_EVENT_KICK ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_11, iFlags & GC_EVENT_NOTICE ? BST_CHECKED : BST_UNCHECKED);
break;
case WM_CTLCOLOREDIT:
@@ -238,7 +242,7 @@ INT_PTR CALLBACK CMsgDialog::FilterWndProc(HWND hwndDlg, UINT uMsg, WPARAM wPara
case WM_ACTIVATE:
if (LOWORD(wParam) == WA_INACTIVE) {
- int iFlags = 0;
+ iFlags = 0;
if (IsDlgButtonChecked(hwndDlg, IDC_1) == BST_CHECKED)
iFlags |= GC_EVENT_ACTION;
@@ -266,9 +270,11 @@ INT_PTR CALLBACK CMsgDialog::FilterWndProc(HWND hwndDlg, UINT uMsg, WPARAM wPara
if (iFlags & GC_EVENT_ADDSTATUS)
iFlags |= GC_EVENT_REMOVESTATUS;
- pDlg->m_iLogFilterFlags = iFlags;
- if (pDlg->m_bFilterEnabled)
- pDlg->RedrawLog();
+ db_set_dw(pDlg->m_hContact, CHAT_MODULE, "FilterFlags", iFlags);
+ db_set_dw(pDlg->m_hContact, CHAT_MODULE, "FilterMask", 0xFFFF);
+
+ Chat_SetFilters(pDlg->getChat());
+ pDlg->RedrawLog();
PostMessage(hwndDlg, WM_CLOSE, 0, 0);
}
break;
diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp
index 14e25a9ef1..d7d4a14e25 100644
--- a/src/core/stdmsg/src/msgdialog.cpp
+++ b/src/core/stdmsg/src/msgdialog.cpp
@@ -55,8 +55,6 @@ CMsgDialog::CMsgDialog(CTabbedWindow *pOwner, SESSION_INFO *si) :
m_cmdList(20),
m_pOwner(pOwner)
{
- m_si->pDlg = this;
-
m_iSplitterX = g_Settings.iSplitterX;
m_iSplitterY = g_Settings.iSplitterY;
@@ -95,6 +93,11 @@ bool CMsgDialog::OnInitDialog()
{
CSuper::OnInitDialog();
+ if (m_si) {
+ m_si->pDlg = this;
+ Chat_SetFilters(m_si);
+ }
+
m_szProto = Proto_GetBaseAccountName(m_hContact);
m_bIsMeta = db_mc_isMeta(m_hContact) != 0;
m_hTimeZone = TimeZone_CreateByContact(m_hContact, nullptr, TZF_KNOWNONLY);