diff options
-rw-r--r-- | include/m_chat_int.h | 3 | ||||
-rw-r--r-- | plugins/Scriver/src/chat/window.cpp | 45 | ||||
-rw-r--r-- | plugins/Scriver/src/msgdialog.cpp | 16 | ||||
-rw-r--r-- | plugins/Scriver/src/msgs.h | 19 | ||||
-rw-r--r-- | plugins/Scriver/src/utils.cpp | 4 | ||||
-rw-r--r-- | plugins/Scriver/src/utils.h | 1 | ||||
-rw-r--r-- | plugins/TabSRMM/src/chat/log.cpp | 2 | ||||
-rw-r--r-- | plugins/TabSRMM/src/chat/window.cpp | 21 | ||||
-rw-r--r-- | plugins/TabSRMM/src/infopanel.cpp | 4 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msgdialog.cpp | 33 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msgdlgutils.cpp | 51 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msgs.cpp | 4 | ||||
-rw-r--r-- | plugins/TabSRMM/src/msgs.h | 12 | ||||
-rw-r--r-- | plugins/TabSRMM/src/tabctrl.cpp | 2 | ||||
-rw-r--r-- | plugins/TabSRMM/src/taskbar.cpp | 103 | ||||
-rw-r--r-- | plugins/TabSRMM/src/taskbar.h | 8 | ||||
-rw-r--r-- | src/core/stdmsg/src/chat_window.cpp | 37 | ||||
-rw-r--r-- | src/core/stdmsg/src/msgdialog.cpp | 4 | ||||
-rw-r--r-- | src/core/stdmsg/src/msgs.h | 1 | ||||
-rw-r--r-- | src/mir_app/src/srmm_base.cpp | 5 |
20 files changed, 197 insertions, 178 deletions
diff --git a/include/m_chat_int.h b/include/m_chat_int.h index 34dd52cdb9..d8803f659b 100644 --- a/include/m_chat_int.h +++ b/include/m_chat_int.h @@ -425,6 +425,9 @@ protected: protected:
CCtrlEdit *m_pLog, *m_pEntry;
+
+public:
+ MCONTACT m_hContact;
};
#endif // M_CHAT_INT_H__
diff --git a/plugins/Scriver/src/chat/window.cpp b/plugins/Scriver/src/chat/window.cpp index 982cbd02cf..3655e3c4b7 100644 --- a/plugins/Scriver/src/chat/window.cpp +++ b/plugins/Scriver/src/chat/window.cpp @@ -895,7 +895,7 @@ class CChatRoomDlg : public CSrmmBaseDialog hdwp = DeferWindowPos(hdwp, GetDlgItem(m_hwnd, IDC_MESSAGE), 0, 1, h - m_si->iSplitterY + SPLITTER_HEIGHT, w - 2, m_si->iSplitterY - SPLITTER_HEIGHT - 1, SWP_NOZORDER);
EndDeferWindowPos(hdwp);
- SetButtonsPos(m_hwnd, m_si->hContact, bToolbar);
+ SetButtonsPos(m_hwnd, m_hContact, bToolbar);
if (m_si->m_hwndIeview != NULL) {
IEVIEWWINDOW ieWindow;
@@ -926,11 +926,12 @@ public: m_pLog = &m_log;
m_pEntry = &m_message;
m_autoClose = 0;
+ m_hContact = si->hContact;
}
virtual void OnInitDialog() override
{
- NotifyLocalWinEvent(m_si->hContact, m_hwnd, MSG_WINDOW_EVT_OPENING);
+ NotifyLocalWinEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_OPENING);
SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LONG_PTR)m_si);
@@ -975,7 +976,7 @@ public: IEVIEWEVENT iee = { sizeof(iee) };
iee.iType = IEE_CLEAR_LOG;
iee.hwnd = m_si->m_hwndIeview;
- iee.hContact = m_si->hContact;
+ iee.hContact = m_hContact;
iee.pszProto = m_si->pszModule;
CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&iee);
}
@@ -986,14 +987,14 @@ public: SendMessage(m_hwnd, GC_UPDATESTATUSBAR, 0, 0);
SendMessage(m_hwnd, DM_UPDATETITLEBAR, 0, 0);
- SendMessage(m_hwndParent, CM_ADDCHILD, (WPARAM)m_hwnd, m_si->hContact);
+ SendMessage(m_hwndParent, CM_ADDCHILD, (WPARAM)m_hwnd, m_hContact);
PostMessage(m_hwnd, GC_UPDATENICKLIST, 0, 0);
- NotifyLocalWinEvent(m_si->hContact, m_hwnd, MSG_WINDOW_EVT_OPEN);
+ NotifyLocalWinEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_OPEN);
}
virtual void OnDestroy() override
{
- NotifyLocalWinEvent(m_si->hContact, m_hwnd, MSG_WINDOW_EVT_CLOSING);
+ NotifyLocalWinEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_CLOSING);
m_si->hWnd = NULL;
SetWindowLongPtr(m_hwnd, GWLP_USERDATA, 0);
@@ -1007,7 +1008,7 @@ public: CallService(MS_IEVIEW_WINDOW, 0, (LPARAM)&ieWindow);
}
- NotifyLocalWinEvent(m_si->hContact, m_hwnd, MSG_WINDOW_EVT_CLOSE);
+ NotifyLocalWinEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_CLOSE);
}
virtual INT_PTR DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) override
@@ -1115,7 +1116,7 @@ public: StatusIconData sid = { sizeof(sid) };
sid.szModule = SRMMMOD;
- Srmm_ModifyIcon(m_si->hContact, &sid);
+ Srmm_ModifyIcon(m_hContact, &sid);
}
break;
@@ -1213,14 +1214,14 @@ public: case DM_ACTIVATE:
if (m_si->wState & STATE_TALK) {
m_si->wState &= ~STATE_TALK;
- db_set_w(m_si->hContact, m_si->pszModule, "ApparentMode", 0);
+ db_set_w(m_hContact, m_si->pszModule, "ApparentMode", 0);
}
if (m_si->wState & GC_EVENT_HIGHLIGHT) {
m_si->wState &= ~GC_EVENT_HIGHLIGHT;
- if (pcli->pfnGetEvent(m_si->hContact, 0))
- pcli->pfnRemoveEvent(m_si->hContact, GC_FAKE_EVENT);
+ if (pcli->pfnGetEvent(m_hContact, 0))
+ pcli->pfnRemoveEvent(m_hContact, GC_FAKE_EVENT);
}
SendMessage(m_hwnd, GC_FIXTABICONS, 0, 0);
@@ -1342,10 +1343,10 @@ public: return TRUE;
case SESSION_TERMINATE:
- if (pcli->pfnGetEvent(m_si->hContact, 0))
- pcli->pfnRemoveEvent(m_si->hContact, GC_FAKE_EVENT);
+ if (pcli->pfnGetEvent(m_hContact, 0))
+ pcli->pfnRemoveEvent(m_hContact, GC_FAKE_EVENT);
m_si->wState &= ~STATE_TALK;
- db_set_w(m_si->hContact, m_si->pszModule, "ApparentMode", 0);
+ db_set_w(m_hContact, m_si->pszModule, "ApparentMode", 0);
SendMessage(m_hwnd, GC_CLOSEWINDOW, 0, 0);
return TRUE;
@@ -1461,10 +1462,10 @@ public: pci->SetActiveSession(m_si->ptszID, m_si->pszModule);
- if (db_get_w(m_si->hContact, m_si->pszModule, "ApparentMode", 0) != 0)
- db_set_w(m_si->hContact, m_si->pszModule, "ApparentMode", 0);
- if (pcli->pfnGetEvent(m_si->hContact, 0))
- pcli->pfnRemoveEvent(m_si->hContact, GC_FAKE_EVENT);
+ if (db_get_w(m_hContact, m_si->pszModule, "ApparentMode", 0) != 0)
+ db_set_w(m_hContact, m_si->pszModule, "ApparentMode", 0);
+ if (pcli->pfnGetEvent(m_hContact, 0))
+ pcli->pfnRemoveEvent(m_hContact, GC_FAKE_EVENT);
break;
case WM_NOTIFY:
@@ -1518,12 +1519,12 @@ public: break;
case WM_COMMAND:
- if (!lParam && Clist_MenuProcessCommand(LOWORD(wParam), MPCF_CONTACTMENU, m_si->hContact))
+ if (!lParam && Clist_MenuProcessCommand(LOWORD(wParam), MPCF_CONTACTMENU, m_hContact))
break;
if (HIWORD(wParam) == BN_CLICKED)
if (LOWORD(wParam) >= MIN_CBUTTONID && LOWORD(wParam) <= MAX_CBUTTONID) {
- Srmm_ClickToolbarIcon(m_si->hContact, LOWORD(wParam), GetDlgItem(m_hwnd, LOWORD(wParam)), 0);
+ Srmm_ClickToolbarIcon(m_hContact, LOWORD(wParam), GetDlgItem(m_hwnd, LOWORD(wParam)), 0);
break;
}
@@ -1771,12 +1772,12 @@ public: return TRUE;
case DM_GETCONTEXTMENU:
- SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, (LPARAM)Menu_BuildContactMenu(m_si->hContact));
+ SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, (LPARAM)Menu_BuildContactMenu(m_hContact));
return TRUE;
case WM_CONTEXTMENU:
if (m_hwndParent == (HWND)wParam) {
- HMENU hMenu = Menu_BuildContactMenu(m_si->hContact);
+ HMENU hMenu = Menu_BuildContactMenu(m_hContact);
GetCursorPos(&pt);
TrackPopupMenu(hMenu, 0, pt.x, pt.y, 0, m_hwnd, NULL);
DestroyMenu(hMenu);
diff --git a/plugins/Scriver/src/msgdialog.cpp b/plugins/Scriver/src/msgdialog.cpp index 0d6440c9eb..0b8fb28a86 100644 --- a/plugins/Scriver/src/msgdialog.cpp +++ b/plugins/Scriver/src/msgdialog.cpp @@ -30,11 +30,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. extern HCURSOR hCurSplitNS, hCurSplitWE, hCurHyperlinkHand, hDragCursor;
extern HANDLE hHookWinEvt;
-static wchar_t* GetIEViewSelection(CSrmmWindow *dat)
+wchar_t* CSrmmWindow::GetIEViewSelection()
{
IEVIEWEVENT evt = { sizeof(evt) };
- evt.hwnd = dat->m_hwndIeview;
- evt.hContact = dat->m_hContact;
+ evt.hwnd = m_hwndIeview;
+ evt.hContact = m_hContact;
evt.iType = IEE_GET_SELECTION;
return mir_wstrdup((wchar_t*)CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&evt));
}
@@ -636,11 +636,11 @@ CSrmmWindow::CSrmmWindow(MCONTACT hContact, bool bIncoming, const char *szInitia : CSrmmBaseDialog(g_hInst, IDD_MSG),
m_log(this, IDC_LOG),
m_message(this, IDC_MESSAGE),
- m_bIncoming(bIncoming),
- m_hContact(hContact)
+ m_bIncoming(bIncoming)
{
m_pLog = &m_log;
m_pEntry = &m_message;
+ m_hContact = hContact;
m_hwndParent = GetParentWindow(hContact, FALSE);
m_wszInitialText = (bIsUnicode) ? mir_wstrdup((wchar_t*)szInitialText) : mir_a2u(szInitialText);
@@ -998,7 +998,7 @@ INT_PTR CSrmmWindow::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) if (m_hContact && m_szProto) {
DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING *)lParam;
char idbuf[128], buf[128];
- GetContactUniqueId(this, idbuf, sizeof(idbuf));
+ GetContactUniqueId(idbuf, sizeof(idbuf));
mir_snprintf(buf, Translate("User menu - %s"), idbuf);
SendDlgItemMessage(m_hwnd, IDC_USERMENU, BUTTONADDTOOLTIP, (WPARAM)buf, 0);
@@ -1083,7 +1083,7 @@ INT_PTR CSrmmWindow::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) case DM_USERNAMETOCLIP:
if (m_hContact) {
char buf[128];
- GetContactUniqueId(this, buf, sizeof(buf));
+ GetContactUniqueId(buf, sizeof(buf));
if (!OpenClipboard(m_hwnd) || !mir_strlen(buf))
break;
@@ -1626,7 +1626,7 @@ INT_PTR CSrmmWindow::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) wchar_t *buffer = NULL;
if (m_hwndIeview != NULL)
- buffer = GetIEViewSelection(this);
+ buffer = GetIEViewSelection();
else
buffer = GetRichEditSelection(GetDlgItem(m_hwnd, IDC_LOG));
diff --git a/plugins/Scriver/src/msgs.h b/plugins/Scriver/src/msgs.h index a2873ce784..3374631830 100644 --- a/plugins/Scriver/src/msgs.h +++ b/plugins/Scriver/src/msgs.h @@ -122,21 +122,22 @@ class CSrmmWindow : public CSrmmBaseDialog, public MZeroedObject, public CommonW InfobarWindowData *m_pInfobarData;
- HICON GetTabIcon();
- void GetTitlebarIcon(struct TitleBarData *tbd);
- void MessageDialogResize(int w, int h);
- void ShowAvatar();
- void SetDialogToType();
- void SetStatusIcon();
- void StreamInEvents(MEVENT hDbEventFirst, int count, int fAppend);
- void UpdateReadChars();
+ void GetContactUniqueId(char *buf, int maxlen);
+ wchar_t* GetIEViewSelection();
+ HICON GetTabIcon();
+ void GetTitlebarIcon(struct TitleBarData *tbd);
+ void MessageDialogResize(int w, int h);
+ void ShowAvatar();
+ void SetDialogToType();
+ void SetStatusIcon();
+ void StreamInEvents(MEVENT hDbEventFirst, int count, int fAppend);
+ void UpdateReadChars();
bool IsTypingNotificationEnabled();
bool IsTypingNotificationSupported();
void NotifyTyping(int mode);
public:
- MCONTACT m_hContact;
char *m_szProto;
time_t m_startTime, m_lastEventTime;
int m_lastEventType;
diff --git a/plugins/Scriver/src/utils.cpp b/plugins/Scriver/src/utils.cpp index a615d5dd5b..c68c1518f6 100644 --- a/plugins/Scriver/src/utils.cpp +++ b/plugins/Scriver/src/utils.cpp @@ -385,9 +385,9 @@ void SetSearchEngineIcons(HMENU hMenu, HIMAGELIST hImageList) }
}
-void GetContactUniqueId(CSrmmWindow *dat, char *buf, int maxlen)
+void CSrmmWindow::GetContactUniqueId(char *buf, int maxlen)
{
- ptrW id(Contact_GetInfo(CNF_UNIQUEID, dat->m_hContact, dat->m_szProto));
+ ptrW id(Contact_GetInfo(CNF_UNIQUEID, m_hContact, m_szProto));
if (id != NULL)
strncpy_s(buf, maxlen, _T2A(id), _TRUNCATE);
}
diff --git a/plugins/Scriver/src/utils.h b/plugins/Scriver/src/utils.h index 051de4800d..bf01163431 100644 --- a/plugins/Scriver/src/utils.h +++ b/plugins/Scriver/src/utils.h @@ -48,7 +48,6 @@ void AppendToBuffer(char *&buffer, size_t &cbBufferEnd, size_t &cbBufferAlloced, int MeasureMenuItem(WPARAM wParam, LPARAM lParam);
int DrawMenuItem(WPARAM wParam, LPARAM lParam);
void SetSearchEngineIcons(HMENU hMenu, HIMAGELIST hImageList);
-void GetContactUniqueId(class CSrmmWindow *dat, char *buf, int maxlen);
HWND CreateToolTip(HWND hwndParent, LPTSTR ptszText, LPTSTR ptszTitle, RECT *rect);
void SetToolTipText(HWND hwndParent, HWND hwndTT, LPTSTR ptszText, LPTSTR ptszTitle);
void SetToolTipRect(HWND hwndParent, HWND hwndTT, RECT* rect);
diff --git a/plugins/TabSRMM/src/chat/log.cpp b/plugins/TabSRMM/src/chat/log.cpp index 16ee04bc07..5981eb3557 100644 --- a/plugins/TabSRMM/src/chat/log.cpp +++ b/plugins/TabSRMM/src/chat/log.cpp @@ -857,7 +857,7 @@ static DWORD CALLBACK Log_StreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG return 0;
}
-void CChatRoomDlg::StreamInEvents(LOGINFO* lin, SESSION_INFO *si, bool bRedraw)
+void CChatRoomDlg::StreamInEvents(LOGINFO *lin, SESSION_INFO *si, bool bRedraw)
{
CHARRANGE oldsel, sel, newsel;
POINT point = { 0 };
diff --git a/plugins/TabSRMM/src/chat/window.cpp b/plugins/TabSRMM/src/chat/window.cpp index 17c40a43a6..89b5c71d12 100644 --- a/plugins/TabSRMM/src/chat/window.cpp +++ b/plugins/TabSRMM/src/chat/window.cpp @@ -1542,6 +1542,27 @@ CChatRoomDlg::CChatRoomDlg(TNewWindowData *pData) m_Panel = new CInfoPanel(this); } +CThumbBase* CChatRoomDlg::CreateThumb(CProxyWindow *pProxy) const +{ + return new CThumbMUC(pProxy, si); +} + +void CChatRoomDlg::ClearLog() +{ + SESSION_INFO *s = pci->SM_FindSession(si->ptszID, si->pszModule); + if (s) { + m_log.SetText(L""); + pci->LM_RemoveAll(&s->pLog, &s->pLogEnd); + s->iEventCount = 0; + s->LastTime = 0; + si->iEventCount = 0; + si->LastTime = 0; + si->pLog = s->pLog; + si->pLogEnd = s->pLogEnd; + PostMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0); + } +} + void CChatRoomDlg::OnInitDialog() { SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LONG_PTR)this); diff --git a/plugins/TabSRMM/src/infopanel.cpp b/plugins/TabSRMM/src/infopanel.cpp index bba1ddffdd..a24101d889 100644 --- a/plugins/TabSRMM/src/infopanel.cpp +++ b/plugins/TabSRMM/src/infopanel.cpp @@ -598,8 +598,8 @@ void CInfoPanel::RenderIPStatus(const HDC hdc, RECT& rcItem) void CInfoPanel::Chat_RenderIPNickname(const HDC hdc, RECT& rcItem)
{
- SESSION_INFO *si = reinterpret_cast<SESSION_INFO*>(m_dat->si);
- if (si == 0)
+ SESSION_INFO *si = m_dat->si;
+ if (si == nullptr)
return;
::SetBkMode(hdc, TRANSPARENT);
diff --git a/plugins/TabSRMM/src/msgdialog.cpp b/plugins/TabSRMM/src/msgdialog.cpp index d899201b24..acaa4fe9a8 100644 --- a/plugins/TabSRMM/src/msgdialog.cpp +++ b/plugins/TabSRMM/src/msgdialog.cpp @@ -80,7 +80,7 @@ static void _clrMsgFilter(LPARAM lParam) // @param hwndFrom src window handle
// @param pt mouse pointer position
-static void ShowPopupMenu(CSrmmWindow *dat, int idFrom, HWND hwndFrom, POINT pt)
+static void ShowPopupMenu(CTabBaseDlg *dat, int idFrom, HWND hwndFrom, POINT pt)
{
CHARRANGE sel, all = { 0, -1 };
HWND hwndDlg = dat->GetHwnd();
@@ -915,9 +915,8 @@ LRESULT CALLBACK SplitterSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM dat->m_dynaSplitter = dat->m_savedDynaSplit;
dat->DM_RecalcPictureSize();
if (dat->m_bType == SESSIONTYPE_CHAT) {
- SESSION_INFO *si = dat->si;
- si->iSplitterY = dat->m_savedSplitY;
- dat->m_splitterY = si->iSplitterY + DPISCALEY_S(22);
+ dat->si->iSplitterY = dat->m_savedSplitY;
+ dat->m_splitterY = dat->si->iSplitterY + DPISCALEY_S(22);
}
dat->UpdateToolbarBG();
SendMessage(hwndParent, WM_SIZE, 0, 0);
@@ -944,6 +943,32 @@ CSrmmWindow::CSrmmWindow(TNewWindowData *pNewData) m_Panel = new CInfoPanel(this);
}
+void CSrmmWindow::ClearLog()
+{
+ if (m_hwndIEView || m_hwndHPP) {
+ IEVIEWEVENT event;
+ event.cbSize = sizeof(IEVIEWEVENT);
+ event.iType = IEE_CLEAR_LOG;
+ event.dwFlags = (m_dwFlags & MWF_LOG_RTL) ? IEEF_RTL : 0;
+ event.hContact = m_hContact;
+ if (m_hwndIEView) {
+ event.hwnd = m_hwndIEView;
+ CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&event);
+ }
+ else {
+ event.hwnd = m_hwndHPP;
+ CallService(MS_HPP_EG_EVENT, 0, (LPARAM)&event);
+ }
+ }
+ m_log.SetText(L"");
+ m_hDbEventFirst = 0;
+}
+
+CThumbBase* CSrmmWindow::CreateThumb(CProxyWindow *pProxy) const
+{
+ return new CThumbIM(pProxy);
+}
+
void CSrmmWindow::OnInitDialog()
{
m_pContainer = newData->pContainer;
diff --git a/plugins/TabSRMM/src/msgdlgutils.cpp b/plugins/TabSRMM/src/msgdlgutils.cpp index df8a2536e2..40224c9339 100644 --- a/plugins/TabSRMM/src/msgdlgutils.cpp +++ b/plugins/TabSRMM/src/msgdlgutils.cpp @@ -325,12 +325,10 @@ int CTabBaseDlg::MsgWindowMenuHandler(int selection, int menuId) db_unset(m_hContact, SRMSGMOD_T, "tabindex");
break;
case ID_TABMENU_LEAVECHATROOM:
- if (m_bType == SESSIONTYPE_CHAT) {
- if (si != NULL && m_hContact != NULL) {
- char *szProto = GetContactProto(m_hContact);
- if (szProto)
- CallProtoService(szProto, PS_LEAVECHAT, m_hContact, 0);
- }
+ if (m_bType == SESSIONTYPE_CHAT && m_hContact != NULL) {
+ char *szProto = GetContactProto(m_hContact);
+ if (szProto)
+ CallProtoService(szProto, PS_LEAVECHAT, m_hContact, 0);
}
return 1;
@@ -1705,47 +1703,6 @@ void CTabBaseDlg::KbdState(bool &isShift, bool &isControl, bool &isAlt) }
/////////////////////////////////////////////////////////////////////////////////////////
-// clear the message log
-// code needs to distuingish between IM and MUC sessions.
-
-void CTabBaseDlg::ClearLog()
-{
- if (m_bType == SESSIONTYPE_IM) {
- if (m_hwndIEView || m_hwndHPP) {
- IEVIEWEVENT event;
- event.cbSize = sizeof(IEVIEWEVENT);
- event.iType = IEE_CLEAR_LOG;
- event.dwFlags = (m_dwFlags & MWF_LOG_RTL) ? IEEF_RTL : 0;
- event.hContact = m_hContact;
- if (m_hwndIEView) {
- event.hwnd = m_hwndIEView;
- CallService(MS_IEVIEW_EVENT, 0, (LPARAM)&event);
- }
- else {
- event.hwnd = m_hwndHPP;
- CallService(MS_HPP_EG_EVENT, 0, (LPARAM)&event);
- }
- }
- m_log.SetText(L"");
- m_hDbEventFirst = 0;
- }
- else if (m_bType == SESSIONTYPE_CHAT && si) {
- SESSION_INFO *s = pci->SM_FindSession(si->ptszID, si->pszModule);
- if (s) {
- m_log.SetText(L"");
- pci->LM_RemoveAll(&s->pLog, &s->pLogEnd);
- s->iEventCount = 0;
- s->LastTime = 0;
- si->iEventCount = 0;
- si->LastTime = 0;
- si->pLog = s->pLog;
- si->pLogEnd = s->pLogEnd;
- PostMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0);
- }
- }
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////
// calculate the minimum required client height for the given message
// window layout
//
diff --git a/plugins/TabSRMM/src/msgs.cpp b/plugins/TabSRMM/src/msgs.cpp index 29597c7215..12d28e1498 100644 --- a/plugins/TabSRMM/src/msgs.cpp +++ b/plugins/TabSRMM/src/msgs.cpp @@ -123,11 +123,11 @@ CTabBaseDlg::CTabBaseDlg(TNewWindowData *pData, int iResource) m_message(this, IDC_MESSAGE),
newData(pData),
- m_pContainer(pData->pContainer),
- m_hContact(pData->hContact)
+ m_pContainer(pData->pContainer)
{
m_pLog = &m_log;
m_pEntry = &m_message;
+ m_hContact = pData->hContact;
m_autoClose = 0;
m_forceResizable = true;
diff --git a/plugins/TabSRMM/src/msgs.h b/plugins/TabSRMM/src/msgs.h index 26648a98ad..ef7d394969 100644 --- a/plugins/TabSRMM/src/msgs.h +++ b/plugins/TabSRMM/src/msgs.h @@ -135,6 +135,7 @@ class CMenuBar; class CInfoPanel;
class CSideBar;
class CProxyWindow;
+class CThumbBase;
struct CContactCache;
@@ -274,7 +275,6 @@ public: BYTE m_bType;
DWORD m_dwFlags;
DWORD m_dwFlagsEx;
- MCONTACT m_hContact;
char *m_szProto;
wchar_t m_wszMyNickname[130];
wchar_t m_wszStatusBar[100];
@@ -375,6 +375,9 @@ public: public:
CTabBaseDlg(TNewWindowData*, int);
+ virtual CThumbBase* CreateThumb(CProxyWindow*) const = 0;
+ virtual void ClearLog() = 0;
+
HWND DM_CreateClist();
void DM_EventAdded(WPARAM wParam, LPARAM lParam);
void DM_InitRichEdit();
@@ -408,7 +411,6 @@ public: void AdjustBottomAvatarDisplay();
void CalcDynamicAvatarSize(BITMAP *bminfo);
void CheckStatusIconClick(POINT pt, const RECT &rc, int gap, int code);
- void ClearLog();
BOOL DoRtfToTags(CMStringW &pszText, int iNumColors, COLORREF *pColors) const;
void DrawStatusIcons(HDC hDC, const RECT &rc, int gap);
void EnableSendButton(bool bMode) const;
@@ -445,6 +447,9 @@ public: class CSrmmWindow : public CTabBaseDlg, public MZeroedObject
{
+ virtual CThumbBase* CreateThumb(CProxyWindow *pProxy) const override;
+ virtual void ClearLog() override;
+
void DM_OptionsApplied(WPARAM wParam, LPARAM lParam);
void MsgWindowUpdateState(UINT msg);
@@ -468,6 +473,9 @@ class CChatRoomDlg : public CTabBaseDlg, public MZeroedObject {
bool m_bWasDeleted;
+ virtual CThumbBase* CreateThumb(CProxyWindow *pProxy) const override;
+ virtual void ClearLog() override;
+
public:
CChatRoomDlg(TNewWindowData*);
diff --git a/plugins/TabSRMM/src/tabctrl.cpp b/plugins/TabSRMM/src/tabctrl.cpp index b82a1016dd..ec39dfb404 100644 --- a/plugins/TabSRMM/src/tabctrl.cpp +++ b/plugins/TabSRMM/src/tabctrl.cpp @@ -182,7 +182,7 @@ static void DrawItem(TabControlData *tabdat, HDC dc, RECT *rcItem, int nHint, in else if (dat->m_bCanFlashTab)
hIcon = dat->m_iFlashIcon;
else {
- if (dat->si && dat->m_iFlashIcon) {
+ if (dat->m_bType == SESSIONTYPE_CHAT && dat->m_iFlashIcon) {
hIcon = dat->m_iFlashIcon;
int sizeY;
diff --git a/plugins/TabSRMM/src/taskbar.cpp b/plugins/TabSRMM/src/taskbar.cpp index aa0be96110..16a3c67145 100644 --- a/plugins/TabSRMM/src/taskbar.cpp +++ b/plugins/TabSRMM/src/taskbar.cpp @@ -293,10 +293,7 @@ void CProxyWindow::sendThumb(LONG width, LONG height) if (0 == m_thumb) {
m_width = width;
m_height = height;
- if (m_dat->m_bType == SESSIONTYPE_IM)
- m_thumb = new CThumbIM(this);
- else
- m_thumb = new CThumbMUC(this);
+ m_thumb = m_dat->CreateThumb(this);
}
else if (width != m_width || height != m_height || !m_thumb->isValid()) {
m_width = width;
@@ -834,7 +831,9 @@ void CThumbIM::renderContent() * @param _p our owner (CProxyWindow object)
* @return
*/
-CThumbMUC::CThumbMUC(const CProxyWindow* _p) : CThumbBase(_p)
+CThumbMUC::CThumbMUC(const CProxyWindow* _p, SESSION_INFO *_si)
+ : CThumbBase(_p),
+ si(_si)
{
renderContent();
setValid(true);
@@ -855,61 +854,63 @@ void CThumbMUC::update() */
void CThumbMUC::renderContent()
{
- if (m_dat->si) {
- const MODULEINFO* mi = pci->MM_FindModule(m_dat->si->pszModule);
- wchar_t szTemp[250];
- const wchar_t* szStatusMsg = 0;
+ if (si == nullptr)
+ return;
- if (mi) {
- if (m_dat->m_dwUnread) {
- mir_snwprintf(szTemp, TranslateT("%d unread"), m_dat->m_dwUnread);
- CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true);
- m_rcIcon.top += m_sz.cy;
+ const MODULEINFO *mi = pci->MM_FindModule(si->pszModule);
+ if (mi) {
+ wchar_t szTemp[250];
+ if (m_dat->m_dwUnread) {
+ mir_snwprintf(szTemp, TranslateT("%d unread"), m_dat->m_dwUnread);
+ CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true);
+ m_rcIcon.top += m_sz.cy;
+ }
+ if (si->iType != GCW_SERVER) {
+ wchar_t* _p = NULL;
+ if (si->ptszStatusbarText)
+ _p = wcschr(si->ptszStatusbarText, ']');
+ if (_p) {
+ _p++;
+ wchar_t _t = *_p;
+ *_p = 0;
+ mir_snwprintf(szTemp, TranslateT("Chat room %s"), si->ptszStatusbarText);
+ *_p = _t;
}
- if (m_dat->si->iType != GCW_SERVER) {
- wchar_t* _p = NULL;
- if (m_dat->si->ptszStatusbarText)
- _p = wcschr(m_dat->si->ptszStatusbarText, ']');
- if (_p) {
- _p++;
- wchar_t _t = *_p;
- *_p = 0;
- mir_snwprintf(szTemp, TranslateT("Chat room %s"), m_dat->si->ptszStatusbarText);
- *_p = _t;
- }
- else
- mir_snwprintf(szTemp, TranslateT("Chat room %s"), L"");
- CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true);
+ else
+ mir_snwprintf(szTemp, TranslateT("Chat room %s"), L"");
+ CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true);
+ m_rcIcon.top += m_sz.cy;
+ mir_snwprintf(szTemp, TranslateT("%d user(s)"), si->nUsersInNicklist);
+ CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true);
+ }
+ else {
+ mir_snwprintf(szTemp, TranslateT("Server window"));
+ CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true);
+ if (mi->tszIdleMsg[0] && mir_wstrlen(mi->tszIdleMsg) > 2) {
m_rcIcon.top += m_sz.cy;
- mir_snwprintf(szTemp, TranslateT("%d user(s)"), m_dat->si->nUsersInNicklist);
- CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true);
- }
- else {
- mir_snwprintf(szTemp, TranslateT("Server window"));
- CSkin::RenderText(m_hdc, m_dat->m_hTheme, szTemp, &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true);
- if (mi->tszIdleMsg[0] && mir_wstrlen(mi->tszIdleMsg) > 2) {
- m_rcIcon.top += m_sz.cy;
- CSkin::RenderText(m_hdc, m_dat->m_hTheme, &mi->tszIdleMsg[2], &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true);
- }
+ CSkin::RenderText(m_hdc, m_dat->m_hTheme, &mi->tszIdleMsg[2], &m_rcIcon, m_dtFlags | DT_SINGLELINE | DT_RIGHT, 10, 0, true);
}
}
+ }
- if ((m_rcBottom.bottom - m_rcBottom.top) < 2 * m_sz.cy)
- m_dtFlags |= DT_SINGLELINE;
-
- m_rcBottom.bottom -= ((m_rcBottom.bottom - m_rcBottom.top) % m_sz.cy); // adjust to a multiple of line height
+ if ((m_rcBottom.bottom - m_rcBottom.top) < 2 * m_sz.cy)
+ m_dtFlags |= DT_SINGLELINE;
- if (m_dat->si->iType != GCW_SERVER) {
- if (0 == (szStatusMsg = m_dat->si->ptszTopic))
- szStatusMsg = TranslateT("no topic set.");
- }
- else if (mi) {
- mir_snwprintf(szTemp, TranslateT("%s on %s%s"), m_dat->m_wszMyNickname, mi->ptszModDispName, L"");
- szStatusMsg = szTemp;
- }
+ m_rcBottom.bottom -= ((m_rcBottom.bottom - m_rcBottom.top) % m_sz.cy); // adjust to a multiple of line height
- CSkin::RenderText(m_hdc, m_dat->m_hTheme, szStatusMsg, &m_rcBottom, DT_WORD_ELLIPSIS | DT_END_ELLIPSIS | m_dtFlags, 10, 0, true);
+ const wchar_t *szStatusMsg = 0;
+ if (si->iType != GCW_SERVER) {
+ if (0 == (szStatusMsg = si->ptszTopic))
+ szStatusMsg = TranslateT("no topic set.");
+ }
+ else if (mi) {
+ wchar_t szTemp[250];
+ mir_snwprintf(szTemp, TranslateT("%s on %s%s"), m_dat->m_wszMyNickname, mi->ptszModDispName, L"");
+ szStatusMsg = szTemp;
}
+
+ CSkin::RenderText(m_hdc, m_dat->m_hTheme, szStatusMsg, &m_rcBottom, DT_WORD_ELLIPSIS | DT_END_ELLIPSIS | m_dtFlags, 10, 0, true);
+
/*
* finalize it
* do NOT delete the bitmap, the dwm will need the handle
diff --git a/plugins/TabSRMM/src/taskbar.h b/plugins/TabSRMM/src/taskbar.h index d8ca7ec962..8c7c3e4719 100644 --- a/plugins/TabSRMM/src/taskbar.h +++ b/plugins/TabSRMM/src/taskbar.h @@ -80,18 +80,20 @@ public: void update();
private:
- void renderContent();
+ virtual void renderContent() override;
};
class CThumbMUC : public CThumbBase
{
+ SESSION_INFO *si;
+
public:
- CThumbMUC(const CProxyWindow* pWnd);
+ CThumbMUC(const CProxyWindow* pWnd, SESSION_INFO*);
virtual ~CThumbMUC() {};
void update();
private:
- void renderContent();
+ virtual void renderContent() override;
};
class CProxyWindow
diff --git a/src/core/stdmsg/src/chat_window.cpp b/src/core/stdmsg/src/chat_window.cpp index af4ea35a85..36dc59a92a 100644 --- a/src/core/stdmsg/src/chat_window.cpp +++ b/src/core/stdmsg/src/chat_window.cpp @@ -875,6 +875,7 @@ CChatRoomDlg::CChatRoomDlg(SESSION_INFO *si) : { m_pLog = &m_log; m_pEntry = &m_message; + m_hContact = si->hContact; m_autoClose = 0; @@ -909,9 +910,9 @@ void CChatRoomDlg::OnInitDialog() m_btnColor.OnInit(); m_btnBkColor.OnInit(); m_btnFilter.OnInit(); m_btnHistory.OnInit(); m_btnChannelMgr.OnInit(); - WindowList_Add(pci->hWindowList, m_hwnd, m_si->hContact); + WindowList_Add(pci->hWindowList, m_hwnd, m_hContact); - NotifyLocalWinEvent(m_si->hContact, m_hwnd, MSG_WINDOW_EVT_OPENING); + NotifyLocalWinEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_OPENING); mir_subclassWindow(GetDlgItem(m_hwnd, IDC_SPLITTERX), SplitterSubclassProc); mir_subclassWindow(GetDlgItem(m_hwnd, IDC_SPLITTERY), SplitterSubclassProc); mir_subclassWindow(m_log.GetHwnd(), LogSubclassProc); @@ -943,12 +944,12 @@ void CChatRoomDlg::OnInitDialog() SendMessage(m_hwnd, WM_SIZE, 0, 0); - NotifyLocalWinEvent(m_si->hContact, m_hwnd, MSG_WINDOW_EVT_OPEN); + NotifyLocalWinEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_OPEN); } void CChatRoomDlg::OnDestroy() { - NotifyLocalWinEvent(m_si->hContact, m_hwnd, MSG_WINDOW_EVT_CLOSING); + NotifyLocalWinEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_CLOSING); SaveWindowPosition(true); WindowList_Remove(pci->hWindowList, m_hwnd); @@ -958,7 +959,7 @@ void CChatRoomDlg::OnDestroy() m_si->wState &= ~STATE_TALK; DestroyWindow(m_si->hwndStatus); m_si->hwndStatus = NULL; - NotifyLocalWinEvent(m_si->hContact, m_hwnd, MSG_WINDOW_EVT_CLOSE); + NotifyLocalWinEvent(m_hContact, m_hwnd, MSG_WINDOW_EVT_CLOSE); } void CChatRoomDlg::OnClick_Bold(CCtrlButton *pButton) @@ -1146,7 +1147,7 @@ void CChatRoomDlg::SetWindowPosition() } if (db_get_b(NULL, CHAT_MODULE, "SavePosition", 0)) { - if (RestoreWindowPosition(m_hwnd, m_si->hContact, true)) { + if (RestoreWindowPosition(m_hwnd, m_hContact, true)) { ShowWindow(m_hwnd, SW_HIDE); return; } @@ -1497,17 +1498,17 @@ INT_PTR CChatRoomDlg::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) if (!g_Settings.bTabsEnable) { SaveWindowPosition(true); if (db_get_b(NULL, CHAT_MODULE, "SavePosition", 0)) { - db_set_dw(m_si->hContact, CHAT_MODULE, "roomx", m_si->iX); - db_set_dw(m_si->hContact, CHAT_MODULE, "roomy", m_si->iY); - db_set_dw(m_si->hContact, CHAT_MODULE, "roomwidth", m_si->iWidth); - db_set_dw(m_si->hContact, CHAT_MODULE, "roomheight", m_si->iHeight); + db_set_dw(m_hContact, CHAT_MODULE, "roomx", m_si->iX); + db_set_dw(m_hContact, CHAT_MODULE, "roomy", m_si->iY); + db_set_dw(m_hContact, CHAT_MODULE, "roomwidth", m_si->iWidth); + db_set_dw(m_hContact, CHAT_MODULE, "roomheight", m_si->iHeight); } } - if (pcli->pfnGetEvent(m_si->hContact, 0)) - pcli->pfnRemoveEvent(m_si->hContact, GC_FAKE_EVENT); + if (pcli->pfnGetEvent(m_hContact, 0)) + pcli->pfnRemoveEvent(m_hContact, GC_FAKE_EVENT); m_si->wState &= ~STATE_TALK; - db_set_w(m_si->hContact, m_si->pszModule, "ApparentMode", 0); + db_set_w(m_hContact, m_si->pszModule, "ApparentMode", 0); SendMessage(m_hwnd, GC_CLOSEWINDOW, 0, 0); return TRUE; @@ -1673,10 +1674,10 @@ LABEL_SHOWWINDOW: if (KillTimer(m_hwnd, TIMERID_FLASHWND)) FlashWindow(m_hwnd, FALSE); - if (db_get_w(m_si->hContact, m_si->pszModule, "ApparentMode", 0) != 0) - db_set_w(m_si->hContact, m_si->pszModule, "ApparentMode", 0); - if (pcli->pfnGetEvent(m_si->hContact, 0)) - pcli->pfnRemoveEvent(m_si->hContact, GC_FAKE_EVENT); + if (db_get_w(m_hContact, m_si->pszModule, "ApparentMode", 0) != 0) + db_set_w(m_hContact, m_si->pszModule, "ApparentMode", 0); + if (pcli->pfnGetEvent(m_hContact, 0)) + pcli->pfnRemoveEvent(m_hContact, GC_FAKE_EVENT); } break; @@ -1790,7 +1791,7 @@ LABEL_SHOWWINDOW: case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED) if (LOWORD(wParam) >= MIN_CBUTTONID && LOWORD(wParam) <= MAX_CBUTTONID) { - Srmm_ClickToolbarIcon(m_si->hContact, LOWORD(wParam), GetDlgItem(m_hwnd, LOWORD(wParam)), 0); + Srmm_ClickToolbarIcon(m_hContact, LOWORD(wParam), GetDlgItem(m_hwnd, LOWORD(wParam)), 0); break; } diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp index d82a22d7bb..5eeacef419 100644 --- a/src/core/stdmsg/src/msgdialog.cpp +++ b/src/core/stdmsg/src/msgdialog.cpp @@ -419,11 +419,11 @@ CSrmmWindow::CSrmmWindow(MCONTACT hContact, bool noActivate, const char *szIniti m_log(this, IDC_LOG),
m_message(this, IDC_MESSAGE),
m_cmdList(20),
- m_bNoActivate(noActivate),
- m_hContact(hContact)
+ m_bNoActivate(noActivate)
{
m_pLog = &m_log;
m_pEntry = &m_message;
+ m_hContact = hContact;
m_wszInitialText = (bIsUnicode) ? mir_wstrdup((wchar_t*)szInitialText) : mir_a2u(szInitialText);
}
diff --git a/src/core/stdmsg/src/msgs.h b/src/core/stdmsg/src/msgs.h index 18ff6ba2e1..33983fe2eb 100644 --- a/src/core/stdmsg/src/msgs.h +++ b/src/core/stdmsg/src/msgs.h @@ -79,7 +79,6 @@ class CSrmmWindow : public CSrmmBaseDialog, public MZeroedObject bool m_bIsMeta, m_bShowTyping, m_bNoActivate;
public:
- MCONTACT m_hContact;
MEVENT m_hDbEventFirst, m_hDbEventLast;
bool m_bIsAutoRTL;
diff --git a/src/mir_app/src/srmm_base.cpp b/src/mir_app/src/srmm_base.cpp index b28549b6c0..5968514838 100644 --- a/src/mir_app/src/srmm_base.cpp +++ b/src/mir_app/src/srmm_base.cpp @@ -27,8 +27,9 @@ extern HCURSOR g_hCurHyperlinkHand; CSrmmBaseDialog::CSrmmBaseDialog(HINSTANCE hInst, int idDialog) : CDlgBase(hInst, idDialog), - m_pLog(NULL), - m_pEntry(NULL) + m_pLog(nullptr), + m_pEntry(nullptr), + m_hContact(0) { } |