From c46f4344f007d814131d25fa5aec6fdb4c7a049d Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 7 Apr 2017 14:36:22 +0300 Subject: Windows-specific code moved to mir_core --- src/core/stdmsg/src/chat_window.cpp | 1 - src/core/stdmsg/src/globals.h | 25 ----------- src/core/stdmsg/src/msgdialog.cpp | 1 - src/core/stdmsg/src/msgs.cpp | 90 ------------------------------------- src/core/stdmsg/src/stdafx.h | 1 - src/mir_app/src/srmm_base.cpp | 1 + src/mir_core/src/CCtrlRichEdit.cpp | 86 +++++++++++++++++++++++++++++++++++ src/mir_core/src/mir_core.def | 1 + src/mir_core/src/mir_core64.def | 1 + 9 files changed, 89 insertions(+), 118 deletions(-) (limited to 'src') diff --git a/src/core/stdmsg/src/chat_window.cpp b/src/core/stdmsg/src/chat_window.cpp index ce6928a20d..d405be1514 100644 --- a/src/core/stdmsg/src/chat_window.cpp +++ b/src/core/stdmsg/src/chat_window.cpp @@ -69,7 +69,6 @@ void CChatRoomDlg::OnInitDialog() int mask = (int)m_log.SendMsg(EM_GETEVENTMASK, 0, 0); m_log.SendMsg(EM_SETEVENTMASK, 0, mask | ENM_LINK | ENM_MOUSEEVENTS); m_log.SendMsg(EM_LIMITTEXT, sizeof(wchar_t) * 0x7FFFFFFF, 0); - m_log.SendMsg(EM_SETOLECALLBACK, 0, (LPARAM)&reOleCallback); m_log.SendMsg(EM_HIDESELECTION, TRUE, 0); UpdateOptions(); diff --git a/src/core/stdmsg/src/globals.h b/src/core/stdmsg/src/globals.h index fb92e0beb7..3f25e9ee63 100644 --- a/src/core/stdmsg/src/globals.h +++ b/src/core/stdmsg/src/globals.h @@ -61,29 +61,4 @@ void ReloadGlobals(); extern GlobalMessageData g_dat; -///////////////////////////////////////////////////////////////////////////////////////// - -struct CREOleCallback : public IRichEditOleCallback -{ - CREOleCallback() : refCount(0), nextStgId(0), pictStg(nullptr) {} - unsigned refCount; - IStorage *pictStg; - int nextStgId; - - STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR * lplpObj); - STDMETHOD_(ULONG, AddRef)(THIS); - STDMETHOD_(ULONG, Release)(THIS); - - STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode); - STDMETHOD(GetNewStorage)(LPSTORAGE FAR * lplpstg); - STDMETHOD(GetInPlaceContext)(LPOLEINPLACEFRAME FAR * lplpFrame, LPOLEINPLACEUIWINDOW FAR * lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo); - STDMETHOD(ShowContainerUI)(BOOL fShow); - STDMETHOD(QueryInsertObject)(LPCLSID lpclsid, LPSTORAGE lpstg, LONG cp); - STDMETHOD(DeleteObject)(LPOLEOBJECT lpoleobj); - STDMETHOD(QueryAcceptData)(LPDATAOBJECT lpdataobj, CLIPFORMAT FAR * lpcfFormat, DWORD reco, BOOL fReally, HGLOBAL hMetaPict); - STDMETHOD(GetClipboardData)(CHARRANGE FAR *lpchrg, DWORD reco, LPDATAOBJECT FAR * lplpdataobj); - STDMETHOD(GetDragDropEffect)(BOOL fDrag, DWORD grfKeyState, LPDWORD pdwEffect); - STDMETHOD(GetContextMenu)(WORD seltype, LPOLEOBJECT lpoleobj, CHARRANGE FAR * lpchrg, HMENU FAR * lphmenu); -}; - #endif diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp index f855ec9c6b..ac2b92bf73 100644 --- a/src/core/stdmsg/src/msgdialog.cpp +++ b/src/core/stdmsg/src/msgdialog.cpp @@ -162,7 +162,6 @@ void CSrmmWindow::OnInitDialog() m_avatar.Enable(false); - m_log.SendMsg(EM_SETOLECALLBACK, 0, (LPARAM)&reOleCallback); m_log.SendMsg(EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS | ENM_LINK | ENM_SCROLL); m_log.SendMsg(EM_AUTOURLDETECT, TRUE, 0); diff --git a/src/core/stdmsg/src/msgs.cpp b/src/core/stdmsg/src/msgs.cpp index f050209d20..bd0301088b 100644 --- a/src/core/stdmsg/src/msgs.cpp +++ b/src/core/stdmsg/src/msgs.cpp @@ -546,93 +546,3 @@ void SplitmsgShutdown(void) FreeLibrary(hMsftEdit); msgQueue_destroy(); } - -/////////////////////////////////////////////////////////////////////////////////////////////////////// - -CREOleCallback reOleCallback; - -STDMETHODIMP CREOleCallback::QueryInterface(REFIID riid, LPVOID * ppvObj) -{ - if (IsEqualIID(riid, IID_IRichEditOleCallback)) { - *ppvObj = this; - AddRef(); - return S_OK; - } - *ppvObj = nullptr; - return E_NOINTERFACE; -} - -STDMETHODIMP_(ULONG) CREOleCallback::AddRef() -{ - if (refCount == 0) - StgCreateDocfile(nullptr, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DELETEONRELEASE, 0, &pictStg); - - return ++refCount; -} - -STDMETHODIMP_(ULONG) CREOleCallback::Release() -{ - if (--refCount == 0) { - if (pictStg) { - pictStg->Release(); - pictStg = nullptr; - } - } - return refCount; -} - -STDMETHODIMP CREOleCallback::ContextSensitiveHelp(BOOL) -{ - return S_OK; -} - -STDMETHODIMP CREOleCallback::DeleteObject(LPOLEOBJECT) -{ - return S_OK; -} - -STDMETHODIMP CREOleCallback::GetClipboardData(CHARRANGE*, DWORD, LPDATAOBJECT*) -{ - return E_NOTIMPL; -} - -STDMETHODIMP CREOleCallback::GetContextMenu(WORD, LPOLEOBJECT, CHARRANGE*, HMENU*) -{ - return E_INVALIDARG; -} - -STDMETHODIMP CREOleCallback::GetDragDropEffect(BOOL, DWORD, LPDWORD) -{ - return S_OK; -} - -STDMETHODIMP CREOleCallback::GetInPlaceContext(LPOLEINPLACEFRAME*, LPOLEINPLACEUIWINDOW*, LPOLEINPLACEFRAMEINFO) -{ - return E_INVALIDARG; -} - -STDMETHODIMP CREOleCallback::GetNewStorage(LPSTORAGE * lplpstg) -{ - WCHAR szwName[64]; - char szName[64]; - mir_snprintf(szName, "s%u", nextStgId++); - MultiByteToWideChar(CP_ACP, 0, szName, -1, szwName, _countof(szwName)); - if (pictStg == nullptr) - return STG_E_MEDIUMFULL; - return pictStg->CreateStorage(szwName, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, 0, lplpstg); -} - -STDMETHODIMP CREOleCallback::QueryAcceptData(LPDATAOBJECT, CLIPFORMAT*, DWORD, BOOL, HGLOBAL) -{ - return S_OK; -} - -STDMETHODIMP CREOleCallback::QueryInsertObject(LPCLSID, LPSTORAGE, LONG) -{ - return S_OK; -} - -STDMETHODIMP CREOleCallback::ShowContainerUI(BOOL) -{ - return S_OK; -} diff --git a/src/core/stdmsg/src/stdafx.h b/src/core/stdmsg/src/stdafx.h index d199fd10d3..dc0b0dbe05 100644 --- a/src/core/stdmsg/src/stdafx.h +++ b/src/core/stdmsg/src/stdafx.h @@ -82,7 +82,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. extern HINSTANCE g_hInst; extern HANDLE hHookWinPopup, hHookWinWrite; -extern CREOleCallback reOleCallback; ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/mir_app/src/srmm_base.cpp b/src/mir_app/src/srmm_base.cpp index 0bf810aa5f..55f43a5362 100644 --- a/src/mir_app/src/srmm_base.cpp +++ b/src/mir_app/src/srmm_base.cpp @@ -582,6 +582,7 @@ void CSrmmBaseDialog::OnInitDialog() SetWindowLongPtr(m_log.GetHwnd(), GWLP_USERDATA, LPARAM(this)); mir_subclassWindow(m_log.GetHwnd(), stubLogProc); + m_log.SetReadOnly(true); SetWindowLongPtr(m_message.GetHwnd(), GWLP_USERDATA, LPARAM(this)); mir_subclassWindow(m_message.GetHwnd(), stubMessageProc); diff --git a/src/mir_core/src/CCtrlRichEdit.cpp b/src/mir_core/src/CCtrlRichEdit.cpp index cc87958e66..7c874f50f5 100644 --- a/src/mir_core/src/CCtrlRichEdit.cpp +++ b/src/mir_core/src/CCtrlRichEdit.cpp @@ -22,6 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" +#include + ///////////////////////////////////////////////////////////////////////////////////////// // CCtrlRichEdit class @@ -121,3 +123,87 @@ char* CCtrlRichEdit::GetRichTextRtf(bool bText, bool bSelection) const SendMessage(m_hwnd, EM_STREAMOUT, dwFlags, (LPARAM)&stream); return pszText; // pszText contains the text } + +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +struct CREOleCallback : public IRichEditOleCallback +{ + CREOleCallback() : refCount(0), nextStgId(0), pictStg(nullptr) {} + unsigned refCount; + IStorage *pictStg; + int nextStgId; + + STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR *ppvObj) + { + if (IsEqualIID(riid, IID_IRichEditOleCallback)) { + *ppvObj = this; + AddRef(); + return S_OK; + } + *ppvObj = nullptr; + return E_NOINTERFACE; + } + + STDMETHOD_(ULONG, AddRef)(THIS) + { + if (refCount == 0) + StgCreateDocfile(nullptr, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DELETEONRELEASE, 0, &pictStg); + + return ++refCount; + } + + STDMETHOD_(ULONG, Release)(THIS) + { + if (--refCount == 0) { + if (pictStg) { + pictStg->Release(); + pictStg = nullptr; + } + } + return refCount; + } + + STDMETHOD(GetNewStorage)(LPSTORAGE *lplpstg) + { + wchar_t sztName[64]; + mir_snwprintf(sztName, L"s%u", nextStgId++); + if (pictStg == nullptr) + return STG_E_MEDIUMFULL; + return pictStg->CreateStorage(sztName, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, 0, lplpstg); + } + + STDMETHOD(ContextSensitiveHelp)(BOOL) + { return S_OK; } + STDMETHOD(GetInPlaceContext)(LPOLEINPLACEFRAME*, LPOLEINPLACEUIWINDOW*, LPOLEINPLACEFRAMEINFO) + { return E_INVALIDARG; } + STDMETHOD(ShowContainerUI)(BOOL) + { return S_OK; } + STDMETHOD(QueryInsertObject)(LPCLSID, LPSTORAGE, LONG) + { return S_OK; } + STDMETHOD(DeleteObject)(LPOLEOBJECT) + { return S_OK; } + STDMETHOD(QueryAcceptData)(LPDATAOBJECT, CLIPFORMAT*, DWORD, BOOL, HGLOBAL) + { return S_OK; } + STDMETHOD(GetClipboardData)(CHARRANGE*, DWORD, LPDATAOBJECT*) + { return E_NOTIMPL; } + STDMETHOD(GetDragDropEffect)(BOOL, DWORD, LPDWORD) + { return S_OK; } + STDMETHOD(GetContextMenu)(WORD, LPOLEOBJECT, CHARRANGE*, HMENU*) + { return E_INVALIDARG; } +}; + +struct CREOleCallback2 : public CREOleCallback +{ + STDMETHOD(QueryAcceptData)(LPDATAOBJECT, CLIPFORMAT *lpcfFormat, DWORD, BOOL, HGLOBAL) + { *lpcfFormat = CF_UNICODETEXT; + return S_OK; + } +}; + +CREOleCallback reOleCallback; +CREOleCallback2 reOleCallback2; + +void CCtrlRichEdit::SetReadOnly(bool bReadOnly) +{ + SendMsg(EM_SETOLECALLBACK, 0, (LPARAM)(bReadOnly ? &reOleCallback : &reOleCallback2)); +} diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def index ee3c8ca055..cc09ff681f 100644 --- a/src/mir_core/src/mir_core.def +++ b/src/mir_core/src/mir_core.def @@ -1047,3 +1047,4 @@ CallFunctionSync @1170 ?SetRichTextRtf@CCtrlRichEdit@@QAEHPBD@Z @1234 NONAME ?GetRichTextUtf@CCtrlRichEdit@@QBEPADXZ @1235 NONAME ?GetRichTextRtf@CCtrlRichEdit@@QBEPAD_N0@Z @1236 NONAME +?SetReadOnly@CCtrlRichEdit@@QAEX_N@Z @1237 NONAME diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def index 215d63fec8..6d4473cab5 100644 --- a/src/mir_core/src/mir_core64.def +++ b/src/mir_core/src/mir_core64.def @@ -1047,3 +1047,4 @@ CallFunctionSync @1170 ?SetRichTextRtf@CCtrlRichEdit@@QEAAHPEBD@Z @1234 NONAME ?GetRichTextUtf@CCtrlRichEdit@@QEBAPEADXZ @1235 NONAME ?GetRichTextRtf@CCtrlRichEdit@@QEBAPEAD_N0@Z @1236 NONAME +?SetReadOnly@CCtrlRichEdit@@QEAAX_N@Z @1237 NONAME -- cgit v1.2.3