From 292cb6ecd2c5f834c8b535ca8bd6c678e84fab88 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 3 Mar 2016 10:03:03 +0000 Subject: - CComPtr rulez; - obsolete code removed; git-svn-id: http://svn.miranda-ng.org/main/trunk@16400 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/SmileyAdd/src/AniSmileyObject.cpp | 39 +++---- plugins/SmileyAdd/src/SmileyBase.h | 37 +++---- plugins/SmileyAdd/src/dlgboxsubclass.cpp | 172 +++++++++--------------------- plugins/SmileyAdd/src/richcall.cpp | 58 ++++------ plugins/SmileyAdd/src/smileyroutines.cpp | 87 ++++++--------- plugins/SmileyAdd/src/smileyroutines.h | 9 +- plugins/SmileyAdd/src/stdafx.h | 15 +-- 7 files changed, 154 insertions(+), 263 deletions(-) (limited to 'plugins/SmileyAdd') diff --git a/plugins/SmileyAdd/src/AniSmileyObject.cpp b/plugins/SmileyAdd/src/AniSmileyObject.cpp index c437b9ab5a..176d0760c3 100644 --- a/plugins/SmileyAdd/src/AniSmileyObject.cpp +++ b/plugins/SmileyAdd/src/AniSmileyObject.cpp @@ -84,32 +84,33 @@ public: void GetDrawingProp() { - if (m_hwnd == NULL) return; - - IRichEditOle* RichEditOle; - if (SendMessage(m_hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&RichEditOle) == 0) + if (m_hwnd == NULL) return; REOBJECT reObj = { 0 }; - reObj.cbStruct = sizeof(REOBJECT); + reObj.cbStruct = sizeof(reObj); + { + CComPtr RichEditOle; + if (SendMessage(m_hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&RichEditOle) == 0) + return; - HRESULT hr = RichEditOle->GetObject(m_lastObjNum, &reObj, REO_GETOBJ_NO_INTERFACES); - if (hr == S_OK && reObj.dwUser == (DWORD_PTR)this && reObj.clsid == CLSID_NULL) - m_richFlags = reObj.dwFlags; - else { - long objectCount = RichEditOle->GetObjectCount(); - for (long i = objectCount; i--; ) { - hr = RichEditOle->GetObject(i, &reObj, REO_GETOBJ_NO_INTERFACES); - if (FAILED(hr)) continue; - - if (reObj.dwUser == (DWORD_PTR)this && reObj.clsid == CLSID_NULL) { - m_lastObjNum = i; - m_richFlags = reObj.dwFlags; - break; + HRESULT hr = RichEditOle->GetObject(m_lastObjNum, &reObj, REO_GETOBJ_NO_INTERFACES); + if (SUCCEEDED(hr) && reObj.dwUser == (DWORD_PTR)this && reObj.clsid == CLSID_NULL) + m_richFlags = reObj.dwFlags; + else { + long objectCount = RichEditOle->GetObjectCount(); + for (long i = objectCount; i--; ) { + hr = RichEditOle->GetObject(i, &reObj, REO_GETOBJ_NO_INTERFACES); + if (FAILED(hr)) continue; + + if (reObj.dwUser == (DWORD_PTR)this && reObj.clsid == CLSID_NULL) { + m_lastObjNum = i; + m_richFlags = reObj.dwFlags; + break; + } } } } - RichEditOle->Release(); if ((m_richFlags & REO_SELECTED) == 0) { CHARRANGE sel; diff --git a/plugins/SmileyAdd/src/SmileyBase.h b/plugins/SmileyAdd/src/SmileyBase.h index d208360c3a..4f695b8ac8 100644 --- a/plugins/SmileyAdd/src/SmileyBase.h +++ b/plugins/SmileyAdd/src/SmileyBase.h @@ -32,22 +32,22 @@ EXTERN_C const IID IID_ISmileyAddSmiley; class ISmileyBase : public IOleObject, public IViewObject2, public ITooltipData { -protected: IOleAdviseHolder* m_spAdviseHolder; - IAdviseSink* m_spAdviseSink; - IOleClientSite* m_spClientSite; - DWORD m_advf; - LONG m_lRefCount; - - SIZEL m_sizeExtent; - SIZEL m_sizeExtentHiM; - RECT m_orect; + IAdviseSink* m_spAdviseSink; + IOleClientSite* m_spClientSite; + + DWORD m_advf; + LONG m_lRefCount; TCHAR* m_smltxt; - HWND m_hwnd; - bool m_visible; - bool m_dirAniAllow; +protected: + SIZEL m_sizeExtent; + SIZEL m_sizeExtentHiM; + RECT m_orect; + HWND m_hwnd; + bool m_visible; + bool m_dirAniAllow; public: ISmileyBase(void); @@ -62,10 +62,10 @@ public: virtual void Draw() PURE; virtual void SetPosition(HWND hwnd, LPCRECT lpRect); - // + // // IUnknown members // - STDMETHOD_(ULONG, AddRef)(void); + STDMETHOD_(ULONG, AddRef)(void); STDMETHOD_(ULONG, Release)(void); STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject); @@ -80,8 +80,7 @@ public: STDMETHOD(GetMoniker)(DWORD /* dwAssign */, DWORD /* dwWhichMoniker */, IMoniker** /* ppmk */); STDMETHOD(InitFromData)(IDataObject* /* pDataObject */, BOOL /* fCreation */, DWORD /* dwReserved */); STDMETHOD(GetClipboardData)(DWORD /* dwReserved */, IDataObject** /* ppDataObject */); - STDMETHOD(DoVerb)(LONG /*iVerb*/, LPMSG /* pMsg */, IOleClientSite* /* pActiveSite */, LONG /* lindex */, - HWND /*hwndParent*/, LPCRECT /*lprcPosRect*/); + STDMETHOD(DoVerb)(LONG /*iVerb*/, LPMSG /* pMsg */, IOleClientSite* /* pActiveSite */, LONG /* lindex */, HWND /*hwndParent*/, LPCRECT /*lprcPosRect*/); STDMETHOD(EnumVerbs)(IEnumOLEVERB** /*ppEnumOleVerb*/); STDMETHOD(Update)(void); STDMETHOD(IsUpToDate)(void); @@ -102,8 +101,7 @@ public: STDMETHOD(GetAdvise)(DWORD* /*pAspects*/, DWORD* /*pAdvf*/, IAdviseSink** ppAdvSink); STDMETHOD(Freeze)(DWORD, long, void*, DWORD*); STDMETHOD(Unfreeze)(DWORD); - STDMETHOD(GetColorSet)(DWORD, long, void*, DVTARGETDEVICE*, HDC, - LOGPALETTE**); + STDMETHOD(GetColorSet)(DWORD, long, void*, DVTARGETDEVICE*, HDC, LOGPALETTE**); // // IViewObject2 members @@ -114,6 +112,5 @@ public: // ITooltipData members // STDMETHOD(SetTooltip)(BSTR bstrHint); - STDMETHOD(GetTooltip)(BSTR *bstrHint); + STDMETHOD(GetTooltip)(BSTR *bstrHint); }; - diff --git a/plugins/SmileyAdd/src/dlgboxsubclass.cpp b/plugins/SmileyAdd/src/dlgboxsubclass.cpp index 2bbee5dd06..0c5d6d184c 100644 --- a/plugins/SmileyAdd/src/dlgboxsubclass.cpp +++ b/plugins/SmileyAdd/src/dlgboxsubclass.cpp @@ -19,24 +19,7 @@ along with this program. If not, see . #include "stdafx.h" -//***************************************************// -// DISCLAIMER!!! -// we are not supposed to use this object, so be aware -typedef struct NewMessageWindowLParam -{ - MCONTACT hContact; - int isSend; - const char *szInitialText; -} -msgData; -// this is an undocumented object!!!!!!! -// subject to change in miranda versions...!!!!!! -// DISCLAIMER!!! -//***************************************************// - -static HHOOK g_hMessageHookPre = NULL; -static HANDLE g_hMutex = NULL; -static HANDLE g_hHookMsgWnd = NULL; +static mir_cs csHook; static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); @@ -91,7 +74,6 @@ public: dsb.hSmlButton = NULL; } - ~MsgWndData() { clear(); @@ -139,12 +121,11 @@ public: rect.right += pt.x - rect.left; rect.top = pt.y; rect.left = pt.x; - return rect; } - //helper function - //identifies the message dialog + // helper function + // identifies the message dialog bool IsMessageSendDialog(HWND hwndDlg) { TCHAR szClassName[32] = _T(""); @@ -156,8 +137,8 @@ public: if ((REdit = GetDlgItem(hwndDlg, MI_IDC_LOG)) != NULL) { GetClassName(REdit, szClassName, _countof(szClassName)); if (mir_tstrcmp(szClassName, _T("RichEdit20A")) != 0 && - mir_tstrcmp(szClassName, _T("RichEdit20W")) != 0 && - mir_tstrcmp(szClassName, _T("RICHEDIT50W")) != 0) + mir_tstrcmp(szClassName, _T("RichEdit20W")) != 0 && + mir_tstrcmp(szClassName, _T("RICHEDIT50W")) != 0) return false; } else return false; @@ -165,9 +146,9 @@ public: if ((MEdit = GetDlgItem(hwndDlg, MI_IDC_MESSAGE)) != NULL) { GetClassName(MEdit, szClassName, _countof(szClassName)); if (mir_tstrcmp(szClassName, _T("Edit")) != 0 && - mir_tstrcmp(szClassName, _T("RichEdit20A")) != 0 && - mir_tstrcmp(szClassName, _T("RichEdit20W")) != 0 && - mir_tstrcmp(szClassName, _T("RICHEDIT50W")) != 0) + mir_tstrcmp(szClassName, _T("RichEdit20A")) != 0 && + mir_tstrcmp(szClassName, _T("RichEdit20W")) != 0 && + mir_tstrcmp(szClassName, _T("RICHEDIT50W")) != 0) return false; } else return false; @@ -190,7 +171,7 @@ public: doSmileyButton = opt.ButtonStatus != 0; OldButtonPlace = opt.ButtonStatus == 2; - SmileyPackType* SmileyPack = GetSmileyPack(ProtocolName, hContact); + SmileyPackType *SmileyPack = GetSmileyPack(ProtocolName, hContact); doSmileyButton &= SmileyPack != NULL && SmileyPack->VisibleSmileyCount() != 0; bool showButtonLine; @@ -234,7 +215,7 @@ public: NULL); // window-creation data // Conversion to bitmap done to prevent Miranda from scaling the image - SmileyType* sml = FindButtonSmiley(SmileyPack); + SmileyType *sml = FindButtonSmiley(SmileyPack); if (sml != NULL) { hSmlBmp = sml->GetBitmap(GetSysColor(COLOR_BTNFACE), 0, 0); SendMessage(hSmlButton, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hSmlBmp); @@ -254,18 +235,18 @@ static int CompareMsgWndData(const MsgWndData* p1, const MsgWndData* p2) { return (int)((INT_PTR)p1->hwnd - (INT_PTR)p2->hwnd); } -static LIST g_MsgWndList(10, CompareMsgWndData); +static LIST g_MsgWndList(10, CompareMsgWndData); bool IsOldSrmm(void) { return ServiceExists(MS_MSG_GETWINDOWCLASS) == 0; } - int UpdateSrmmDlg(WPARAM wParam, LPARAM /* lParam */) { - WaitForSingleObject(g_hMutex, 2000); + mir_cslock lck(csHook); + for (int i = 0; i < g_MsgWndList.getCount(); ++i) { if (wParam == 0 || g_MsgWndList[i]->hContact == wParam) { SendMessage(g_MsgWndList[i]->hwnd, WM_SETREDRAW, FALSE, 0); @@ -273,67 +254,51 @@ int UpdateSrmmDlg(WPARAM wParam, LPARAM /* lParam */) SendMessage(g_MsgWndList[i]->hwnd, WM_SETREDRAW, TRUE, 0); } } - ReleaseMutex(g_hMutex); - return 0; } - -//find the dialog info in the stored list +// find the dialog info in the stored list static MsgWndData* IsMsgWnd(HWND hwnd) { - WaitForSingleObject(g_hMutex, 2000); - MsgWndData* res = g_MsgWndList.find((MsgWndData*)&hwnd); - ReleaseMutex(g_hMutex); - - return res; + mir_cslock lck(csHook); + return g_MsgWndList.find((MsgWndData*)&hwnd); } - -static void MsgWndDetect(HWND hwndDlg, MCONTACT hContact, msgData* datm) +static void MsgWndDetect(HWND hwndDlg, MCONTACT hContact) { MsgWndData dat; + if (!dat.IsMessageSendDialog(hwndDlg)) + return; - if (dat.IsMessageSendDialog(hwndDlg)) { - dat.hwnd = hwndDlg; - if (datm != NULL) { - dat.isSend = datm->isSend != 0; - dat.hContact = datm->hContact; - } - else dat.hContact = hContact; - - // Get the protocol for this contact to display correct smileys. - char *protonam = GetContactProto(DecodeMetaContact(dat.hContact)); - if (protonam) { - strncpy(dat.ProtocolName, protonam, sizeof(dat.ProtocolName)); - dat.ProtocolName[sizeof(dat.ProtocolName) - 1] = 0; - } - - WaitForSingleObject(g_hMutex, 2000); + dat.hwnd = hwndDlg; + dat.hContact = hContact; - MsgWndData* msgwnd = g_MsgWndList.find((MsgWndData*)&hwndDlg); - if (msgwnd == NULL) { - msgwnd = new MsgWndData(dat); - g_MsgWndList.insert(msgwnd); - } - else - msgwnd = NULL; - ReleaseMutex(g_hMutex); - - if (msgwnd != NULL) { - mir_subclassWindow(hwndDlg, MessageDlgSubclass); - msgwnd->CreateSmileyButton(); - if (hContact == NULL) - SetRichCallback(msgwnd->REdit, msgwnd->hContact, true, true); - } + // Get the protocol for this contact to display correct smileys. + char *protonam = GetContactProto(DecodeMetaContact(dat.hContact)); + if (protonam) { + strncpy(dat.ProtocolName, protonam, sizeof(dat.ProtocolName)); + dat.ProtocolName[sizeof(dat.ProtocolName) - 1] = 0; + } + + mir_cslock lck(csHook); + + MsgWndData *msgwnd = g_MsgWndList.find((MsgWndData*)&hwndDlg); + if (msgwnd == NULL) { + msgwnd = new MsgWndData(dat); + g_MsgWndList.insert(msgwnd); + + mir_subclassWindow(hwndDlg, MessageDlgSubclass); + msgwnd->CreateSmileyButton(); + if (hContact == NULL) + SetRichCallback(msgwnd->REdit, msgwnd->hContact, true, true); } } -//global subclass function for all dialogs +// global subclass function for all dialogs static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - MsgWndData* dat = IsMsgWnd(hwnd); + MsgWndData *dat = IsMsgWnd(hwnd); if (dat == NULL) return 0; @@ -345,7 +310,7 @@ static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, case DM_APPENDTOLOG: if (opt.PluginSupportEnabled) { - //get length of text now before things can get added... + // get length of text now before things can get added... GETTEXTLENGTHEX gtl; gtl.codepage = 1200; gtl.flags = GTL_PRECISE | GTL_NUMCHARS; @@ -360,29 +325,27 @@ static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, switch (uMsg) { case WM_DESTROY: - WaitForSingleObject(g_hMutex, 2000); { + mir_cslock lck(csHook); int ind = g_MsgWndList.getIndex((MsgWndData*)&hwnd); if (ind != -1) { delete g_MsgWndList[ind]; g_MsgWndList.remove(ind); } } - ReleaseMutex(g_hMutex); break; case WM_SIZE: if (dat->doSmileyButton) { RECT rect = dat->CalcSmileyButtonPos(); - SetWindowPos(dat->hSmlButton, NULL, rect.left, rect.top, - 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE); + SetWindowPos(dat->hSmlButton, NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE); } break; case DM_APPENDTOLOG: if (dat->doSmileyReplace) { - SmileyPackCType* smcp; - SmileyPackType* SmileyPack = GetSmileyPack(dat->ProtocolName, dat->hContact, &smcp); + SmileyPackCType *smcp; + SmileyPackType *SmileyPack = GetSmileyPack(dat->ProtocolName, dat->hContact, &smcp); if (SmileyPack != NULL) { const CHARRANGE sel = { dat->idxLastChar, LONG_MAX }; ReplaceSmileys(dat->REdit, SmileyPack, smcp, sel, false, false, false); @@ -392,8 +355,8 @@ static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, case DM_REMAKELOG: if (dat->doSmileyReplace) { - SmileyPackCType* smcp; - SmileyPackType* SmileyPack = GetSmileyPack(dat->ProtocolName, dat->hContact, &smcp); + SmileyPackCType *smcp; + SmileyPackType *SmileyPack = GetSmileyPack(dat->ProtocolName, dat->hContact, &smcp); if (SmileyPack != NULL) { static const CHARRANGE sel = { 0, LONG_MAX }; ReplaceSmileys(dat->REdit, SmileyPack, smcp, sel, false, false, false); @@ -430,8 +393,7 @@ static LRESULT CALLBACK MessageDlgSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, if (LOWORD(wParam) == MI_IDC_ADD && HIWORD(wParam) == BN_CLICKED && dat->doSmileyButton) { RECT rect = dat->CalcSmileyButtonPos(); - SetWindowPos(dat->hSmlButton, NULL, rect.left, rect.top, - 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE); + SetWindowPos(dat->hSmlButton, NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE); } break; } @@ -444,7 +406,7 @@ static int MsgDlgHook(WPARAM, LPARAM lParam) const MessageWindowEventData *wndEvtData = (MessageWindowEventData*)lParam; switch (wndEvtData->uType) { case MSG_WINDOW_EVT_OPENING: - MsgWndDetect(wndEvtData->hwndWindow, wndEvtData->hContact, NULL); + MsgWndDetect(wndEvtData->hwndWindow, wndEvtData->hContact); if (wndEvtData->cbSize >= sizeof(MessageWindowEventData)) { SetRichOwnerCallback(wndEvtData->hwndWindow, wndEvtData->hwndInput, wndEvtData->hwndLog); @@ -477,45 +439,15 @@ static int MsgDlgHook(WPARAM, LPARAM lParam) return 0; } - -//global subclass function for all dialogs -static LRESULT CALLBACK MsgDlgHookProcPre(int code, WPARAM wParam, LPARAM lParam) -{ - const CWPSTRUCT *msg = (CWPSTRUCT*)lParam; - - if (code == HC_ACTION && msg->message == WM_INITDIALOG) - MsgWndDetect(msg->hwnd, NULL, (msgData*)msg->lParam); - - return CallNextHookEx(g_hMessageHookPre, code, wParam, lParam); -} - - void InstallDialogBoxHook(void) { - g_hMutex = CreateMutex(NULL, FALSE, NULL); - g_hHookMsgWnd = HookEvent(ME_MSG_WINDOWEVENT, MsgDlgHook); - - // Hook message API - if (g_hHookMsgWnd == NULL) - g_hMessageHookPre = SetWindowsHookEx(WH_CALLWNDPROC, MsgDlgHookProcPre, - NULL, GetCurrentThreadId()); + HookEvent(ME_MSG_WINDOWEVENT, MsgDlgHook); } - void RemoveDialogBoxHook(void) { - if (g_hHookMsgWnd) UnhookEvent(g_hHookMsgWnd); - if (g_hMessageHookPre) UnhookWindowsHookEx(g_hMessageHookPre); - - WaitForSingleObject(g_hMutex, 2000); + mir_cslock lck(csHook); for (int i = 0; i < g_MsgWndList.getCount(); i++) delete g_MsgWndList[i]; g_MsgWndList.destroy(); - ReleaseMutex(g_hMutex); - - if (g_hMutex) CloseHandle(g_hMutex); - - g_hHookMsgWnd = NULL; - g_hMessageHookPre = NULL; - g_hMutex = NULL; } diff --git a/plugins/SmileyAdd/src/richcall.cpp b/plugins/SmileyAdd/src/richcall.cpp index 64530d6941..bcb93a8720 100644 --- a/plugins/SmileyAdd/src/richcall.cpp +++ b/plugins/SmileyAdd/src/richcall.cpp @@ -35,40 +35,23 @@ struct RichEditOwnerData HWND hwndLog; }; -static int CompareRichEditData(const RichEditData* p1, const RichEditData* p2) -{ - return (int)((INT_PTR)p1->hwnd - (INT_PTR)p2->hwnd); -} - -static LIST g_RichEditList(10, CompareRichEditData); - -static int CompareRichEditData(const RichEditOwnerData* p1, const RichEditOwnerData* p2) -{ - return (int)((INT_PTR)p1->hwnd - (INT_PTR)p2->hwnd); -} - -static LIST g_RichEditOwnerList(5, CompareRichEditData); +static LIST g_RichEditList(10, HandleKeySortT); +static LIST g_RichEditOwnerList(5, HandleKeySortT); static void SetPosition(HWND hwnd) { - IRichEditOle* RichEditOle; + CComPtr RichEditOle; if (SendMessage(hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&RichEditOle) == 0) return; - ITextDocument* TextDocument; - if (RichEditOle->QueryInterface(IID_ITextDocument, (void**)&TextDocument) != S_OK) { - RichEditOle->Release(); + CComPtr TextDocument; + if (RichEditOle->QueryInterface(IID_ITextDocument, (void**)&TextDocument) != S_OK) return; - } // retrieve text range - ITextRange* TextRange; - if (TextDocument->Range(0, 0, &TextRange) != S_OK) { - TextDocument->Release(); - RichEditOle->Release(); + CComPtr TextRange; + if (TextDocument->Range(0, 0, &TextRange) != S_OK) return; - } - TextDocument->Release(); int objectCount = RichEditOle->GetObjectCount(); for (int i = objectCount - 1; i >= 0; i--) { @@ -76,14 +59,16 @@ static void SetPosition(HWND hwnd) reObj.cbStruct = sizeof(REOBJECT); HRESULT hr = RichEditOle->GetObject(i, &reObj, REO_GETOBJ_POLEOBJ); - if (FAILED(hr)) continue; + if (FAILED(hr)) + continue; - ISmileyBase *igsc = NULL; + CComPtr igsc; if (reObj.clsid == CLSID_NULL) reObj.poleobj->QueryInterface(IID_ISmileyAddSmiley, (void**)&igsc); reObj.poleobj->Release(); - if (igsc == NULL) continue; + if (igsc == NULL) + continue; TextRange->SetRange(reObj.cp, reObj.cp); @@ -107,15 +92,12 @@ static void SetPosition(HWND hwnd) else rect.top = -1; igsc->SetPosition(hwnd, &rect); - igsc->Release(); } - TextRange->Release(); - RichEditOle->Release(); } static void SetTooltip(long x, long y, HWND hwnd, RichEditData* rdt) { - TCHAR* smltxt; + TCHAR *smltxt; int needtip = CheckForTip(x, y, hwnd, &smltxt); if (needtip == rdt->tipActive) return; @@ -314,15 +296,13 @@ static LRESULT CALLBACK RichEditSubclass(HWND hwnd, UINT uMsg, WPARAM wParam, LP bool SetRichCallback(HWND hwnd, MCONTACT hContact, bool subany, bool subnew) { - RichEditData* rdt = g_RichEditList.find((RichEditData*)&hwnd); + RichEditData *rdt = g_RichEditList.find((RichEditData*)&hwnd); if (rdt == NULL) { - IRichEditOle* RichEditOle; + CComPtr RichEditOle; if (SendMessage(hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&RichEditOle) == 0) return false; - RichEditOle->Release(); rdt = new RichEditData; - rdt->hwnd = hwnd; rdt->hContact = hContact; rdt->inputarea = (GetWindowLongPtr(hwnd, GWL_STYLE) & ES_READONLY) == 0; @@ -407,7 +387,7 @@ static LRESULT CALLBACK RichEditOwnerSubclass(HWND hwnd, UINT uMsg, WPARAM wPara void SetRichOwnerCallback(HWND hwnd, HWND hwndInput, HWND hwndLog) { - RichEditOwnerData* rdto = g_RichEditOwnerList.find((RichEditOwnerData*)&hwnd); + RichEditOwnerData *rdto = g_RichEditOwnerList.find((RichEditOwnerData*)&hwnd); if (rdto == NULL) { rdto = new RichEditOwnerData; rdto->hwnd = hwnd; @@ -421,8 +401,10 @@ void SetRichOwnerCallback(HWND hwnd, HWND hwndInput, HWND hwndLog) mir_subclassWindow(hwnd, RichEditOwnerSubclass); } else { - if (rdto->hwndInput == NULL) rdto->hwndInput = hwndInput; - if (rdto->hwndLog == NULL) rdto->hwndLog = hwndLog; + if (rdto->hwndInput == NULL) + rdto->hwndInput = hwndInput; + if (rdto->hwndLog == NULL) + rdto->hwndLog = hwndLog; } } diff --git a/plugins/SmileyAdd/src/smileyroutines.cpp b/plugins/SmileyAdd/src/smileyroutines.cpp index 4e5534bbbc..1fee508cd0 100644 --- a/plugins/SmileyAdd/src/smileyroutines.cpp +++ b/plugins/SmileyAdd/src/smileyroutines.cpp @@ -183,47 +183,34 @@ void UpdateSelection(CHARRANGE& sel, int pos, int dif) } } -void ReplaceSmileys(HWND hwnd, SmileyPackType* smp, SmileyPackCType* smcp, const CHARRANGE& sel, - bool useHidden, bool ignoreLast, bool unFreeze, bool fireView) +void ReplaceSmileys(HWND hwnd, SmileyPackType* smp, SmileyPackCType* smcp, const CHARRANGE& sel, bool useHidden, bool ignoreLast, bool unFreeze, bool fireView) { - IRichEditOle* RichEditOle = NULL; + CComPtr RichEditOle; if (SendMessage(hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&RichEditOle) == 0) return; if (RichEditOle == NULL) return; - ITextDocument* TextDocument = NULL; - if (RichEditOle->QueryInterface(IID_ITextDocument, (void**)&TextDocument) != S_OK) { - RichEditOle->Release(); + CComPtr TextDocument; + if (RichEditOle->QueryInterface(IID_ITextDocument, (void**)&TextDocument) != S_OK) return; - } long cnt; if (smp == NULL && smcp == NULL) { - if (unFreeze) TextDocument->Unfreeze(&cnt); - TextDocument->Release(); - RichEditOle->Release(); + if (unFreeze) + TextDocument->Unfreeze(&cnt); return; } // retrieve text range - ITextRange* TextRange; - if (TextDocument->Range(sel.cpMin, sel.cpMax, &TextRange) != S_OK) { - TextDocument->Release(); - RichEditOle->Release(); + CComPtr TextRange; + if (TextDocument->Range(sel.cpMin, sel.cpMax, &TextRange) != S_OK) return; - } // retrieve text to parse for smileys BSTR btxt = 0; - if (TextRange->GetText(&btxt) != S_OK) { - TextRange->Release(); - TextDocument->Release(); - RichEditOle->Release(); + if (TextRange->GetText(&btxt) != S_OK) return; - } // fallthrough - - TextRange->Release(); SmileysQueueType smllist; LookupAllSmileys(smp, smcp, btxt, smllist, false); @@ -243,10 +230,10 @@ void ReplaceSmileys(HWND hwnd, SmileyPackType* smp, SmileyPackCType* smcp, const bool rdo = (GetWindowLongPtr(hwnd, GWL_STYLE) & ES_READONLY) != 0; if (rdo) SendMessage(hwnd, EM_SETREADONLY, FALSE, 0); - ITextSelection* TextSelection; + CComPtr TextSelection; TextDocument->GetSelection(&TextSelection); - ITextFont *TextFont; + CComPtr TextFont; TextSelection->GetFont(&TextFont); //save selection @@ -305,9 +292,10 @@ void ReplaceSmileys(HWND hwnd, SmileyPackType* smp, SmileyPackCType* smcp, const continue; } - SmileyType* sml = smllist[j].sml; - SmileyCType* smlc = smllist[j].smlc; - if (sml == NULL && smlc == NULL) continue; + SmileyType *sml = smllist[j].sml; + SmileyCType *smlc = smllist[j].smlc; + if (sml == NULL && smlc == NULL) + continue; // Select text analyze TextSelection->SetRange(smlpos.cpMin, smlpos.cpMax); @@ -439,53 +427,46 @@ void ReplaceSmileys(HWND hwnd, SmileyPackType* smp, SmileyPackCType* smcp, const SysFreeString(spaceb); TextSelection->SetRange(oldSel.cpMin, oldSel.cpMax); - if (rdo) SendMessage(hwnd, EM_SETREADONLY, TRUE, 0); - - TextFont->Release(); - TextSelection->Release(); + if (rdo) + SendMessage(hwnd, EM_SETREADONLY, TRUE, 0); ReleaseDC(hwnd, hdc); TextDocument->Unfreeze(&cnt); - if (cnt == 0) UpdateWindow(hwnd); + if (cnt == 0) + UpdateWindow(hwnd); } if (unFreeze) { TextDocument->Unfreeze(&cnt); - if (cnt == 0) UpdateWindow(hwnd); + if (cnt == 0) + UpdateWindow(hwnd); } - - TextDocument->Release(); - RichEditOle->Release(); } -void ReplaceSmileysWithText(HWND hwnd, CHARRANGE& sel, bool keepFrozen) +void ReplaceSmileysWithText(HWND hwnd, CHARRANGE &sel, bool keepFrozen) { - IRichEditOle* RichEditOle = NULL; + CComPtr RichEditOle = NULL; if (SendMessage(hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&RichEditOle) == 0) return; if (RichEditOle == NULL) return; - ITextDocument* TextDocument; - if (RichEditOle->QueryInterface(IID_ITextDocument, (void**)&TextDocument) != S_OK) { - RichEditOle->Release(); + CComPtr TextDocument; + if (RichEditOle->QueryInterface(IID_ITextDocument, (void**)&TextDocument) != S_OK) return; - } // retrieve text range - ITextRange* TextRange; - if (TextDocument->Range(0, 0, &TextRange) != S_OK) { - TextDocument->Release(); - RichEditOle->Release(); + CComPtr TextRange; + if (TextDocument->Range(0, 0, &TextRange) != S_OK) return; - } long cnt; TextDocument->Freeze(&cnt); bool rdo = (GetWindowLongPtr(hwnd, GWL_STYLE) & ES_READONLY) != 0; - if (rdo) SendMessage(hwnd, EM_SETREADONLY, FALSE, 0); + if (rdo) + SendMessage(hwnd, EM_SETREADONLY, FALSE, 0); CHARRANGE oldSel; SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM)&oldSel); @@ -528,10 +509,8 @@ void ReplaceSmileysWithText(HWND hwnd, CHARRANGE& sel, bool keepFrozen) } SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM)&oldSel); - if (rdo) SendMessage(hwnd, EM_SETREADONLY, TRUE, 0); - if (!keepFrozen) TextDocument->Unfreeze(&cnt); - - TextRange->Release(); - TextDocument->Release(); - RichEditOle->Release(); + if (rdo) + SendMessage(hwnd, EM_SETREADONLY, TRUE, 0); + if (!keepFrozen) + TextDocument->Unfreeze(&cnt); } diff --git a/plugins/SmileyAdd/src/smileyroutines.h b/plugins/SmileyAdd/src/smileyroutines.h index f02f7cbd2d..3b0a08d60e 100644 --- a/plugins/SmileyAdd/src/smileyroutines.h +++ b/plugins/SmileyAdd/src/smileyroutines.h @@ -34,13 +34,10 @@ typedef SMOBJLIST SmileysQueueType; -void LookupAllSmileys(SmileyPackType* smileyPack, SmileyPackCType* smileyCPack, const TCHAR* lpstrText, - SmileysQueueType& smllist, const bool firstOnly); -void ReplaceSmileys(HWND hwnd, SmileyPackType* smp, SmileyPackCType* smcp, const CHARRANGE& sel, - bool useHidden, bool ignoreLast, bool unFreeze, bool fireView = 0); +void LookupAllSmileys(SmileyPackType* smileyPack, SmileyPackCType* smileyCPack, const TCHAR* lpstrText, SmileysQueueType& smllist, const bool firstOnly); +void ReplaceSmileys(HWND hwnd, SmileyPackType* smp, SmileyPackCType* smcp, const CHARRANGE& sel, bool useHidden, bool ignoreLast, bool unFreeze, bool fireView = 0); void ReplaceSmileysWithText(HWND hwnd, CHARRANGE& sel, bool keepFrozen); -void FindSmileyInText(SmileyPackType* smp, const TCHAR* str, - unsigned& first, unsigned& size, SmileyType** index); +void FindSmileyInText(SmileyPackType* smp, const TCHAR* str, unsigned& first, unsigned& size, SmileyType** index); SmileyType* FindButtonSmiley(SmileyPackType* smp); #endif diff --git a/plugins/SmileyAdd/src/stdafx.h b/plugins/SmileyAdd/src/stdafx.h index 9cedd2947c..66e7f9f93a 100644 --- a/plugins/SmileyAdd/src/stdafx.h +++ b/plugins/SmileyAdd/src/stdafx.h @@ -30,17 +30,19 @@ along with this program. If not, see . #define _CRTDBG_MAP_ALLOC #include +#include +#include +#include +#include +#include +#include + #include #include #include #include -#include -#include -#include -#include #include -#include -#include + #include #include #include @@ -49,6 +51,7 @@ along with this program. If not, see . #include #include +#include #include #include #include -- cgit v1.2.3