diff options
author | George Hazan <ghazan@miranda.im> | 2022-08-11 19:52:53 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-08-11 19:52:53 +0300 |
commit | 249ad364f410c10a08bb6e05a2530d1f1b417a11 (patch) | |
tree | fd4e662e026badb81e6637500adab9ddc169e8b4 | |
parent | 95ecee334d06657df2ae0799ac824df88b1675d6 (diff) |
fixes #3156 (TabSRMM: warning dialog)
-rw-r--r-- | plugins/TabSRMM/src/utils.cpp | 62 | ||||
-rw-r--r-- | plugins/TabSRMM/src/utils.h | 1 | ||||
-rw-r--r-- | plugins/TabSRMM/src/version.h | 2 |
3 files changed, 24 insertions, 41 deletions
diff --git a/plugins/TabSRMM/src/utils.cpp b/plugins/TabSRMM/src/utils.cpp index 926320e470..c2f54ba149 100644 --- a/plugins/TabSRMM/src/utils.cpp +++ b/plugins/TabSRMM/src/utils.cpp @@ -1011,17 +1011,6 @@ LRESULT CWarning::ShowDialog() const return ::DialogBoxParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_WARNING), nullptr, stubDlgProc, LPARAM(this));
}
-__int64 CWarning::getMask()
-{
- __int64 mask = 0;
-
- uint32_t dwLow = M.GetDword("cWarningsL", 0);
- uint32_t dwHigh = M.GetDword("cWarningsH", 0);
-
- mask = ((((__int64)dwHigh) << 32) & 0xffffffff00000000) | dwLow;
- return(mask);
-}
-
/////////////////////////////////////////////////////////////////////////////////////////
// send cancel message to all open warning dialogs so they are destroyed
// before TabSRMM is unloaded.
@@ -1073,7 +1062,7 @@ LRESULT CWarning::show(const int uId, uint32_t dwFlags, const wchar_t* tszTxt) if ((mir_wstrlen(_s) > 3) && ((separator_pos = wcschr(_s, '|')) != nullptr)) {
if (uId >= 0) {
- mask = getMask();
+ mask = M.GetDword("cWarningsL", 0);
val = ((__int64)1L) << uId;
}
else mask = val = 0;
@@ -1124,19 +1113,15 @@ INT_PTR CALLBACK CWarning::dlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP {
switch (msg) {
case WM_INITDIALOG:
- {
- UINT uResId = 0;
- HICON hIcon = nullptr;
-
- m_hwnd = hwnd;
-
- ::SetWindowTextW(hwnd, TranslateT("TabSRMM warning message"));
- ::Window_SetSkinIcon_IcoLib(hwnd, SKINICON_OTHER_MIRANDA);
- ::SendDlgItemMessage(hwnd, IDC_WARNTEXT, EM_AUTOURLDETECT, TRUE, 0);
- ::SendDlgItemMessage(hwnd, IDC_WARNTEXT, EM_SETEVENTMASK, 0, ENM_LINK);
+ m_hwnd = hwnd;
- TranslateDialogDefault(hwnd);
+ ::SetWindowTextW(hwnd, TranslateT("TabSRMM warning message"));
+ ::Window_SetSkinIcon_IcoLib(hwnd, SKINICON_OTHER_MIRANDA);
+ ::SendDlgItemMessage(hwnd, IDC_WARNTEXT, EM_AUTOURLDETECT, TRUE, 0);
+ ::SendDlgItemMessage(hwnd, IDC_WARNTEXT, EM_SETEVENTMASK, 0, ENM_LINK);
+ TranslateDialogDefault(hwnd);
+ {
CMStringW str(FORMAT, RTF_DEFAULT_HEADER, 0, 0, 0, 30 * 15);
str.Append(m_szText);
str.Append(L"}");
@@ -1158,6 +1143,8 @@ INT_PTR CALLBACK CWarning::dlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP Utils::showDlgControl(hwnd, IDNO, SW_HIDE);
::SetFocus(::GetDlgItem(hwnd, IDOK));
}
+
+ UINT uResId = 0;
if (m_dwFlags & MB_ICONERROR || m_dwFlags & MB_ICONHAND)
uResId = 32513;
else if (m_dwFlags & MB_ICONEXCLAMATION || m_dwFlags & MB_ICONWARNING)
@@ -1167,12 +1154,13 @@ INT_PTR CALLBACK CWarning::dlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP else if (m_dwFlags & MB_ICONQUESTION)
uResId = 32514;
+ HICON hIcon;
if (uResId)
hIcon = reinterpret_cast<HICON>(::LoadImage(nullptr, MAKEINTRESOURCE(uResId), IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE));
else
hIcon = ::Skin_LoadIcon(SKINICON_EVENT_MESSAGE, true);
-
::SendDlgItemMessageW(hwnd, IDC_WARNICON, STM_SETICON, reinterpret_cast<WPARAM>(hIcon), 0);
+
if (!(m_dwFlags & MB_YESNO || m_dwFlags & MB_YESNOCANCEL))
::ShowWindow(hwnd, SW_SHOWNORMAL);
@@ -1209,28 +1197,20 @@ INT_PTR CALLBACK CWarning::dlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
- case IDCANCEL:
case IDYES:
case IDNO:
- ::SetWindowLongPtr(hwnd, GWLP_USERDATA, 0);
- delete this;
- WindowList_Remove(hWindowList, hwnd);
+ if (::IsDlgButtonChecked(hwnd, IDC_DONTSHOWAGAIN)) {
+ uint32_t newVal = M.GetDword("cWarningsL", 0) | ((uint32_t)1L << m_uId);
+ db_set_dw(0, SRMSGMOD_T, "cWarningsL", newVal);
+ }
+ __fallthrough;
+
+ case IDCANCEL:
if (!m_fIsModal && (IDOK == LOWORD(wParam) || IDCANCEL == LOWORD(wParam))) // modeless dialogs can receive a IDCANCEL from destroyAll()
::DestroyWindow(hwnd);
else
::EndDialog(hwnd, LOWORD(wParam));
break;
-
- case IDC_DONTSHOWAGAIN:
- __int64 mask = getMask(), val64 = ((__int64)1L << m_uId), newVal = 0;
- newVal = mask | val64;
-
- if (::IsDlgButtonChecked(hwnd, IDC_DONTSHOWAGAIN)) {
- uint32_t val = (uint32_t)(newVal & 0x00000000ffffffff);
- db_set_dw(0, SRMSGMOD_T, "cWarningsL", val);
- val = (uint32_t)((newVal >> 32) & 0x00000000ffffffff);
- db_set_dw(0, SRMSGMOD_T, "cWarningsH", val);
- }
}
break;
@@ -1251,6 +1231,10 @@ INT_PTR CALLBACK CWarning::dlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP break;
case WM_DESTROY:
+ ::SetWindowLongPtr(hwnd, GWLP_USERDATA, 0);
+ delete this;
+
+ WindowList_Remove(hWindowList, hwnd);
Window_FreeIcon_IcoLib(hwnd);
break;
}
diff --git a/plugins/TabSRMM/src/utils.h b/plugins/TabSRMM/src/utils.h index f2c96ab7a0..bfabca23af 100644 --- a/plugins/TabSRMM/src/utils.h +++ b/plugins/TabSRMM/src/utils.h @@ -158,7 +158,6 @@ private: INT_PTR CALLBACK dlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
static INT_PTR CALLBACK stubDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
- static __int64 getMask(); // get bit mask for disabled message classes
private:
static MWindowList hWindowList;
diff --git a/plugins/TabSRMM/src/version.h b/plugins/TabSRMM/src/version.h index c81b057487..8711c82315 100644 --- a/plugins/TabSRMM/src/version.h +++ b/plugins/TabSRMM/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 3
#define __MINOR_VERSION 6
#define __RELEASE_NUM 2
-#define __BUILD_NUM 4
+#define __BUILD_NUM 5
#include <stdver.h>
|