X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=base%2Fshell%2Frshell%2FCMenuSite.cpp;h=a90c89b56d6b8de1c6ab94624c7dcfc4d8ed2839;hp=02c0ece5230589485ca24b2bc3968ca4d7ff504a;hb=ad40525f61056e0bd158277fe43cc87bda634482;hpb=ddb3d908c999f6ede2ee7eba3ed9d41cf291be68 diff --git a/base/shell/rshell/CMenuSite.cpp b/base/shell/rshell/CMenuSite.cpp index 02c0ece5230..a90c89b56d6 100644 --- a/base/shell/rshell/CMenuSite.cpp +++ b/base/shell/rshell/CMenuSite.cpp @@ -17,101 +17,16 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ - #include "precomp.h" #include #include -WINE_DEFAULT_DEBUG_CHANNEL(menusite); +#include "CMenuSite.h" -class CMenuSite : - public CComObjectRootEx, - public CWindowImpl, - public IBandSite, - public IDeskBarClient, - public IOleCommandTarget, - public IInputObject, - public IInputObjectSite, - public IWinEventHandler, - public IServiceProvider -{ -private: - CComPtr m_DeskBarSite; - CComPtr m_BandObject; - CComPtr m_DeskBand; - CComPtr m_WinEventHandler; - HWND m_hWndBand; - -public: - CMenuSite(); - ~CMenuSite() {} - - DECLARE_WND_CLASS_EX(_T("MenuSite"), 0, COLOR_MENU) - - DECLARE_NOT_AGGREGATABLE(CMenuSite) - DECLARE_PROTECT_FINAL_CONSTRUCT() - BEGIN_COM_MAP(CMenuSite) - COM_INTERFACE_ENTRY_IID(IID_IBandSite, IBandSite) - COM_INTERFACE_ENTRY_IID(IID_IDeskBarClient, IDeskBarClient) - COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow) - COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget) - COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject) - COM_INTERFACE_ENTRY_IID(IID_IInputObjectSite, IInputObjectSite) - COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler) - COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider) - END_COM_MAP() - - // IBandSite - virtual HRESULT STDMETHODCALLTYPE AddBand(IUnknown * punk); - virtual HRESULT STDMETHODCALLTYPE EnumBands(UINT uBand, DWORD* pdwBandID); - virtual HRESULT STDMETHODCALLTYPE QueryBand(DWORD dwBandID, IDeskBand **ppstb, DWORD *pdwState, LPWSTR pszName, int cchName); - virtual HRESULT STDMETHODCALLTYPE GetBandObject(DWORD dwBandID, REFIID riid, VOID **ppv); - - // IDeskBarClient - virtual HRESULT STDMETHODCALLTYPE SetDeskBarSite(IUnknown *punkSite); - virtual HRESULT STDMETHODCALLTYPE GetSize(DWORD dwWhich, LPRECT prc); - virtual HRESULT STDMETHODCALLTYPE UIActivateDBC(DWORD dwState); - - // IOleWindow - virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd); - - // IOleCommandTarget - virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID * pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText); - virtual HRESULT STDMETHODCALLTYPE Exec(const GUID * pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut); - - // IInputObject - virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg); - virtual HRESULT STDMETHODCALLTYPE HasFocusIO(); - virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorIO(LPMSG lpMsg); - - // IInputObjectSite - virtual HRESULT STDMETHODCALLTYPE OnFocusChangeIS(IUnknown *punkObj, BOOL fSetFocus); - - // IWinEventHandler - virtual HRESULT STDMETHODCALLTYPE IsWindowOwner(HWND hWnd); - virtual HRESULT STDMETHODCALLTYPE OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult); - - // IServiceProvider - virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject); - - - // Using custom message map instead - virtual BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD mapId = 0); - - // UNIMPLEMENTED - virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode); - virtual HRESULT STDMETHODCALLTYPE GetBandSiteInfo(BANDSITEINFO *pbsinfo); - virtual HRESULT STDMETHODCALLTYPE RemoveBand(DWORD dwBandID); - virtual HRESULT STDMETHODCALLTYPE SetBandSiteInfo(const BANDSITEINFO *pbsinfo); - virtual HRESULT STDMETHODCALLTYPE SetBandState(DWORD dwBandID, DWORD dwMask, DWORD dwState); - virtual HRESULT STDMETHODCALLTYPE SetModeDBC(DWORD dwMode); - -private: - IUnknown * ToIUnknown() { return static_cast(this); } -}; +WINE_DEFAULT_DEBUG_CHANNEL(menusite); extern "C" -HRESULT CMenuSite_Constructor(REFIID riid, LPVOID *ppv) +HRESULT WINAPI CMenuSite_Constructor(REFIID riid, LPVOID *ppv) { *ppv = NULL; @@ -122,7 +37,7 @@ HRESULT CMenuSite_Constructor(REFIID riid, LPVOID *ppv) HRESULT hr = site->QueryInterface(riid, ppv); - if (FAILED(hr)) + if (FAILED_UNEXPECTEDLY(hr)) site->Release(); return hr; @@ -188,13 +103,17 @@ HRESULT STDMETHODCALLTYPE CMenuSite::AddBand(IUnknown * punk) #define TO_HRESULT(x) ((HRESULT)(S_OK+(x))) - if (SHIsSameObject(punk, m_BandObject)) + CComPtr pUnknown; + + punk->QueryInterface(IID_PPV_ARG(IUnknown, &pUnknown)); + + if (pUnknown == m_BandObject) return TO_HRESULT(0); if (m_BandObject) { hr = IUnknown_SetSite(m_BandObject, NULL); - if (FAILED(hr)) + if (FAILED_UNEXPECTEDLY(hr)) return hr; } @@ -203,28 +122,26 @@ HRESULT STDMETHODCALLTYPE CMenuSite::AddBand(IUnknown * punk) m_WinEventHandler = NULL; m_hWndBand = NULL; - if (!punk) + if (!pUnknown) return TO_HRESULT(0); - hr = punk->QueryInterface(IID_PPV_ARG(IDeskBand, &m_DeskBand)); - if (FAILED(hr)) + hr = pUnknown->QueryInterface(IID_PPV_ARG(IDeskBand, &m_DeskBand)); + if (FAILED_UNEXPECTEDLY(hr)) return hr; - hr = punk->QueryInterface(IID_PPV_ARG(IWinEventHandler, &m_WinEventHandler)); - if (FAILED(hr)) + hr = pUnknown->QueryInterface(IID_PPV_ARG(IWinEventHandler, &m_WinEventHandler)); + if (FAILED_UNEXPECTEDLY(hr)) return hr; - hr = IUnknown_SetSite(punk, this->ToIUnknown()); - if (FAILED(hr)) + hr = IUnknown_SetSite(pUnknown, this->ToIUnknown()); + if (FAILED_UNEXPECTEDLY(hr)) return hr; - hr = IUnknown_GetWindow(punk, &m_hWndBand); - if (FAILED(hr)) + hr = IUnknown_GetWindow(pUnknown, &m_hWndBand); + if (FAILED_UNEXPECTEDLY(hr)) return hr; - m_BandObject = punk; - - punk->AddRef(); + m_BandObject = pUnknown; return TO_HRESULT(0); } @@ -335,13 +252,13 @@ HRESULT STDMETHODCALLTYPE CMenuSite::QueryService(REFGUID guidService, REFIID ri IsEqualGUID(guidService, SID_SMenuBandChild)) { if (m_BandObject == NULL) - return E_FAIL; + return E_NOINTERFACE; return IUnknown_QueryService(m_BandObject, guidService, riid, ppvObject); } if (!m_DeskBarSite) - return E_FAIL; + return E_NOINTERFACE; return IUnknown_QueryService(m_DeskBarSite, guidService, riid, ppvObject); }