From f52b5cc86d9eff2494902157c8fc0a4e019a3c95 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 15 Aug 2017 13:49:37 +0300 Subject: fixes #799 (Crash on receiving msg in FB group chat) --- plugins/TabSRMM/src/chat_window.cpp | 7 ++----- plugins/TabSRMM/src/generic_msghandlers.cpp | 6 +++--- plugins/TabSRMM/src/msgdlgutils.cpp | 12 +++++------ plugins/TabSRMM/src/msgs.cpp | 32 +++++++---------------------- plugins/TabSRMM/src/msgs.h | 8 ++++++-- 5 files changed, 24 insertions(+), 41 deletions(-) (limited to 'plugins/TabSRMM/src') diff --git a/plugins/TabSRMM/src/chat_window.cpp b/plugins/TabSRMM/src/chat_window.cpp index 2b2080af00..b682843cd9 100644 --- a/plugins/TabSRMM/src/chat_window.cpp +++ b/plugins/TabSRMM/src/chat_window.cpp @@ -605,13 +605,10 @@ void CChatRoomDlg::OnDestroy() m_pContainer->UpdateTabs(); m_iTabID = -1; } + if (m_pWnd) { delete m_pWnd; - m_pWnd = 0; - } - if (m_sbCustom) { - delete m_sbCustom; - m_sbCustom = 0; + m_pWnd = nullptr; } NotifyEvent(MSG_WINDOW_EVT_CLOSE); diff --git a/plugins/TabSRMM/src/generic_msghandlers.cpp b/plugins/TabSRMM/src/generic_msghandlers.cpp index 3aaf459a05..28aafb0cb5 100644 --- a/plugins/TabSRMM/src/generic_msghandlers.cpp +++ b/plugins/TabSRMM/src/generic_msghandlers.cpp @@ -772,9 +772,9 @@ void CTabBaseDlg::DM_UpdateLastMessage() const SendMessage(m_pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)PluginConfig.g_buttonBarIcons[ICON_DEFAULT_TYPING]); mir_snwprintf(szBuf, TranslateT("%s is typing a message..."), m_cache->getNick()); } - else if (m_sbCustom) { - SendMessage(m_pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)m_sbCustom->hIcon); - SendMessage(m_pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)m_sbCustom->tszText); + else if (m_bStatusSet) { + SendMessage(m_pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)m_szStatusIcon); + SendMessage(m_pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)m_szStatusText.c_str()); return; } else { diff --git a/plugins/TabSRMM/src/msgdlgutils.cpp b/plugins/TabSRMM/src/msgdlgutils.cpp index 6447692995..d28eaad284 100644 --- a/plugins/TabSRMM/src/msgdlgutils.cpp +++ b/plugins/TabSRMM/src/msgdlgutils.cpp @@ -476,9 +476,9 @@ void CTabBaseDlg::tabUpdateStatusBar() const SendMessage(m_pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)PluginConfig.g_buttonBarIcons[ICON_DEFAULT_TYPING]); SendMessage(m_pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)m_wszStatusBar); } - else if (m_sbCustom) { - SendMessage(m_pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)m_sbCustom->hIcon); - SendMessage(m_pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)m_sbCustom->tszText); + else if (m_bStatusSet) { + SendMessage(m_pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)m_szStatusText.c_str()); + SendMessage(m_pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)m_szStatusIcon); } else { SendMessage(m_pContainer->hwndStatus, SB_SETICON, 0, 0); @@ -486,9 +486,9 @@ void CTabBaseDlg::tabUpdateStatusBar() const } } else { - if (m_sbCustom) { - SendMessage(m_pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)m_sbCustom->hIcon); - SendMessage(m_pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)m_sbCustom->tszText); + if (m_bStatusSet) { + SendMessage(m_pContainer->hwndStatus, SB_SETICON, 0, (LPARAM)m_szStatusText.c_str()); + SendMessage(m_pContainer->hwndStatus, SB_SETTEXT, 0, (LPARAM)m_szStatusIcon); } else SendMessage(m_pContainer->hwndStatus, SB_SETICON, 0, 0); } diff --git a/plugins/TabSRMM/src/msgs.cpp b/plugins/TabSRMM/src/msgs.cpp index 7325c07702..3a88bd7ee1 100644 --- a/plugins/TabSRMM/src/msgs.cpp +++ b/plugins/TabSRMM/src/msgs.cpp @@ -74,7 +74,6 @@ CTabBaseDlg::CTabBaseDlg(int iResource, SESSION_INFO *si) CTabBaseDlg::~CTabBaseDlg() { delete m_pWnd; - delete m_sbCustom; mir_free(m_sendBuffer); mir_free(m_hHistoryEvents); @@ -278,31 +277,15 @@ void CTabBaseDlg::NotifyDeliveryFailure() const } ///////////////////////////////////////////////////////////////////////////////////////// -// service function. Sets a status bar text for a contact +// Sets a status bar text for a contact -static INT_PTR SetStatusText(WPARAM hContact, LPARAM lParam) +void CTabBaseDlg::SetStatusText(const wchar_t *wszText, HICON hIcon) { - HWND hwnd = Srmm_FindWindow(hContact); - if (hwnd == nullptr) - hwnd = Srmm_FindWindow(db_mc_getMeta(hContact)); - if (hwnd == nullptr) - return 0; - - CTabBaseDlg *pDlg = (CTabBaseDlg*)GetWindowLongPtr(hwnd, GWLP_USERDATA); - if (pDlg != nullptr) { - // delete old custom data - if (pDlg->m_sbCustom) { - delete pDlg->m_sbCustom; - pDlg->m_sbCustom = nullptr; - } - - StatusTextData *st = (StatusTextData*)lParam; - if (st != nullptr) - pDlg->m_sbCustom = new StatusTextData(*st); - - pDlg->tabUpdateStatusBar(); - } - return 0; + m_bStatusSet = true; + m_szStatusText = wszText; + m_szStatusIcon = hIcon; + + tabUpdateStatusBar(); } ///////////////////////////////////////////////////////////////////////////////////////// @@ -1023,7 +1006,6 @@ static void TSAPI InitAPI() { CreateServiceFunction(MS_MSG_SENDMESSAGE, SendMessageCommand); CreateServiceFunction(MS_MSG_SENDMESSAGEW, SendMessageCommand_W); - CreateServiceFunction(MS_MSG_SETSTATUSTEXT, SetStatusText); CreateServiceFunction("TabSRMsg/ReloadSkin", ReloadSkin); CreateServiceFunction("TabSRMsg/ReloadSettings", ReloadSettings); diff --git a/plugins/TabSRMM/src/msgs.h b/plugins/TabSRMM/src/msgs.h index 2382d0fe86..160f57504a 100644 --- a/plugins/TabSRMM/src/msgs.h +++ b/plugins/TabSRMM/src/msgs.h @@ -242,6 +242,7 @@ class CTabBaseDlg : public CSrmmBaseDialog protected: virtual void LoadSettings() override; + virtual void SetStatusText(const wchar_t*, HICON) override; void DM_AddDivider(); void DM_DismissTip(const POINT& pt); @@ -278,7 +279,11 @@ protected: DWORD m_dwTickLastEvent; HBITMAP m_hOwnPic; SIZE m_pic; - + + CMStringW m_szStatusText; + HICON m_szStatusIcon; + bool m_bStatusSet; + bool m_bShowInfoAvatar, m_bShowUIElements; bool m_bUseOffset; bool m_bkeyProcessed; @@ -356,7 +361,6 @@ public: CInfoPanel m_pPanel; CContactCache *m_cache; TContainerData *m_pContainer; // parent container description structure - StatusTextData *m_sbCustom; AVATARCACHEENTRY *m_ace, *m_ownAce; CProxyWindow *m_pWnd; // proxy window object (win7+, for taskbar support). // ALWAYS check this pointer before using it, it is not guaranteed to exist. -- cgit v1.2.3