diff options
Diffstat (limited to 'plugins/TabSRMM')
-rw-r--r-- | plugins/TabSRMM/src/container.cpp | 159 |
1 files changed, 65 insertions, 94 deletions
diff --git a/plugins/TabSRMM/src/container.cpp b/plugins/TabSRMM/src/container.cpp index bf8ac41aef..cb0f86dc4f 100644 --- a/plugins/TabSRMM/src/container.cpp +++ b/plugins/TabSRMM/src/container.cpp @@ -41,6 +41,16 @@ static TContainerData* TSAPI RemoveContainerFromList(TContainerData*); static bool fForceOverlayIcons = false;
+static HWND GetTabWindow(HWND hwndTab, int i)
+{
+ if (i < 0)
+ return nullptr;
+
+ TCITEM tci;
+ tci.mask = TCIF_PARAM;
+ return (TabCtrl_GetItem(hwndTab, i, &tci)) ? (HWND)tci.lParam: nullptr;
+}
+
void TContainerData::InitRedraw()
{
::KillTimer(m_hwnd, (UINT_PTR)this);
@@ -52,12 +62,11 @@ void TContainerData::UpdateTabs() HWND hwndTab = GetDlgItem(m_hwnd, IDC_MSGTABS);
int nTabs = TabCtrl_GetItemCount(hwndTab);
for (int i = 0; i < nTabs; i++) {
- TCITEM tci;
- tci.mask = TCIF_PARAM;
- if (!TabCtrl_GetItem(hwndTab, i, &tci))
+ HWND hDlg = GetTabWindow(hwndTab, i);
+ if (!hDlg)
continue;
- CTabBaseDlg *dat = (CTabBaseDlg*)GetWindowLongPtr((HWND)tci.lParam, GWLP_USERDATA);
+ CTabBaseDlg *dat = (CTabBaseDlg*)GetWindowLongPtr(hDlg, GWLP_USERDATA);
if (dat)
dat->m_iTabID = i;
}
@@ -495,8 +504,6 @@ static BOOL fHaveTipper = FALSE; static INT_PTR CALLBACK DlgProcContainer(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
- int iItem = 0;
- TCITEM tci;
RECT rc;
POINT pt;
MCONTACT hContact;
@@ -709,12 +716,10 @@ static INT_PTR CALLBACK DlgProcContainer(HWND hwndDlg, UINT msg, WPARAM wParam, // just queues a resize request)
int nCount = TabCtrl_GetItemCount(hwndTab);
- memset(&tci, 0, sizeof(tci));
for (int i = 0; i < nCount; i++) {
- tci.mask = TCIF_PARAM;
- TabCtrl_GetItem(hwndTab, i, &tci);
- if ((HWND)tci.lParam == pContainer->m_hwndActive) {
- SetWindowPos((HWND)tci.lParam, nullptr, rcClient.left, rcClient.top, (rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top),
+ HWND hDlg = GetTabWindow(hwndTab, i);
+ if (hDlg == pContainer->m_hwndActive) {
+ SetWindowPos(hDlg, nullptr, rcClient.left, rcClient.top, (rcClient.right - rcClient.left), (rcClient.bottom - rcClient.top),
SWP_NOSENDCHANGING | SWP_NOACTIVATE/*|SWP_NOCOPYBITS*/);
if (!pContainer->bSizingLoop && sizeChanged) {
dat = (CTabBaseDlg*)GetWindowLongPtr(pContainer->m_hwndActive, GWLP_USERDATA);
@@ -723,7 +728,7 @@ static INT_PTR CALLBACK DlgProcContainer(HWND hwndDlg, UINT msg, WPARAM wParam, }
}
else if (sizeChanged)
- SendMessage((HWND)tci.lParam, DM_CHECKSIZE, 0, 0);
+ SendMessage(hDlg, DM_CHECKSIZE, 0, 0);
}
pContainer->SideBar->scrollIntoView();
@@ -807,17 +812,14 @@ panel_found: switch (((LPNMHDR)lParam)->code) {
case TCN_SELCHANGE:
- memset(&tci, 0, sizeof(tci));
- iItem = TabCtrl_GetCurSel(hwndTab);
- tci.mask = TCIF_PARAM;
- if (TabCtrl_GetItem(hwndTab, iItem, &tci)) {
- if ((HWND)tci.lParam != pContainer->m_hwndActive)
+ if (HWND hDlg = GetTabWindow(hwndTab, TabCtrl_GetCurSel(hwndTab))) {
+ if (hDlg != pContainer->m_hwndActive)
if (pContainer->m_hwndActive && IsWindow(pContainer->m_hwndActive))
ShowWindow(pContainer->m_hwndActive, SW_HIDE);
- pContainer->m_hwndActive = (HWND)tci.lParam;
- SendMessage((HWND)tci.lParam, DM_SAVESIZE, 0, 1);
- ShowWindow((HWND)tci.lParam, SW_SHOW);
+ pContainer->m_hwndActive = hDlg;
+ SendMessage(hDlg, DM_SAVESIZE, 0, 1);
+ ShowWindow(hDlg, SW_SHOW);
if (!IsIconic(hwndDlg))
SetFocus(pContainer->m_hwndActive);
}
@@ -827,20 +829,16 @@ panel_found: // tooltips
case NM_RCLICK:
bool fFromSidebar = false;
- memset(&tci, 0, sizeof(tci));
GetCursorPos(&pt);
HMENU subMenu = GetSubMenu(PluginConfig.g_hMenuContext, 0);
+ HWND hDlg = nullptr;
dat = nullptr;
if (((LPNMHDR)lParam)->idFrom == IDC_MSGTABS) {
- if ((iItem = GetTabItemFromMouse(hwndTab, &pt)) == -1)
- break;
-
- tci.mask = TCIF_PARAM;
- TabCtrl_GetItem(hwndTab, iItem, &tci);
- if (tci.lParam && IsWindow((HWND)tci.lParam))
- dat = (CTabBaseDlg*)GetWindowLongPtr((HWND)tci.lParam, GWLP_USERDATA);
+ hDlg = GetTabWindow(hwndTab, GetTabItemFromMouse(hwndTab, &pt));
+ if (hDlg && IsWindow(hDlg))
+ dat = (CTabBaseDlg*)GetWindowLongPtr(hDlg, GWLP_USERDATA);
}
// sent from a sidebar button (RMB click) instead of the tab control
else if (((LPNMHDR)lParam)->idFrom == 5000) {
@@ -859,10 +857,11 @@ panel_found: if (iSelection - IDM_CONTAINERMENU >= 0) {
ptrW tszName(db_get_wsa(0, CONTAINER_KEY, szIndex));
if (tszName != nullptr)
- SendMessage((HWND)tci.lParam, DM_CONTAINERSELECTED, 0, tszName);
+ SendMessage(hDlg, DM_CONTAINERSELECTED, 0, tszName);
}
return 1;
}
+
switch (iSelection) {
case ID_TABMENU_CLOSETAB:
if (fFromSidebar && dat)
@@ -890,12 +889,9 @@ panel_found: }
break;
case ID_TABMENU_ATTACHTOCONTAINER:
- if ((iItem = GetTabItemFromMouse(hwndTab, &pt)) != -1) {
- memset(&tci, 0, sizeof(tci));
- tci.mask = TCIF_PARAM;
- TabCtrl_GetItem(hwndTab, iItem, &tci);
- CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_SELECTCONTAINER), hwndDlg, SelectContainerDlgProc, (LPARAM)tci.lParam);
- }
+ hDlg = GetTabWindow(hwndTab, GetTabItemFromMouse(hwndTab, &pt));
+ if (hDlg)
+ CreateDialogParam(g_plugin.getInst(), MAKEINTRESOURCE(IDD_SELECTCONTAINER), hwndDlg, SelectContainerDlgProc, (LPARAM)hDlg);
break;
case ID_TABMENU_CONTAINEROPTIONS:
if (pContainer->hWndOptions == nullptr)
@@ -1273,13 +1269,11 @@ panel_found: }
if (iNewTab != iCurrent) {
- memset(&tci, 0, sizeof(tci));
- tci.mask = TCIF_PARAM;
- if (TabCtrl_GetItem(hwndTab, iNewTab, &tci)) {
+ if (HWND hDlg = GetTabWindow(hwndTab, iNewTab)) {
TabCtrl_SetCurSel(hwndTab, iNewTab);
ShowWindow(pContainer->m_hwndActive, SW_HIDE);
- pContainer->m_hwndActive = (HWND)tci.lParam;
- ShowWindow((HWND)tci.lParam, SW_SHOW);
+ pContainer->m_hwndActive = hDlg;
+ ShowWindow(hDlg, SW_SHOW);
SetFocus(pContainer->m_hwndActive);
}
}
@@ -1323,20 +1317,14 @@ panel_found: if (LOWORD(wParam) != WA_ACTIVE) {
pContainer->MenuBar->Cancel();
- int curItem = TabCtrl_GetCurSel(hwndTab);
- if (curItem >= 0) {
- tci.mask = TCIF_PARAM;
- if (TabCtrl_GetItem(hwndTab, curItem, &tci))
- SendMessage((HWND)tci.lParam, WM_ACTIVATE, WA_INACTIVE, 0);
- }
+ if (HWND hDlg = GetTabWindow(hwndTab, TabCtrl_GetCurSel(hwndTab)))
+ SendMessage(hDlg, WM_ACTIVATE, WA_INACTIVE, 0);
break;
}
case WM_MOUSEACTIVATE:
if (pContainer != nullptr) {
- TCITEM item;
- int curItem = 0;
- BOOL fTransAllowed = !bSkinned || PluginConfig.m_WinVerMajor >= 6;
+ BOOL fTransAllowed = !bSkinned || PluginConfig.m_WinVerMajor >= 6;
FlashContainer(pContainer, 0, 0);
pContainer->dwFlashingStarted = 0;
@@ -1366,13 +1354,11 @@ panel_found: pContainer->UpdateTitle(hContact);
}
}
- memset(&item, 0, sizeof(item));
- item.mask = TCIF_PARAM;
- if ((curItem = TabCtrl_GetCurSel(hwndTab)) >= 0)
- TabCtrl_GetItem(hwndTab, curItem, &item);
- if (pContainer->dwFlags & CNT_DEFERREDCONFIGURE && curItem >= 0) {
+
+ HWND hDlg = GetTabWindow(hwndTab, TabCtrl_GetCurSel(hwndTab));
+ if (pContainer->dwFlags & CNT_DEFERREDCONFIGURE && hDlg) {
pContainer->dwFlags &= ~CNT_DEFERREDCONFIGURE;
- pContainer->m_hwndActive = (HWND)item.lParam;
+ pContainer->m_hwndActive = hDlg;
SendMessage(hwndDlg, WM_SYSCOMMAND, SC_RESTORE, 0);
if (pContainer->m_hwndActive != nullptr && IsWindow(pContainer->m_hwndActive)) {
ShowWindow(pContainer->m_hwndActive, SW_SHOW);
@@ -1381,8 +1367,8 @@ panel_found: RedrawWindow(pContainer->m_hwndActive, nullptr, nullptr, RDW_INVALIDATE | RDW_ALLCHILDREN);
}
}
- else if (curItem >= 0)
- SendMessage((HWND)item.lParam, WM_ACTIVATE, WA_ACTIVE, 0);
+ else if (hDlg)
+ SendMessage(hDlg, WM_ACTIVATE, WA_ACTIVE, 0);
}
break;
@@ -1394,21 +1380,14 @@ panel_found: break;
case DM_CLOSETABATMOUSE:
- if ((iItem = GetTabItemFromMouse(hwndTab, (POINT*)lParam)) != -1) {
- HWND hwndCurrent = pContainer->m_hwndActive;
-
- TCITEM item = {};
- item.mask = TCIF_PARAM;
- TabCtrl_GetItem(hwndTab, iItem, &item);
- if (item.lParam) {
- if ((HWND)item.lParam != hwndCurrent) {
- pContainer->bDontSmartClose = TRUE;
- SendMessage((HWND)item.lParam, WM_CLOSE, 0, 1);
- RedrawWindow(hwndDlg, nullptr, nullptr, RDW_INVALIDATE);
- pContainer->bDontSmartClose = FALSE;
- }
- else SendMessage((HWND)item.lParam, WM_CLOSE, 0, 1);
- }
+ if (HWND hDlg = GetTabWindow(hwndTab, GetTabItemFromMouse(hwndTab, (POINT*)lParam))) {
+ if (hDlg != pContainer->m_hwndActive) {
+ pContainer->bDontSmartClose = TRUE;
+ SendMessage(hDlg, WM_CLOSE, 0, 1);
+ RedrawWindow(hwndDlg, nullptr, nullptr, RDW_INVALIDATE);
+ pContainer->bDontSmartClose = FALSE;
+ }
+ else SendMessage(hDlg, WM_CLOSE, 0, 1);
}
break;
@@ -1604,7 +1583,6 @@ panel_found: DWORD dwTimestamp;
{
int iItems = TabCtrl_GetItemCount(hwndTab);
- TCITEM item = {};
RECENTINFO *ri = (RECENTINFO *)lParam;
ri->iFirstIndex = ri->iMostRecent = -1;
@@ -1612,17 +1590,16 @@ panel_found: ri->hwndFirst = ri->hwndMostRecent = nullptr;
for (int i = 0; i < iItems; i++) {
- item.mask = TCIF_PARAM;
- TabCtrl_GetItem(hwndTab, i, &item);
- SendMessage((HWND)item.lParam, DM_QUERYLASTUNREAD, 0, (LPARAM)&dwTimestamp);
+ HWND hDlg = GetTabWindow(hwndTab, i);
+ SendMessage(hDlg, DM_QUERYLASTUNREAD, 0, (LPARAM)&dwTimestamp);
if (dwTimestamp > ri->dwMostRecent) {
ri->dwMostRecent = dwTimestamp;
ri->iMostRecent = i;
- ri->hwndMostRecent = (HWND)item.lParam;
+ ri->hwndMostRecent = hDlg;
if (ri->iFirstIndex == -1) {
ri->iFirstIndex = i;
ri->dwFirst = dwTimestamp;
- ri->hwndFirst = (HWND)item.lParam;
+ ri->hwndFirst = hDlg;
}
}
}
@@ -1802,12 +1779,10 @@ panel_found: if (lParam == 0 && TabCtrl_GetItemCount(hwndTab) > 0) {
int clients = TabCtrl_GetItemCount(hwndTab), iOpenJobs = 0;
- TCITEM item = {};
- item.mask = TCIF_PARAM;
for (int i = 0; i < clients; i++) {
- TabCtrl_GetItem(hwndTab, i, &item);
- if (item.lParam && IsWindow((HWND)item.lParam))
- SendMessage((HWND)item.lParam, DM_CHECKQUEUEFORCLOSE, 0, (LPARAM)&iOpenJobs);
+ HWND hDlg = GetTabWindow(hwndTab, i);
+ if (hDlg && IsWindow(hDlg))
+ SendMessage(hDlg, DM_CHECKQUEUEFORCLOSE, 0, (LPARAM)&iOpenJobs);
}
if (iOpenJobs && pContainer) {
if (pContainer->exFlags & CNT_EX_CLOSEWARN)
@@ -1827,16 +1802,13 @@ panel_found: wp.length = sizeof(wp);
if (GetWindowPlacement(hwndDlg, &wp) != 0) {
if (pContainer->isCloned && pContainer->hContactFrom != 0) {
- TCITEM item = {};
- item.mask = TCIF_PARAM;
- TabCtrl_GetItem(hwndTab, TabCtrl_GetCurSel(hwndTab), &item);
-
- SendMessage((HWND)item.lParam, DM_QUERYHCONTACT, 0, (LPARAM)&hContact);
+ HWND hDlg = GetTabWindow(hwndTab, TabCtrl_GetCurSel(hwndTab));
+ SendMessage(hDlg, DM_QUERYHCONTACT, 0, (LPARAM)&hContact);
db_set_b(hContact, SRMSGMOD_T, "splitmax", (BYTE)((wp.showCmd == SW_SHOWMAXIMIZED) ? 1 : 0));
for (int i = 0; i < TabCtrl_GetItemCount(hwndTab); i++) {
- if (TabCtrl_GetItem(hwndTab, i, &item)) {
- SendMessage((HWND)item.lParam, DM_QUERYHCONTACT, 0, (LPARAM)&hContact);
+ if (hDlg = GetTabWindow(hwndTab, i)) {
+ SendMessage(hDlg, DM_QUERYHCONTACT, 0, (LPARAM)&hContact);
db_set_dw(hContact, SRMSGMOD_T, "splitx", wp.rcNormalPosition.left);
db_set_dw(hContact, SRMSGMOD_T, "splity", wp.rcNormalPosition.top);
db_set_dw(hContact, SRMSGMOD_T, "splitwidth", wp.rcNormalPosition.right - wp.rcNormalPosition.left);
@@ -1862,12 +1834,11 @@ panel_found: // clear temp flags which should NEVER be saved...
if (pContainer->isCloned && pContainer->hContactFrom != 0) {
- TCITEM item = {};
- item.mask = TCIF_PARAM;
+
pContainer->dwFlags &= ~(CNT_DEFERREDCONFIGURE | CNT_CREATE_MINIMIZED | CNT_DEFERREDSIZEREQUEST | CNT_CREATE_CLONED);
for (int i = 0; i < TabCtrl_GetItemCount(hwndTab); i++) {
- if (TabCtrl_GetItem(hwndTab, i, &item)) {
- SendMessage((HWND)item.lParam, DM_QUERYHCONTACT, 0, (LPARAM)&hContact);
+ if (HWND hDlg = GetTabWindow(hwndTab, i)) {
+ SendMessage(hDlg, DM_QUERYHCONTACT, 0, (LPARAM)&hContact);
char szCName[40];
mir_snprintf(szCName, "%s_theme", CONTAINER_PREFIX);
|