From b2aad2f0fc95cd3a85319429b9f92c14e3d8d849 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 12 Aug 2020 20:10:11 +0300 Subject: tabSRMM: - fixes #2521 (Esc key behavior selection not work for jabber chat rooms in Miranda NG 0.95.12 build); - manual WM_CLOSE processing code removed from CMsgDialog::DlgProc; - code cleaning --- plugins/TabSRMM/src/contactcache.cpp | 11 ++-- plugins/TabSRMM/src/msgdialog.cpp | 98 +++++++++++++++++++----------------- plugins/TabSRMM/src/msgs.h | 2 + plugins/TabSRMM/src/taskbar.cpp | 6 +-- plugins/TabSRMM/src/version.h | 2 +- 5 files changed, 65 insertions(+), 54 deletions(-) (limited to 'plugins/TabSRMM/src') diff --git a/plugins/TabSRMM/src/contactcache.cpp b/plugins/TabSRMM/src/contactcache.cpp index e597abe53c..cd31fae67a 100644 --- a/plugins/TabSRMM/src/contactcache.cpp +++ b/plugins/TabSRMM/src/contactcache.cpp @@ -97,8 +97,10 @@ void CContactCache::resetMeta() void CContactCache::closeWindow() { - if (m_dat) - ::SendMessage(m_dat->GetHwnd(), WM_CLOSE, 1, 2); + if (m_dat) { + m_dat->m_bForcedClose = true; + m_dat->Close(); + } } ///////////////////////////////////////////////////////////////////////////////////////// @@ -301,9 +303,12 @@ void CContactCache::deletedHandler() { cc = &ccInvalid; m_isValid = false; - if (m_dat) + if (m_dat) { + m_dat->m_bForcedClose = true; + // this message must be sent async to allow a contact to rest in peace before window gets closed ::PostMessage(m_dat->GetHwnd(), WM_CLOSE, 1, 2); + } releaseAlloced(); m_hContact = INVALID_CONTACT_ID; diff --git a/plugins/TabSRMM/src/msgdialog.cpp b/plugins/TabSRMM/src/msgdialog.cpp index 861469d289..2a3f18fc2c 100644 --- a/plugins/TabSRMM/src/msgdialog.cpp +++ b/plugins/TabSRMM/src/msgdialog.cpp @@ -666,6 +666,54 @@ bool CMsgDialog::OnInitDialog() return true; } +bool CMsgDialog::OnClose() +{ + // usual close, not forced + if (!m_bForcedClose) { + // esc handles error controls if we are in error state (error controls visible) + if (m_bErrorState) { + DM_ErrorDetected(MSGERROR_CANCEL, 0); + return false; + } + + switch (PluginConfig.m_EscapeCloses) { + case 1: // minimize container + SendMessage(m_pContainer->m_hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); + return false; + + case 2: // close or hide, optionally + if (PluginConfig.m_bHideOnClose) { + ShowWindow(m_pContainer->m_hwnd, SW_HIDE); + return false; + } + break; + + case 3: // do nothing + _dlgReturn(m_hwnd, FALSE); + return false; + } + _dlgReturn(m_hwnd, TRUE); + } + + if (m_iOpenJobs > 0 && !m_bForcedClose) { + if (m_bErrorState) + DM_ErrorDetected(MSGERROR_CANCEL, 1); + else { + if (m_bWarnClose) + return false; + + m_bWarnClose = true; + LRESULT result = SendQueue::WarnPendingJobs(0); + m_bWarnClose = false; + if (result == IDNO) + return false; + } + } + + CloseTab(); + return true; +} + void CMsgDialog::OnDestroy() { NotifyEvent(MSG_WINDOW_EVT_CLOSING); @@ -1962,8 +2010,9 @@ LRESULT CMsgDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) return 0; } - if (ProcessHotkeys(wParam, isShift, isCtrl, isAlt)) - return 0; + if (wParam != VK_ESCAPE) + if (ProcessHotkeys(wParam, isShift, isCtrl, isAlt)) + return 0; } if (wParam != VK_RIGHT && wParam != VK_LEFT) { @@ -3096,51 +3145,6 @@ INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) } return 0; - case WM_CLOSE: - // usual close, not forced - if (wParam == 0 && lParam == 0) { - // esc handles error controls if we are in error state (error controls visible) - if (m_bErrorState) { - DM_ErrorDetected(MSGERROR_CANCEL, 0); - return TRUE; - } - - switch (PluginConfig.m_EscapeCloses) { - case 1: // minimize container - SendMessage(m_pContainer->m_hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); - return TRUE; - - case 2: // close or hide, optionally - if (PluginConfig.m_bHideOnClose) { - ShowWindow(m_pContainer->m_hwnd, SW_HIDE); - return TRUE; - } - break; - - case 3: // do nothing - _dlgReturn(m_hwnd, FALSE); - return TRUE; - } - _dlgReturn(m_hwnd, TRUE); - } - - if (m_iOpenJobs > 0 && lParam != 2) { - if (m_bErrorState) - DM_ErrorDetected(MSGERROR_CANCEL, 1); - else { - if (m_bWarnClose) - return TRUE; - - m_bWarnClose = true; - LRESULT result = SendQueue::WarnPendingJobs(0); - m_bWarnClose = false; - if (result == IDNO) - return TRUE; - } - } - CloseTab(); - return 0; - case WM_DWMCOMPOSITIONCHANGED: BB_RefreshTheme(); m_pContainer->ClearMargins(); diff --git a/plugins/TabSRMM/src/msgs.h b/plugins/TabSRMM/src/msgs.h index 3aaa1e574d..6deb8bf7d9 100644 --- a/plugins/TabSRMM/src/msgs.h +++ b/plugins/TabSRMM/src/msgs.h @@ -469,6 +469,7 @@ public: bool m_bEditNotesActive; bool m_bShowAvatar; bool m_bSaveBtn, m_bNeedCheckSize; + bool m_bForcedClose; bool m_bErrorState; bool m_bDividerWanted, m_bDividerSet; bool m_bSplitterOverride; @@ -544,6 +545,7 @@ public: int OnFilter(MSGFILTER *); bool OnInitDialog() override; + bool OnClose() override; void OnDestroy() override; int Resizer(UTILRESIZECONTROL *urc) override; diff --git a/plugins/TabSRMM/src/taskbar.cpp b/plugins/TabSRMM/src/taskbar.cpp index b29530936f..ada97b4105 100644 --- a/plugins/TabSRMM/src/taskbar.cpp +++ b/plugins/TabSRMM/src/taskbar.cpp @@ -270,16 +270,16 @@ void CProxyWindow::sendPreview() return; FORMATRANGE fr = {}; - POINT pt = { 0 }; + POINT pt = {}; RECT rcContainer, rcTemp, rcRich, rcLog; HDC hdc, dc; int twips = (int)(15.0f / PluginConfig.m_DPIscaleY); bool fIsChat = m_dat->isChat(); HWND hwndRich = m_dat->m_pLog->GetHwnd(); - POINT ptOrigin = { 0 }, ptBottom; + POINT ptOrigin = {}, ptBottom; if (m_dat->m_bNeedCheckSize) { - RECT rcClient; + RECT rcClient; m_dat->m_pContainer->QueryClientArea(rcClient); ::MoveWindow(m_dat->GetHwnd(), rcClient.left, rcClient.top, (rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top), FALSE); ::SendMessage(m_dat->GetHwnd(), WM_SIZE, 0, 0); diff --git a/plugins/TabSRMM/src/version.h b/plugins/TabSRMM/src/version.h index ff0f96126a..dd583941e3 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 1 -#define __BUILD_NUM 3 +#define __BUILD_NUM 4 #include -- cgit v1.2.3