From 002aca2fb53de2d7593e305c99190c52c3d72391 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 12 May 2020 12:47:35 +0300 Subject: tabSRMM: some unused/obsoleted events removed --- plugins/TabSRMM/src/container.cpp | 10 ++-- plugins/TabSRMM/src/containeroptions.cpp | 8 ++- plugins/TabSRMM/src/functions.h | 9 +--- plugins/TabSRMM/src/generic_msghandlers.cpp | 3 +- plugins/TabSRMM/src/hotkeyhandler.cpp | 9 ++-- plugins/TabSRMM/src/mim.cpp | 50 +++++++++---------- plugins/TabSRMM/src/msgdialog.cpp | 45 +---------------- plugins/TabSRMM/src/msgdlgother.cpp | 46 +++++++++++++++-- plugins/TabSRMM/src/msgs.cpp | 18 ++----- plugins/TabSRMM/src/msgs.h | 11 +++-- plugins/TabSRMM/src/selectcontainer.cpp | 77 ++++++++++++++--------------- 11 files changed, 132 insertions(+), 154 deletions(-) (limited to 'plugins/TabSRMM/src') diff --git a/plugins/TabSRMM/src/container.cpp b/plugins/TabSRMM/src/container.cpp index acebc25dc2..1c9a0122bb 100644 --- a/plugins/TabSRMM/src/container.cpp +++ b/plugins/TabSRMM/src/container.cpp @@ -1369,7 +1369,7 @@ panel_found: if (iSelection - IDM_CONTAINERMENU >= 0) { ptrW tszName(db_get_wsa(0, CONTAINER_KEY, szIndex)); if (hDlg && tszName != nullptr) - SendMessage(hDlg, DM_CONTAINERSELECTED, 0, tszName); + dat->SwitchToContainer(tszName); } return 1; } @@ -1403,11 +1403,10 @@ panel_found: case ID_TABMENU_ATTACHTOCONTAINER: hDlg = GetTabWindow(pContainer->m_hwndTabs, GetTabItemFromMouse(pContainer->m_hwndTabs, &pt)); if (hDlg) - CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_SELECTCONTAINER), hwndDlg, SelectContainerDlgProc, (LPARAM)hDlg); + ((CMsgDialog *)GetWindowLongPtr(hDlg, GWLP_USERDATA))->SelectContainer(); break; case ID_TABMENU_CONTAINEROPTIONS: - if (pContainer->m_hWndOptions == nullptr) - CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_CONTAINEROPTIONS), hwndDlg, DlgProcContainerOptions, (LPARAM)pContainer); + pContainer->OptionsDialog(); break; case ID_TABMENU_CLOSECONTAINER: SendMessage(hwndDlg, WM_CLOSE, 0, 0); @@ -1750,8 +1749,7 @@ panel_found: case IDM_MOREOPTIONS: if (IsIconic(pContainer->m_hwnd)) SendMessage(pContainer->m_hwnd, WM_SYSCOMMAND, SC_RESTORE, 0); - if (pContainer->m_hWndOptions == nullptr) - CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_CONTAINEROPTIONS), hwndDlg, DlgProcContainerOptions, (LPARAM)pContainer); + pContainer->OptionsDialog(); break; case SC_MAXIMIZE: pContainer->m_oldSize.cx = pContainer->m_oldSize.cy = 0; diff --git a/plugins/TabSRMM/src/containeroptions.cpp b/plugins/TabSRMM/src/containeroptions.cpp index b2764b4b0f..dbbdeb682c 100644 --- a/plugins/TabSRMM/src/containeroptions.cpp +++ b/plugins/TabSRMM/src/containeroptions.cpp @@ -107,7 +107,7 @@ static void ShowPage(HWND hwndDlg, int iPage, BOOL fShow) Utils::showDlgControl(hwndDlg, IDC_AVATARSONTASKBAR, SW_HIDE); } -INT_PTR CALLBACK DlgProcContainerOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK DlgProcContainerOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HWND hwndTree = GetDlgItem(hwndDlg, IDC_SECTIONTREE); TContainerData *pContainer = (TContainerData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); @@ -518,3 +518,9 @@ do_apply: Utils::enableDlgControl(hwndDlg, IDC_APPLY, true); } return FALSE; } + +void TContainerData::OptionsDialog() +{ + if (m_hWndOptions == nullptr) + CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_CONTAINEROPTIONS), m_hwnd, DlgProcContainerOptions, (LPARAM)this); +} diff --git a/plugins/TabSRMM/src/functions.h b/plugins/TabSRMM/src/functions.h index d2ecbf6a5c..397799465f 100644 --- a/plugins/TabSRMM/src/functions.h +++ b/plugins/TabSRMM/src/functions.h @@ -77,7 +77,7 @@ void TSAPI RenameContainer(int iIndex, const wchar_t *newName); void TSAPI GetContainerNameForContact(MCONTACT hContact, wchar_t *szName, int iNameLen); HMENU TSAPI BuildContainerMenu(); -int TSAPI MessageWindowOpened(MCONTACT hContact, HWND hwnd); +int TSAPI MessageWindowOpened(MCONTACT hContact, CMsgDialog *pDlg); LRESULT CALLBACK IEViewSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK HPPKFSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); @@ -127,11 +127,4 @@ void TN_TypingMessage(MCONTACT hContact, int iMode); void TSAPI DrawMenuItem(DRAWITEMSTRUCT *dis, HICON hIcon, DWORD dwIdle); -/* - * dialog procedures - */ - -INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK DlgProcContainerOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); - #endif /* _TABSRMM_FUNCTIONS_H */ diff --git a/plugins/TabSRMM/src/generic_msghandlers.cpp b/plugins/TabSRMM/src/generic_msghandlers.cpp index 04bed928fb..3466ec327b 100644 --- a/plugins/TabSRMM/src/generic_msghandlers.cpp +++ b/plugins/TabSRMM/src/generic_msghandlers.cpp @@ -132,8 +132,7 @@ bool CMsgDialog::DM_GenericHotkeysCheck(MSG *message) return true; case TABSRMM_HK_CONTAINEROPTIONS: - if (m_pContainer->m_hWndOptions == nullptr) - CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_CONTAINEROPTIONS), m_pContainer->m_hwnd, DlgProcContainerOptions, (LPARAM)m_pContainer); + m_pContainer->OptionsDialog(); return true; case TABSRMM_HK_SEND: diff --git a/plugins/TabSRMM/src/hotkeyhandler.cpp b/plugins/TabSRMM/src/hotkeyhandler.cpp index 2cf4330eb0..f395031df3 100644 --- a/plugins/TabSRMM/src/hotkeyhandler.cpp +++ b/plugins/TabSRMM/src/hotkeyhandler.cpp @@ -238,16 +238,15 @@ LONG_PTR CALLBACK HotkeyHandlerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LP case DM_DOCREATETAB: { - HWND hWnd = Srmm_FindWindow(lParam); - if (hWnd && IsWindow(hWnd)) { - TContainerData *pContainer = nullptr; - SendMessage(hWnd, DM_QUERYCONTAINER, 0, (LPARAM)&pContainer); + auto *pDlg = Srmm_FindDialog(lParam); + if (pDlg) { + TContainerData *pContainer = pDlg->m_pContainer; if (pContainer) { int iTabs = TabCtrl_GetItemCount(pContainer->m_hwndTabs); if (iTabs == 1) SendMessage(pContainer->m_hwnd, WM_CLOSE, 0, 1); else - SendMessage(hWnd, WM_CLOSE, 0, 1); + SendMessage(pDlg->GetHwnd(), WM_CLOSE, 0, 1); char *szProto = Proto_GetBaseAccountName(lParam); if (szProto != nullptr && db_get_b(lParam, szProto, "ChatRoom", 0)) diff --git a/plugins/TabSRMM/src/mim.cpp b/plugins/TabSRMM/src/mim.cpp index 110a4a2c73..00054758b2 100644 --- a/plugins/TabSRMM/src/mim.cpp +++ b/plugins/TabSRMM/src/mim.cpp @@ -216,44 +216,44 @@ void CMimAPI::InitAPI() ///////////////////////////////////////////////////////////////////////////////////////// // hook subscriber function for incoming message typing events -int CMimAPI::TypingMessage(WPARAM hContact, LPARAM mode) +int CMimAPI::TypingMessage(WPARAM hContact, LPARAM nSecs) { int foundWin = 0, preTyping = 0; BOOL fShowOnClist = TRUE; - HWND hwnd = Srmm_FindWindow(hContact); + auto *pDlg = Srmm_FindDialog(hContact); MCONTACT hMeta = db_mc_getMeta(hContact); if (hMeta) { - if (!hwnd) - hwnd = Srmm_FindWindow(hMeta); + if (!pDlg) + pDlg = Srmm_FindDialog(hMeta); hContact = hMeta; } - if (hwnd && g_plugin.getByte(SRMSGSET_SHOWTYPING, SRMSGDEFSET_SHOWTYPING)) - preTyping = SendMessage(hwnd, DM_TYPING, 0, mode); + if (pDlg && g_plugin.getByte(SRMSGSET_SHOWTYPING, SRMSGDEFSET_SHOWTYPING)) + preTyping = pDlg->Typing(nSecs); - if (hwnd && IsWindowVisible(hwnd)) - foundWin = MessageWindowOpened(0, hwnd); + if (pDlg && IsWindowVisible(pDlg->GetHwnd())) + foundWin = MessageWindowOpened(0, pDlg); else foundWin = 0; TContainerData *pContainer = nullptr; - if (hwnd) { - SendMessage(hwnd, DM_QUERYCONTAINER, 0, (LPARAM)&pContainer); + if (pDlg) { + pContainer = pDlg->m_pContainer; if (pContainer == nullptr) // should never happen return 0; } if (g_plugin.getByte(SRMSGSET_SHOWTYPINGCLIST, SRMSGDEFSET_SHOWTYPINGCLIST)) { - if (!hwnd && !g_plugin.getByte(SRMSGSET_SHOWTYPINGNOWINOPEN, 1)) + if (!pDlg && !g_plugin.getByte(SRMSGSET_SHOWTYPINGNOWINOPEN, 1)) fShowOnClist = false; - if (hwnd && !g_plugin.getByte(SRMSGSET_SHOWTYPINGWINOPEN, 1)) + if (pDlg && !g_plugin.getByte(SRMSGSET_SHOWTYPINGWINOPEN, 1)) fShowOnClist = false; } else fShowOnClist = false; - if ((!foundWin || !pContainer->m_flags.m_bNoSound) && preTyping != (mode != 0)) - Skin_PlaySound(mode ? "TNStart" : "TNStop"); + if ((!foundWin || !pContainer->m_flags.m_bNoSound) && preTyping != (nSecs != 0)) + Skin_PlaySound(nSecs ? "TNStart" : "TNStop"); if (g_plugin.getByte("ShowTypingPopup", 0)) { BOOL fShow = false; @@ -264,16 +264,15 @@ int CMimAPI::TypingMessage(WPARAM hContact, LPARAM mode) fShow = true; break; case 1: - if (!foundWin || !(pContainer && pContainer->m_hwndActive == hwnd && GetForegroundWindow() == pContainer->m_hwnd)) + if (!foundWin || !(pContainer && pContainer->m_hwndActive == pDlg->GetHwnd() && GetForegroundWindow() == pContainer->m_hwnd)) fShow = true; break; case 2: - if (hwnd == nullptr) + if (pDlg == nullptr) fShow = true; else { if (PluginConfig.m_bHideOnClose) { - TContainerData *pCont = nullptr; - SendMessage(hwnd, DM_QUERYCONTAINER, 0, (LPARAM)&pCont); + TContainerData *pCont = pDlg->m_pContainer; if (pCont && pCont->m_bHidden) fShow = true; } @@ -281,10 +280,10 @@ int CMimAPI::TypingMessage(WPARAM hContact, LPARAM mode) break; } if (fShow) - TN_TypingMessage(hContact, mode); + TN_TypingMessage(hContact, nSecs); } - if (mode) { + if (nSecs) { wchar_t szTip[256]; mir_snwprintf(szTip, TranslateT("%s is typing a message"), Clist_GetContactDisplayName(hContact)); if (fShowOnClist && g_plugin.getByte("ShowTypingBalloon", 0)) @@ -394,9 +393,9 @@ int CMimAPI::MessageEventAdded(WPARAM hContact, LPARAM hDbEvent) DBEVENTINFO dbei = {}; db_event_get(hDbEvent, &dbei); - HWND hwnd = Srmm_FindWindow(hContact); - if (hwnd == nullptr) - hwnd = Srmm_FindWindow(db_event_getContact(hDbEvent)); + auto *pDlg = Srmm_FindDialog(hContact); + if (pDlg == nullptr) + pDlg = Srmm_FindDialog(db_event_getContact(hDbEvent)); BOOL isCustomEvent = IsCustomEvent(dbei.eventType); BOOL isShownCustomEvent = DbEventIsForMsgWindow(&dbei); @@ -409,9 +408,8 @@ int CMimAPI::MessageEventAdded(WPARAM hContact, LPARAM hDbEvent) bool bAutoCreate = M.GetBool("autotabs", true); bool bAutoContainer = M.GetBool("autocontainer", true); - if (hwnd) { - TContainerData *pTargetContainer = nullptr; - SendMessage(hwnd, DM_QUERYCONTAINER, 0, (LPARAM)&pTargetContainer); + if (pDlg) { + TContainerData *pTargetContainer = pDlg->m_pContainer; if (pTargetContainer == nullptr || !PluginConfig.m_bHideOnClose || IsWindowVisible(pTargetContainer->m_hwnd)) return 0; diff --git a/plugins/TabSRMM/src/msgdialog.cpp b/plugins/TabSRMM/src/msgdialog.cpp index 69f9d20f17..c0acfbd068 100644 --- a/plugins/TabSRMM/src/msgdialog.cpp +++ b/plugins/TabSRMM/src/msgdialog.cpp @@ -2636,18 +2636,6 @@ INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) SetBkColor((HDC)wParam, g_Settings.crUserListBGColor); return (INT_PTR)g_chatApi.hListBkgBrush; - case DM_TYPING: - if (m_si == nullptr || m_si->iType == GCW_PRIVMESS) { - int preTyping = m_nTypeSecs != 0; - m_nTypeSecs = (int)lParam > 0 ? (int)lParam : 0; - - if (m_nTypeSecs) - m_bShowTyping = 0; - - SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, preTyping); - } - return TRUE; - case DM_UPDATEWINICON: UpdateWindowIcon(); return 0; @@ -2884,7 +2872,7 @@ INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) if (iSelection - IDM_CONTAINERMENU >= 0) { ptrW val(db_get_wsa(0, szKey, szIndex)); if (val) - SendMessage(m_hwnd, DM_CONTAINERSELECTED, 0, (LPARAM)val); + SwitchToContainer(val); } break; } @@ -3217,11 +3205,6 @@ INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) ActivateTab(); return 0; - case DM_QUERYCONTAINER: // container API support functions - if (lParam) - *(TContainerData **)lParam = m_pContainer; - return 0; - case DM_QUERYHCONTACT: if (lParam) *(MCONTACT *)lParam = m_hContact; @@ -3231,32 +3214,6 @@ INT_PTR CMsgDialog::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) m_bNeedCheckSize = true; return 0; - case DM_CONTAINERSELECTED: - // sent by the select container dialog box when a container was selected... - // lParam = (wchar_t*)selected name... - { - wchar_t *szNewName = (wchar_t *)lParam; - if (!mir_wstrcmp(szNewName, TranslateT("Default container"))) - szNewName = CGlobals::m_default_container_name; - - int iOldItems = TabCtrl_GetItemCount(m_hwndParent); - if (!wcsncmp(m_pContainer->m_wszName, szNewName, CONTAINER_NAMELEN)) - break; - - TContainerData *pNewContainer = FindContainerByName(szNewName); - if (pNewContainer == nullptr) - if ((pNewContainer = CreateContainer(szNewName, FALSE, m_hContact)) == nullptr) - break; - - db_set_ws(m_hContact, SRMSGMOD_T, "containerW", szNewName); - PostMessage(PluginConfig.g_hwndHotkeyHandler, DM_DOCREATETAB, (WPARAM)pNewContainer, m_hContact); - if (iOldItems > 1) // there were more than 1 tab, container is still valid - SendMessage(m_pContainer->m_hwndActive, WM_SIZE, 0, 0); - SetForegroundWindow(pNewContainer->m_hwnd); - SetActiveWindow(pNewContainer->m_hwnd); - } - return 0; - case DM_STATUSBARCHANGED: tabUpdateStatusBar(); break; diff --git a/plugins/TabSRMM/src/msgdlgother.cpp b/plugins/TabSRMM/src/msgdlgother.cpp index ee45e05116..67e85f43b8 100644 --- a/plugins/TabSRMM/src/msgdlgother.cpp +++ b/plugins/TabSRMM/src/msgdlgother.cpp @@ -45,7 +45,7 @@ void CMsgDialog::AddLog() { if (PluginConfig.m_bUseDividers) { if (PluginConfig.m_bDividersUsePopupConfig) { - if (!MessageWindowOpened(0, m_hwnd)) + if (!MessageWindowOpened(0, this)) DM_AddDivider(); } else { @@ -1089,11 +1089,10 @@ int CMsgDialog::MsgWindowMenuHandler(int selection, int menuId) if (menuId == MENU_PICMENU || menuId == MENU_PANELPICMENU || menuId == MENU_TABCONTEXT) { switch (selection) { case ID_TABMENU_ATTACHTOCONTAINER: - CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_SELECTCONTAINER), m_hwnd, SelectContainerDlgProc, (LPARAM)m_hwnd); + SelectContainer(); return 1; case ID_TABMENU_CONTAINEROPTIONS: - if (m_pContainer->m_hWndOptions == nullptr) - CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_CONTAINEROPTIONS), m_hwnd, DlgProcContainerOptions, (LPARAM)m_pContainer); + m_pContainer->OptionsDialog(); return 1; case ID_TABMENU_CLOSECONTAINER: SendMessage(m_pContainer->m_hwnd, WM_CLOSE, 0, 0); @@ -1710,6 +1709,31 @@ void CMsgDialog::StreamEvents(MEVENT hDbEventFirst, int count, bool bAppend) m_hDbEventLast = db_event_last(m_hContact); } +///////////////////////////////////////////////////////////////////////////////////////// +// sent by the select container dialog box when a container was selected... + +void CMsgDialog::SwitchToContainer(const wchar_t *szNewName) +{ + if (!mir_wstrcmp(szNewName, TranslateT("Default container"))) + szNewName = CGlobals::m_default_container_name; + + int iOldItems = TabCtrl_GetItemCount(m_hwndParent); + if (!wcsncmp(m_pContainer->m_wszName, szNewName, CONTAINER_NAMELEN)) + return; + + TContainerData *pNewContainer = FindContainerByName(szNewName); + if (pNewContainer == nullptr) + if ((pNewContainer = CreateContainer(szNewName, FALSE, m_hContact)) == nullptr) + return; + + db_set_ws(m_hContact, SRMSGMOD_T, "containerW", szNewName); + PostMessage(PluginConfig.g_hwndHotkeyHandler, DM_DOCREATETAB, (WPARAM)pNewContainer, m_hContact); + if (iOldItems > 1) // there were more than 1 tab, container is still valid + SendMessage(m_pContainer->m_hwndActive, WM_SIZE, 0, 0); + SetForegroundWindow(pNewContainer->m_hwnd); + SetActiveWindow(pNewContainer->m_hwnd); +} + ///////////////////////////////////////////////////////////////////////////////////////// bool CMsgDialog::TabAutoComplete() @@ -1860,6 +1884,20 @@ void CMsgDialog::tabUpdateStatusBar() const } } +int CMsgDialog::Typing(int secs) +{ + if (m_si != nullptr && m_si->iType != GCW_PRIVMESS) + return 0; + + int preTyping = m_nTypeSecs != 0; + + m_nTypeSecs = (secs > 0) ? secs : 0; + if (m_nTypeSecs) + m_bShowTyping = 0; + + return preTyping; +} + ///////////////////////////////////////////////////////////////////////////////////////// void CMsgDialog::UpdateNickList() diff --git a/plugins/TabSRMM/src/msgs.cpp b/plugins/TabSRMM/src/msgs.cpp index 492e9072e1..2f106f009b 100644 --- a/plugins/TabSRMM/src/msgs.cpp +++ b/plugins/TabSRMM/src/msgs.cpp @@ -70,22 +70,14 @@ int SmileyAddOptionsChanged(WPARAM, LPARAM) // 0 if there is none (or the popup mode of the target container was configured to "hide" // the window.. -int TSAPI MessageWindowOpened(MCONTACT hContact, HWND _hwnd) +int TSAPI MessageWindowOpened(MCONTACT hContact, CMsgDialog *pDlg) { - HWND hwnd = nullptr; - TContainerData *pContainer = nullptr; - if (hContact) - hwnd = Srmm_FindWindow(hContact); - else if (_hwnd) - hwnd = _hwnd; - else - return 0; - - if (!hwnd) + pDlg = Srmm_FindDialog(hContact); + else if (!pDlg) return 0; - SendMessage(hwnd, DM_QUERYCONTAINER, 0, (LPARAM)&pContainer); + TContainerData *pContainer = pDlg->m_pContainer; if (pContainer) { if (pContainer->m_flags.m_bDontReport) { if (IsIconic(pContainer->m_hwnd)) @@ -99,7 +91,7 @@ int TSAPI MessageWindowOpened(MCONTACT hContact, HWND _hwnd) if (pContainer->m_flags.m_bDontReportFocused) return 0; - return pContainer->m_hwndActive == hwnd; + return pContainer->m_hwndActive == pDlg->GetHwnd(); } } return 1; diff --git a/plugins/TabSRMM/src/msgs.h b/plugins/TabSRMM/src/msgs.h index 83979a2368..0305e83909 100644 --- a/plugins/TabSRMM/src/msgs.h +++ b/plugins/TabSRMM/src/msgs.h @@ -281,7 +281,8 @@ struct TContainerData : public MZeroedObject void InitRedraw(void); void LoadOverrideTheme(void); void LoadThemeDefaults(void); - void QueryPending(); + void OptionsDialog(void); + void QueryPending(void); void ReflashContainer(void); void Resize(bool, int newWidth); void RestoreWindowPos(void); @@ -610,9 +611,12 @@ public: void NotifyDeliveryFailure(void) const; void RemakeLog(void); void SaveSplitter(void); + void SelectContainer(void); void SetDialogToType(void); void ShowPicture(bool showNewPic); void SplitterMoved(int x, HWND hwnd); + void SwitchToContainer(const wchar_t *szNewName); + int Typing(int secs); void UpdateReadChars(void) const; void UpdateSaveAndSendButton(void); @@ -709,7 +713,6 @@ struct TIconDescW #define DM_SETINFOPANEL (TM_USER+13) #define DM_OPTIONSAPPLIED (TM_USER+14) #define DM_SPLITSENDACK (TM_USER+19) -#define DM_TYPING (TM_USER+20) #define DM_UPDATEWINICON (TM_USER+21) #define DM_UPDATELASTMESSAGE (TM_USER+22) @@ -717,14 +720,12 @@ struct TIconDescW #define DM_CREATECONTAINER (TM_USER+26) #define DM_QUERYLASTUNREAD (TM_USER+28) #define DM_UPDATEPICLAYOUT (TM_USER+30) -#define DM_QUERYCONTAINER (TM_USER+31) #define DM_MUCFLASHWORKER (TM_USER+32) #define DM_APPENDMCEVENT (TM_USER+34) -#define DM_CHECKINFOTIP (TM_USER+35) +#define DM_CHECKINFOTIP (TM_USER+35) #define DM_SAVESIZE (TM_USER+36) #define DM_CHECKSIZE (TM_USER+37) #define DM_FORCEREDRAW (TM_USER+38) -#define DM_CONTAINERSELECTED (TM_USER+39) #define DM_QUERYHCONTACT (TM_USER+41) #define DM_QUERYCLIENTAREA (TM_USER+45) #define DM_ACTIVATEME (TM_USER+46) diff --git a/plugins/TabSRMM/src/selectcontainer.cpp b/plugins/TabSRMM/src/selectcontainer.cpp index 6174bd48a4..63cf0477fa 100644 --- a/plugins/TabSRMM/src/selectcontainer.cpp +++ b/plugins/TabSRMM/src/selectcontainer.cpp @@ -28,34 +28,28 @@ #include "stdafx.h" -INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { - HWND hwndMsgDlg = nullptr; - - hwndMsgDlg = (HWND)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); + auto *pDlg = (CMsgDialog *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: { - wchar_t szNewTitle[128]; - RECT rc, rcParent; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)lParam); - hwndMsgDlg = (HWND)lParam; TranslateDialogDefault(hwndDlg); - if (lParam) { - CMsgDialog *dat = (CMsgDialog*)GetWindowLongPtr((HWND)lParam, GWLP_USERDATA); - if (dat) { - mir_snwprintf(szNewTitle, TranslateT("Select container for %s"), dat->m_cache->getNick()); - SetWindowText(hwndDlg, szNewTitle); - } + pDlg = (CMsgDialog*)(lParam); + if (pDlg) { + wchar_t szNewTitle[128]; + mir_snwprintf(szNewTitle, TranslateT("Select container for %s"), pDlg->m_cache->getNick()); + SetWindowText(hwndDlg, szNewTitle); } SendMessage(hwndDlg, DM_SC_BUILDLIST, 0, 0); SendDlgItemMessage(hwndDlg, IDC_NEWCONTAINERNAME, EM_LIMITTEXT, (WPARAM)CONTAINER_NAMELEN, 0); SendDlgItemMessage(hwndDlg, IDC_NEWCONTAINER, EM_LIMITTEXT, (WPARAM)CONTAINER_NAMELEN, 0); + RECT rc, rcParent; GetWindowRect(hwndDlg, &rc); GetWindowRect(GetParent(hwndDlg), &rcParent); SetWindowPos(hwndDlg, nullptr, (rcParent.left + rcParent.right - (rc.right - rc.left)) / 2, (rcParent.top + rcParent.bottom - (rc.bottom - rc.top)) / 2, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW); @@ -64,26 +58,24 @@ INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, L case WM_COMMAND: switch (LOWORD(wParam)) { - case IDOK: { - wchar_t szName[CONTAINER_NAMELEN]; + case IDOK: + wchar_t szName[CONTAINER_NAMELEN + 1]; LRESULT iItem; if ((iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETCURSEL, 0, 0)) != LB_ERR) { SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETTEXT, (WPARAM)iItem, (LPARAM)szName); - if (IsWindow(hwndMsgDlg)) - SendMessage(hwndMsgDlg, DM_CONTAINERSELECTED, 0, (LPARAM)szName); + if (IsWindow(pDlg->GetHwnd())) + pDlg->SwitchToContainer(szName); } if (IsWindow(hwndDlg)) DestroyWindow(hwndDlg); break; - } + case IDCANCEL: DestroyWindow(hwndDlg); break; - case IDC_DELETECONTAINER: { - wchar_t szName[CONTAINER_NAMELEN + 1]; - LRESULT iItem; - + + case IDC_DELETECONTAINER: if ((iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETCURSEL, 0, 0)) != LB_ERR) { SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETTEXT, (WPARAM)iItem, (LPARAM)szName); if (!wcsncmp(szName, L"default", CONTAINER_NAMELEN) || !wcsncmp(szName, TranslateT("Default container"), CONTAINER_NAMELEN)) @@ -97,18 +89,17 @@ INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, L } } break; - } - case IDC_RENAMECONTAINER: { - wchar_t szNewName[CONTAINER_NAMELEN], szName[CONTAINER_NAMELEN + 1]; - int iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_NEWCONTAINERNAME)); - if (iLen) { + + case IDC_RENAMECONTAINER: + if (int iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_NEWCONTAINERNAME))) { + wchar_t szNewName[CONTAINER_NAMELEN]; GetDlgItemText(hwndDlg, IDC_NEWCONTAINERNAME, szNewName, _countof(szNewName)); if (!wcsncmp(szNewName, CGlobals::m_default_container_name, CONTAINER_NAMELEN) || !wcsncmp(szNewName, TranslateT("Default container"), CONTAINER_NAMELEN)) { MessageBox(hwndDlg, TranslateT("You cannot rename the default container"), TranslateT("Error"), MB_OK | MB_ICONERROR); break; } - int iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_FINDSTRING, (WPARAM)-1, (LPARAM)szNewName); + iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_FINDSTRING, (WPARAM)-1, (LPARAM)szNewName); if (iItem != LB_ERR) { wchar_t szOldName[CONTAINER_NAMELEN + 1]; SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETTEXT, (WPARAM)iItem, (LPARAM)szOldName); @@ -138,14 +129,12 @@ INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, L } } break; - } - case IDC_CREATENEW: { - wchar_t szNewName[CONTAINER_NAMELEN], szName[CONTAINER_NAMELEN + 1]; - int iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_NEWCONTAINER)); - if (iLen) { + case IDC_CREATENEW: + if (int iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_NEWCONTAINER))) { + wchar_t szNewName[CONTAINER_NAMELEN]; GetDlgItemText(hwndDlg, IDC_NEWCONTAINER, szNewName, _countof(szNewName)); - int iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_FINDSTRING, (WPARAM)-1, (LPARAM)szNewName); + iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_FINDSTRING, (WPARAM)-1, (LPARAM)szNewName); if (iItem != LB_ERR || !wcsncmp(szNewName, CGlobals::m_default_container_name, CONTAINER_NAMELEN)) { SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_GETTEXT, (WPARAM)iItem, (LPARAM)szName); if (mir_wstrlen(szName) == mir_wstrlen(szNewName) || !wcsncmp(szNewName, CGlobals::m_default_container_name, CONTAINER_NAMELEN)) { @@ -154,14 +143,15 @@ INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, L break; } } - if (IsWindow(hwndMsgDlg)) { - SendMessage(hwndMsgDlg, DM_CONTAINERSELECTED, 0, (LPARAM)szNewName); + + if (IsWindow(pDlg->GetHwnd())) { + pDlg->SwitchToContainer(szNewName); if (IsWindow(hwndDlg)) DestroyWindow(hwndDlg); } } break; - } + case IDC_CNTLIST: if (HIWORD(wParam) == LBN_DBLCLK) SendMessage(hwndDlg, WM_COMMAND, IDOK, 0); @@ -185,8 +175,7 @@ INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, L } // highlight the name of the container to which the message window currently is assigned - TContainerData *pContainer = nullptr; - SendMessage(hwndMsgDlg, DM_QUERYCONTAINER, 0, (LPARAM)&pContainer); + TContainerData *pContainer = pDlg->m_pContainer; if (pContainer) { LRESULT iItem = SendDlgItemMessage(hwndDlg, IDC_CNTLIST, LB_FINDSTRING, -1, (LPARAM)(!mir_wstrcmp(pContainer->m_wszName, L"default") ? TranslateT("Default container") : pContainer->m_wszName)); @@ -197,3 +186,11 @@ INT_PTR CALLBACK SelectContainerDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, L } return FALSE; } + +///////////////////////////////////////////////////////////////////////////////////////// +// chooses a new container for a window + +void CMsgDialog::SelectContainer() +{ + CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_SELECTCONTAINER), m_hwnd, SelectContainerDlgProc, (LPARAM)this); +} -- cgit v1.2.3