/*****************************************************************************
* oleinplaceobject.cpp: ActiveX control for VLC
*****************************************************************************
- * Copyright (C) 2005 VideoLAN
+ * Copyright (C) 2005 the VideoLAN team
*
* Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
*
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "plugin.h"
STDMETHODIMP VLCOleInPlaceObject::GetWindow(HWND *pHwnd)
{
if( NULL == pHwnd )
- return E_INVALIDARG;
+ return E_POINTER;
+ *pHwnd = NULL;
if( _p_instance->isInPlaceActive() )
{
if( NULL != (*pHwnd = _p_instance->getInPlaceWindow()) )
return S_OK;
-
- return E_FAIL;
}
- *pHwnd = NULL;
-
- return E_UNEXPECTED;
+ return E_FAIL;
};
STDMETHODIMP VLCOleInPlaceObject::ContextSensitiveHelp(BOOL fEnterMode)
if( _p_instance->isInPlaceActive() )
{
UIDeactivate();
+
_p_instance->onInPlaceDeactivate();
LPOLEOBJECT p_oleObject;
if( _p_instance->isInPlaceActive() )
{
if( _p_instance->hasFocus() )
- {
_p_instance->setFocus(FALSE);
- LPOLEOBJECT p_oleObject;
- if( SUCCEEDED(QueryInterface(IID_IOleObject, (void**)&p_oleObject)) )
+ LPOLEOBJECT p_oleObject;
+ if( SUCCEEDED(QueryInterface(IID_IOleObject, (void**)&p_oleObject)) )
+ {
+ LPOLECLIENTSITE p_clientSite;
+ if( SUCCEEDED(p_oleObject->GetClientSite(&p_clientSite)) )
{
- LPOLECLIENTSITE p_clientSite;
- if( SUCCEEDED(p_oleObject->GetClientSite(&p_clientSite)) )
+ LPOLEINPLACESITE p_inPlaceSite;
+
+ if( SUCCEEDED(p_clientSite->QueryInterface(IID_IOleInPlaceSite, (void**)&p_inPlaceSite)) )
{
- LPOLEINPLACESITE p_inPlaceSite;
+ LPOLEINPLACEFRAME p_inPlaceFrame;
+ LPOLEINPLACEUIWINDOW p_inPlaceUIWindow;
+ OLEINPLACEFRAMEINFO oleFrameInfo;
+ RECT posRect, clipRect;
- if( SUCCEEDED(p_clientSite->QueryInterface(IID_IOleInPlaceSite, (void**)&p_inPlaceSite)) )
+ oleFrameInfo.cb = sizeof(OLEINPLACEFRAMEINFO);
+ if( SUCCEEDED(p_inPlaceSite->GetWindowContext(&p_inPlaceFrame, &p_inPlaceUIWindow, &posRect, &clipRect, &oleFrameInfo)) )
{
- p_inPlaceSite->OnUIDeactivate(FALSE);
- p_inPlaceSite->Release();
+ if( p_inPlaceFrame )
+ {
+ p_inPlaceFrame->SetActiveObject(NULL, NULL);
+ p_inPlaceFrame->Release();
+ }
+ if( p_inPlaceUIWindow )
+ {
+ p_inPlaceUIWindow->SetActiveObject(NULL, NULL);
+ p_inPlaceUIWindow->Release();
+ }
}
- p_clientSite->Release();
+ p_inPlaceSite->OnUIDeactivate(FALSE);
+ p_inPlaceSite->Release();
}
- p_oleObject->Release();
+ p_clientSite->Release();
}
- return S_OK;
+ p_oleObject->Release();
}
+ return S_OK;
}
return E_UNEXPECTED;
};