diff options
-rw-r--r-- | plugins/TabSRMM/src/chat/window.cpp | 2 | ||||
-rw-r--r-- | plugins/TabSRMM/src/contactcache.cpp | 243 | ||||
-rw-r--r-- | plugins/TabSRMM/src/contactcache.h | 5 | ||||
-rw-r--r-- | plugins/TabSRMM/src/generic_msghandlers.cpp | 4 | ||||
-rw-r--r-- | plugins/TabSRMM/src/globals.cpp | 11 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msgdialog.cpp | 12 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msgs.cpp | 5 | ||||
-rw-r--r-- | plugins/TabSRMM/src/tabctrl.cpp | 37 |
8 files changed, 151 insertions, 168 deletions
diff --git a/plugins/TabSRMM/src/chat/window.cpp b/plugins/TabSRMM/src/chat/window.cpp index 0d725c26fa..066e83b176 100644 --- a/plugins/TabSRMM/src/chat/window.cpp +++ b/plugins/TabSRMM/src/chat/window.cpp @@ -173,7 +173,7 @@ void CChatRoomDlg::UpdateWindowState(UINT msg) if (m_bIsAutosizingInput && m_iInputAreaHeight == -1) { m_iInputAreaHeight = 0; - SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_REQUESTRESIZE, 0, 0); + m_message.SendMsg(EM_REQUESTRESIZE, 0, 0); } m_pPanel.dismissConfig(); diff --git a/plugins/TabSRMM/src/contactcache.cpp b/plugins/TabSRMM/src/contactcache.cpp index 7c0f5b003b..7d259557f4 100644 --- a/plugins/TabSRMM/src/contactcache.cpp +++ b/plugins/TabSRMM/src/contactcache.cpp @@ -53,10 +53,10 @@ CContactCache::CContactCache(MCONTACT hContact) m_isValid = false; } -/** - * 2nd part of the object initialization that must be callable during the - * object's lifetime (not only on construction). - */ +///////////////////////////////////////////////////////////////////////////////////////// +// 2nd part of the object initialization that must be callable during the +// object's lifetime (not only on construction). + void CContactCache::initPhaseTwo() { m_szAccount = 0; @@ -80,10 +80,10 @@ void CContactCache::initPhaseTwo() } } -/** - * reset meta contact information. Used when meta contacts are disabled - * on user's request. - */ +///////////////////////////////////////////////////////////////////////////////////////// +// reset meta contact information.Used when meta contacts are disabled +// on user's request. + void CContactCache::resetMeta() { m_isMeta = false; @@ -92,21 +92,21 @@ void CContactCache::resetMeta() initPhaseTwo(); } -/** - * if the contact has an open message window, close it. - * window procedure will use setWindowData() to reset m_hwnd to 0. - */ +///////////////////////////////////////////////////////////////////////////////////////// +// if the contact has an open message window, close it. +// window procedure will use setWindowData() to reset m_hwnd to 0. + void CContactCache::closeWindow() { - if (m_hwnd) - ::SendMessage(m_hwnd, WM_CLOSE, 1, 2); + if (m_dat) + ::SendMessage(m_dat->GetHwnd(), WM_CLOSE, 1, 2); } -/** - * update private copy of the nick name. Use contact list name cache - * - * @return bool: true if nick has changed. - */ +///////////////////////////////////////////////////////////////////////////////////////// +// update private copy of the nick name.Use contact list name cache +// +// @return bool: true if nick has changed. + bool CContactCache::updateNick() { bool fChanged = false; @@ -119,11 +119,11 @@ bool CContactCache::updateNick() return fChanged; } -/** - * update meta (subcontact and -protocol) status. This runs when the - * MC protocol fires one of its events OR when a relevant database value changes - * in the master contact. - */ +///////////////////////////////////////////////////////////////////////////////////////// +// update meta(subcontact and - protocol) status.This runs when the +// MC protocol fires one of its events OR when a relevant database value changes +// in the master contact. + void CContactCache::updateMeta() { if (m_isValid) { @@ -148,10 +148,10 @@ void CContactCache::updateMeta() } } -/** - * obtain the UIN. This is only maintained for open message windows - * it also run when the subcontact for a MC changes. - */ +///////////////////////////////////////////////////////////////////////////////////////// +// obtain the UIN.This is only maintained for open message windows +// it also run when the subcontact for a MC changes. + bool CContactCache::updateUIN() { m_szUIN[0] = 0; @@ -201,56 +201,46 @@ void CContactCache::allocStats() } } -/** - * set the window data for this contact. The window procedure of the message - * dialog will use this in WM_INITDIALOG and WM_DESTROY to tell the cache - * that a message window is open for this contact. - * - * @param hwnd: window handle - * @param dat: _MessageWindowData - window data structure - */ -void CContactCache::setWindowData(const HWND hwnd, CSrmmWindow *dat) +///////////////////////////////////////////////////////////////////////////////////////// +//set the window data for this contact.The window procedure of the message +// dialog will use this in WM_INITDIALOG and WM_DESTROY to tell the cache +// that a message window is open for this contact. +// +// @param dat: CSrmmWindow* - window data structure + +void CContactCache::setWindowData(CSrmmWindow *dat) { - m_hwnd = hwnd; m_dat = dat; - if (hwnd && dat && m_history == 0) - allocHistory(); - if (hwnd) + + if (dat) { + if (m_history == nullptr) + allocHistory(); updateStatusMsg(); + } else { - /* release memory - not needed when window isn't open */ - if (m_szStatusMsg) { - mir_free(m_szStatusMsg); - m_szStatusMsg = 0; - } - if (m_ListeningInfo) { - mir_free(m_ListeningInfo); - m_ListeningInfo = 0; - } - if (m_xStatusMsg) { - mir_free(m_xStatusMsg); - m_xStatusMsg = 0; - } + // release memory - not needed when window isn't open + replaceStrW(m_szStatusMsg, nullptr); + replaceStrW(m_ListeningInfo, nullptr); + replaceStrW(m_xStatusMsg, nullptr); } } -/** - * saves message to the input history. - * it's using streamout in UTF8 format - no unicode "issues" and all RTF formatting is saved to the history. - */ +///////////////////////////////////////////////////////////////////////////////////////// +// saves message to the input history. +// it's using streamout in UTF8 format - no unicode "issues" and all RTF formatting is saved to the history. + void CContactCache::saveHistory(WPARAM wParam, LPARAM) { - int oldTop = 0; - - if (m_hwnd == 0 || m_dat == 0) + if (m_dat == nullptr) return; + int oldTop = 0; if (wParam) { oldTop = m_iHistoryTop; m_iHistoryTop = (int)wParam; } - char *szFromStream = ::Message_GetFromStream(GetDlgItem(m_hwnd, IDC_MESSAGE), SF_RTFNOOBJS | SFF_PLAINRTF | SF_NCRFORNONASCII); + char *szFromStream = ::Message_GetFromStream(GetDlgItem(m_dat->GetHwnd(), IDC_MESSAGE), SF_RTFNOOBJS | SFF_PLAINRTF | SF_NCRFORNONASCII); if (szFromStream != NULL) { size_t iLength = 0, iStreamLength = 0; iLength = iStreamLength = (mir_strlen(szFromStream) + 1); @@ -290,17 +280,17 @@ void CContactCache::saveHistory(WPARAM wParam, LPARAM) m_iHistoryTop = oldTop; } -/** - * handle the input history scrolling for the message input area - * @param wParam: VK_ keyboard code (VK_UP or VK_DOWN) - */ +///////////////////////////////////////////////////////////////////////////////////////// +// handle the input history scrolling for the message input area +// @param wParam: VK_ keyboard code (VK_UP or VK_DOWN) + void CContactCache::inputHistoryEvent(WPARAM wParam) { - if (m_hwnd == 0 || m_dat == 0) + if (m_dat == nullptr) return; if (m_history != NULL && m_history[0].szText != NULL) { // at least one entry needs to be alloced, otherwise we get a nice infinite loop ;) - HWND hwndEdit = ::GetDlgItem(m_hwnd, IDC_MESSAGE); + HWND hwndEdit = ::GetDlgItem(m_dat->GetHwnd(), IDC_MESSAGE); SETTEXTEX stx = { ST_DEFAULT, CP_UTF8 }; if (m_dat->m_dwFlags & MWF_NEEDHISTORYSAVE) { @@ -335,19 +325,19 @@ void CContactCache::inputHistoryEvent(WPARAM wParam) } else ::SetWindowText(hwndEdit, L""); } - ::SendMessage(m_hwnd, WM_COMMAND, MAKEWPARAM(::GetDlgCtrlID(hwndEdit), EN_CHANGE), (LPARAM)hwndEdit); + ::SendMessage(m_dat->GetHwnd(), WM_COMMAND, MAKEWPARAM(::GetDlgCtrlID(hwndEdit), EN_CHANGE), (LPARAM)hwndEdit); m_dat->m_dwFlags &= ~MWF_NEEDHISTORYSAVE; } } -/** - * allocate the input history (on-demand, when it is requested by - * opening a message window for this contact). - * - * note: it allocs historysize + 1 elements, because the + 1 is used - * for the temporary buffer which saves the current input line when - * using input history scrolling. - */ +///////////////////////////////////////////////////////////////////////////////////////// +// allocate the input history(on - demand, when it is requested by +// opening a message window for this contact). +// +// note: it allocs historysize + 1 elements, because the + 1 is used +// for the temporary buffer which saves the current input line when +// using input history scrolling. + void CContactCache::allocHistory() { m_iHistorySize = M.GetByte("historysize", 15); @@ -362,9 +352,9 @@ void CContactCache::allocHistory() m_history[m_iHistorySize].lLen = HISTORY_INITIAL_ALLOCSIZE; } -/** - * release additional memory resources - */ +///////////////////////////////////////////////////////////////////////////////////////// +// release additional memory resources + void CContactCache::releaseAlloced() { if (m_stats) { @@ -384,37 +374,37 @@ void CContactCache::releaseAlloced() m_szStatusMsg = NULL; } -/** - * when a contact is deleted, mark it as invalid in the cache and release - * all memory it has allocated. - */ +///////////////////////////////////////////////////////////////////////////////////////// +// when a contact is deleted, mark it as invalid in the cache and release +// all memory it has allocated. + void CContactCache::deletedHandler() { cc = &ccInvalid; m_isValid = false; - if (m_hwnd) - ::SendMessage(m_hwnd, WM_CLOSE, 1, 2); + if (m_dat) + ::SendMessage(m_dat->GetHwnd(), WM_CLOSE, 1, 2); releaseAlloced(); m_hContact = INVALID_CONTACT_ID; } -/** - * udpate favorite or recent state. runs when user manually adds - * or removes a user from that list or when database setting is - * changed from elsewhere - */ +///////////////////////////////////////////////////////////////////////////////////////// +// udpate favorite or recent state.runs when user manually adds +// or removes a user from that list or when database setting is +// changed from elsewhere + void CContactCache::updateFavorite() { m_isFavorite = M.GetBool(m_hContact, "isFavorite", false); m_isRecent = M.GetDword(m_hContact, "isRecent", 0) ? true : false; } -/** - * update all or only the given status message information from the database - * - * @param szKey: char* database key name or 0 to reload all messages - */ +///////////////////////////////////////////////////////////////////////////////////////// +// update all or only the given status message information from the database +// +// @param szKey: char* database key name or 0 to reload all messages + void CContactCache::updateStatusMsg(const char *szKey) { if (!m_isValid) @@ -449,14 +439,13 @@ void CContactCache::updateStatusMsg(const char *szKey) m_xStatus = db_get_b(hContact, cc->szProto, "XStatusId", 0); } -/** - * retrieve contact cache entry for the given contact. It _never_ returns zero, for a hContact - * 0, it retrieves a dummy object. - * Non-existing cache entries are created on demand. - * - * @param hContact: contact handle - * @return CContactCache* pointer to the cache entry for this contact - */ +///////////////////////////////////////////////////////////////////////////////////////// +// retrieve contact cache entry for the given contact.It _never_ returns zero, for a hContact +// 0, it retrieves a dummy object. +// Non-existing cache entries are created on demand. +// +// @param hContact: contact handle +// @return CContactCache* pointer to the cache entry for this contact CContactCache* CContactCache::getContactCache(MCONTACT hContact) { @@ -468,13 +457,13 @@ CContactCache* CContactCache::getContactCache(MCONTACT hContact) return cc; } -/** - * when the state of the meta contacts protocol changes from enabled to disabled - * (or vice versa), this updates the contact cache - * - * it is ONLY called from the DBSettingChanged() event handler when the relevant - * database value is touched. - */ +///////////////////////////////////////////////////////////////////////////////////////// +// when the state of the meta contacts protocol changes from enabled to disabled +// (or vice versa), this updates the contact cache +// +// it is ONLY called from the DBSettingChanged() event handler when the relevant +// database value is touched. + int CContactCache::cacheUpdateMetaChanged(WPARAM bMetaEnabled, LPARAM) { for (int i = 0; i < arContacts.getCount(); i++) { @@ -495,12 +484,12 @@ int CContactCache::cacheUpdateMetaChanged(WPARAM bMetaEnabled, LPARAM) return 0; } -/** - * normalize the status message with proper cr/lf sequences. - * @param src wchar_t*: original status message - * @param fStripAll bool: strip all cr/lf sequences and replace them with spaces (use for title bar) - * @return wchar_t*: converted status message. CALLER is responsible to mir_free it, MUST use mir_free() - */ +///////////////////////////////////////////////////////////////////////////////////////// +// normalize the status message with proper cr / lf sequences. +// @param src wchar_t*: original status message +// @param fStripAll bool: strip all cr/lf sequences and replace them with spaces (use for title bar) +// @return wchar_t*: converted status message. CALLER is responsible to mir_free it, MUST use mir_free() + wchar_t* CContactCache::getNormalizedStatusMsg(const wchar_t *src, bool fStripAll) { if (src == 0 || mir_wstrlen(src) < 2) @@ -525,12 +514,12 @@ wchar_t* CContactCache::getNormalizedStatusMsg(const wchar_t *src, bool fStripAl return mir_wstrndup(dest, dest.GetLength()); } -/** - * retrieve the tab/title icon for the corresponding session. - */ +///////////////////////////////////////////////////////////////////////////////////////// +// retrieve the tab / title icon for the corresponding session. + HICON CContactCache::getIcon(int &iSize) const { - if (!m_dat || !m_hwnd) + if (!m_dat) return Skin_LoadProtoIcon(cc->szProto, getStatus()); if (m_dat->m_dwFlags & MWF_ERRORSTATE) @@ -557,17 +546,17 @@ size_t CContactCache::getMaxMessageLength() m_nMax = CallProtoService(szProto, PS_GETCAPS, PFLAG_MAXLENOFMESSAGE, hContact); if (m_nMax) { if (M.GetByte("autosplit", 0)) { - if (m_hwnd) - ::SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_EXLIMITTEXT, 0, 20000); + if (m_dat) + ::SendDlgItemMessage(m_dat->GetHwnd(), IDC_MESSAGE, EM_EXLIMITTEXT, 0, 20000); } else { - if (m_hwnd) - ::SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_EXLIMITTEXT, 0, (LPARAM)m_nMax); + if (m_dat) + ::SendDlgItemMessage(m_dat->GetHwnd(), IDC_MESSAGE, EM_EXLIMITTEXT, 0, (LPARAM)m_nMax); } } else { - if (m_hwnd) - ::SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_EXLIMITTEXT, 0, 20000); + if (m_dat) + ::SendDlgItemMessage(m_dat->GetHwnd(), IDC_MESSAGE, EM_EXLIMITTEXT, 0, 20000); m_nMax = 20000; } } diff --git a/plugins/TabSRMM/src/contactcache.h b/plugins/TabSRMM/src/contactcache.h index d1f7e2ddb2..8dbe60e8d6 100644 --- a/plugins/TabSRMM/src/contactcache.h +++ b/plugins/TabSRMM/src/contactcache.h @@ -84,8 +84,6 @@ struct CContactCache : public MZeroedObject __forceinline LPCWSTR getXStatusMsg() const { return m_xStatusMsg; }
__forceinline LPCWSTR getListeningInfo() const { return m_ListeningInfo; }
__forceinline BYTE getXStatusId() const { return m_xStatus; }
- __forceinline HWND getWindowData(CSrmmWindow* &dat) const { dat = m_dat; return m_hwnd; }
- __forceinline HWND getHwnd() const { return m_hwnd; }
__forceinline DWORD getSessionStart() const { return m_stats->started; }
__forceinline int getSessionMsgCount() const { return (int)m_stats->messageCount; }
@@ -107,7 +105,7 @@ struct CContactCache : public MZeroedObject void updateMeta();
bool updateUIN();
void updateStatusMsg(const char *szKey = 0);
- void setWindowData(const HWND hwnd = 0, CSrmmWindow *dat = 0);
+ void setWindowData(CSrmmWindow *dat = 0);
void resetMeta();
void closeWindow();
void deletedHandler();
@@ -142,7 +140,6 @@ private: bool m_isValid;
bool m_isFavorite;
bool m_isRecent;
- HWND m_hwnd;
int m_nMax;
int m_iHistoryCurrent, m_iHistoryTop, m_iHistorySize;
diff --git a/plugins/TabSRMM/src/generic_msghandlers.cpp b/plugins/TabSRMM/src/generic_msghandlers.cpp index 805a331c97..baadd99bf8 100644 --- a/plugins/TabSRMM/src/generic_msghandlers.cpp +++ b/plugins/TabSRMM/src/generic_msghandlers.cpp @@ -183,7 +183,7 @@ LRESULT CTabBaseDlg::DM_MsgWindowCmdHandler(UINT cmd, WPARAM wParam, LPARAM lPar memset(&cfOld, 0, sizeof(CHARFORMAT2)); cfOld.cbSize = cf.cbSize = sizeof(CHARFORMAT2); cfOld.dwMask = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_STRIKEOUT; - SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cfOld); + m_message.SendMsg(EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cfOld); BOOL isBold = (cfOld.dwEffects & CFE_BOLD) && (cfOld.dwMask & CFM_BOLD); BOOL isItalic = (cfOld.dwEffects & CFE_ITALIC) && (cfOld.dwMask & CFM_ITALIC); BOOL isUnderline = (cfOld.dwEffects & CFE_UNDERLINE) && (cfOld.dwMask & CFM_UNDERLINE); @@ -218,7 +218,7 @@ LRESULT CTabBaseDlg::DM_MsgWindowCmdHandler(UINT cmd, WPARAM wParam, LPARAM lPar cf.dwMask = CFM_STRIKEOUT; CheckDlgButton(m_hwnd, IDC_FONTSTRIKEOUT, !isStrikeout ? BST_CHECKED : BST_UNCHECKED); } - SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); + m_message.SendMsg(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); } break; diff --git a/plugins/TabSRMM/src/globals.cpp b/plugins/TabSRMM/src/globals.cpp index 4260385af8..21c8880da1 100644 --- a/plugins/TabSRMM/src/globals.cpp +++ b/plugins/TabSRMM/src/globals.cpp @@ -415,7 +415,7 @@ int CGlobals::DBSettingChanged(WPARAM hContact, LPARAM lParam) dat->m_nTypeSecs = 0;
dat->m_bShowTyping = 0;
dat->m_wszStatusBar[0] = 0;
- PostMessage(c->getHwnd(), DM_UPDATELASTMESSAGE, 0, 0);
+ PostMessage(dat->GetHwnd(), DM_UPDATELASTMESSAGE, 0, 0);
}
}
PostMessage(PluginConfig.g_hwndHotkeyHandler, DM_LOGSTATUSCHANGE, MAKELONG(c->getStatus(), c->getOldStatus()), (LPARAM)c);
@@ -447,10 +447,11 @@ int CGlobals::MetaContactEvent(WPARAM hContact, LPARAM) if (hContact) {
CContactCache *c = CContactCache::getContactCache(hContact);
c->updateMeta();
- if (c->getHwnd()) {
- ::PostMessage(c->getHwnd(), DM_UPDATETITLE, 0, 1);
- ::PostMessage(c->getHwnd(), DM_UPDATEPICLAYOUT, 0, 0);
- InvalidateRect(c->getHwnd(), 0, TRUE); // force redraw
+ CTabBaseDlg *pDlg = c->getDat();
+ if (pDlg) {
+ ::PostMessage(pDlg->GetHwnd(), DM_UPDATETITLE, 0, 1);
+ ::PostMessage(pDlg->GetHwnd(), DM_UPDATEPICLAYOUT, 0, 0);
+ InvalidateRect(pDlg->GetHwnd(), 0, TRUE); // force redraw
}
}
return 0;
diff --git a/plugins/TabSRMM/src/msgdialog.cpp b/plugins/TabSRMM/src/msgdialog.cpp index 1fe9cb4fb5..2a6879c258 100644 --- a/plugins/TabSRMM/src/msgdialog.cpp +++ b/plugins/TabSRMM/src/msgdialog.cpp @@ -265,7 +265,7 @@ void CSrmmWindow::MsgWindowUpdateState(UINT msg) if (m_bIsAutosizingInput && m_iInputAreaHeight == -1) {
m_iInputAreaHeight = 0;
- SendDlgItemMessage(m_hwnd, IDC_MESSAGE, EM_REQUESTRESIZE, 0, 0);
+ m_message.SendMsg(EM_REQUESTRESIZE, 0, 0);
}
if (m_pWnd)
@@ -434,7 +434,6 @@ static LRESULT CALLBACK MessageLogSubclassProc(HWND hwnd, UINT msg, WPARAM wPara HWND hwndParent = GetParent(hwnd);
CSrmmWindow *mwdat = (CSrmmWindow*)GetWindowLongPtr(hwndParent, GWLP_USERDATA);
bool isCtrl, isShift, isAlt;
- mwdat->KbdState(isShift, isCtrl, isAlt);
switch (msg) {
case WM_KILLFOCUS:
@@ -449,6 +448,7 @@ static LRESULT CALLBACK MessageLogSubclassProc(HWND hwnd, UINT msg, WPARAM wPara break;
case WM_CHAR:
+ mwdat->KbdState(isShift, isCtrl, isAlt);
if (wParam == 0x03 && isCtrl) // Ctrl+C
return Utils::WMCopyHandler(hwnd, MessageLogSubclassProc, msg, wParam, lParam);
if (wParam == 0x11 && isCtrl)
@@ -478,6 +478,7 @@ static LRESULT CALLBACK MessageLogSubclassProc(HWND hwnd, UINT msg, WPARAM wPara break;
case WM_KEYDOWN:
+ mwdat->KbdState(isShift, isCtrl, isAlt);
if (wParam == VK_INSERT && isCtrl)
return Utils::WMCopyHandler(hwnd, MessageLogSubclassProc, msg, wParam, lParam);
break;
@@ -922,11 +923,6 @@ LRESULT CALLBACK SplitterSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM CSrmmWindow::CSrmmWindow()
: CTabBaseDlg(IDD_MSGSPLITNEW)
{
- m_pLog = &m_log;
- m_pEntry = &m_message;
- m_autoClose = 0;
-
- m_dwFlags = MWF_INITMODE;
m_bType = SESSIONTYPE_IM;
}
@@ -967,7 +963,7 @@ void CSrmmWindow::OnInitDialog() m_cache = CContactCache::getContactCache(m_hContact);
m_cache->updateNick();
- m_cache->setWindowData(m_hwnd, this);
+ m_cache->setWindowData(this);
M.AddWindow(m_hwnd, m_hContact);
BroadCastContainer(m_pContainer, DM_REFRESHTABINDEX, 0, 0);
CProxyWindow::add(this);
diff --git a/plugins/TabSRMM/src/msgs.cpp b/plugins/TabSRMM/src/msgs.cpp index 20921cdf39..31bc0d300f 100644 --- a/plugins/TabSRMM/src/msgs.cpp +++ b/plugins/TabSRMM/src/msgs.cpp @@ -122,12 +122,13 @@ CTabBaseDlg::CTabBaseDlg(int iResource) : CSrmmBaseDialog(g_hInst, iResource),
m_log(this, IDC_LOG),
m_message(this, IDC_MESSAGE),
- m_pPanel(this)
+ m_pPanel(this),
+ m_dwFlags(MWF_INITMODE)
{
m_pLog = &m_log;
m_pEntry = &m_message;
- m_autoClose = 0;
+ m_autoClose = CLOSE_ON_CANCEL;
m_forceResizable = true;
}
diff --git a/plugins/TabSRMM/src/tabctrl.cpp b/plugins/TabSRMM/src/tabctrl.cpp index f42d2c4d6a..f9da0a08a4 100644 --- a/plugins/TabSRMM/src/tabctrl.cpp +++ b/plugins/TabSRMM/src/tabctrl.cpp @@ -592,25 +592,19 @@ static void PaintWorker(HWND hwnd, TabControlData *tabdat) if (tabdat == NULL || tabdat->pContainer == NULL)
return;
- PAINTSTRUCT ps;
- HDC hdc;
- RECT rectTemp, rctPage, rctActive, rcItem, rctClip, rctOrig;
- RECT rectUpDn = { 0, 0, 0, 0 };
- int nCount = TabCtrl_GetItemCount(hwnd), i;
- int iActive, hotItem;
- POINT pt;
- DWORD dwStyle = tabdat->dwStyle;
- UINT uiFlags = 1;
- UINT uiBottom = 0;
- bool isAero = M.isAero();
- HANDLE hpb = 0;
- BOOL bClassicDraw = !isAero && (tabdat->m_VisualStyles == FALSE || CSkin::m_skinEnabled);
-
if (GetUpdateRect(hwnd, NULL, TRUE) == 0)
return;
+ RECT rectTemp, rctPage, rctActive, rcItem, rctClip, rctOrig;
+ RECT rectUpDn = { 0, 0, 0, 0 };
+ int nCount = TabCtrl_GetItemCount(hwnd), i;
+ DWORD dwStyle = tabdat->dwStyle;
+ bool isAero = M.isAero();
+ BOOL bClassicDraw = !isAero && (tabdat->m_VisualStyles == FALSE || CSkin::m_skinEnabled);
+
+ POINT pt;
GetCursorPos(&pt);
- hotItem = GetTabItemFromMouse(hwnd, &pt);
+ int hotItem = GetTabItemFromMouse(hwnd, &pt);
if (tabdat->iHoveredTabIndex != hotItem)
InvalidateRect(hwnd, NULL, FALSE);
tabdat->iHoveredTabIndex = hotItem;
@@ -634,6 +628,7 @@ static void PaintWorker(HWND hwnd, TabControlData *tabdat) }
else tabdat->fAeroTabs = FALSE;
+ PAINTSTRUCT ps;
HDC hdcreal = BeginPaint(hwnd, &ps);
// switchbar is active, don't paint a single pixel, the tab control won't be visible at all
@@ -648,18 +643,21 @@ static void PaintWorker(HWND hwnd, TabControlData *tabdat) GetClientRect(hwnd, &rctPage);
rctOrig = rctPage;
- iActive = TabCtrl_GetCurSel(hwnd);
+ int iActive = TabCtrl_GetCurSel(hwnd);
TabCtrl_GetItemRect(hwnd, iActive, &rctActive);
int cx = rctPage.right - rctPage.left;
int cy = rctPage.bottom - rctPage.top;
// draw everything to a memory dc to avoid flickering
+ HDC hdc;
+ HANDLE hpb;
HBITMAP bmpMem, bmpOld;
if (CMimAPI::m_haveBufferedPaint) {
hpb = tabdat->hbp = CSkin::InitiateBufferedPaint(hdcreal, rctPage, hdc);
bmpMem = bmpOld = 0;
}
else {
+ hpb = nullptr;
hdc = CreateCompatibleDC(hdcreal);
bmpMem = tabdat->fAeroTabs ? CSkin::CreateAeroCompatibleBitmap(rctPage, hdcreal) : CreateCompatibleBitmap(hdcreal, cx, cy);
bmpOld = (HBITMAP)SelectObject(hdc, bmpMem);
@@ -673,6 +671,7 @@ static void PaintWorker(HWND hwnd, TabControlData *tabdat) else
CSkin::FillBack(hdc, &rctPage);
+ UINT uiBottom;
if (dwStyle & TCS_BUTTONS) {
RECT rc1;
TabCtrl_GetItemRect(hwnd, nCount - 1, &rc1);
@@ -710,7 +709,9 @@ static void PaintWorker(HWND hwnd, TabControlData *tabdat) ExcludeClipRect(hdc, rctClip.left, rctClip.top, rctClip.right, rctClip.bottom);
else
memset(&rctClip, 0, sizeof(RECT));
+
if ((!bClassicDraw || PluginConfig.m_fillColor) && IntersectRect(&rectTemp, &rctPage, &ps.rcPaint) && !CSkin::m_skinEnabled) {
+ UINT uiFlags = 1;
RECT rcClient = rctPage;
if (dwStyle & TCS_BOTTOM) {
rcClient.bottom = rctPage.bottom;
@@ -835,8 +836,6 @@ page_done: FillRect(hdc, &rcPage, CSkin::m_BrushBack);
}
- uiFlags = 0;
-
// figure out hottracked item (if any)
if (tabdat->bRefreshWithoutClip)
goto skip_tabs;
@@ -857,7 +856,7 @@ page_done: if (IntersectRect(&rectTemp, &rcItem, &ps.rcPaint) || bClassicDraw) {
int nHint = 0;
if (!bClassicDraw && !(dwStyle & TCS_BUTTONS)) {
- DrawThemesXpTabItem(hdc, &rcItem, uiFlags | uiBottom | (i == hotItem ? 4 : 0), tabdat, dat);
+ DrawThemesXpTabItem(hdc, &rcItem, uiBottom | (i == hotItem ? 4 : 0), tabdat, dat);
DrawItem(tabdat, hdc, &rcItem, nHint | (i == hotItem ? HINT_HOTTRACK : 0), i, dat);
}
else {
|