X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=activex%2Foleinplaceobject.cpp;h=5ea9b39722aff87665b9d0c0c84b27115518bea2;hb=0afbc3c3bcd0f747b3adbb15b4dcfae7977e2f9e;hp=29261802129e97a189b430054e68363649386169;hpb=85b29bdc288a1573d43bd524908be5748a9b3640;p=vlc diff --git a/activex/oleinplaceobject.cpp b/activex/oleinplaceobject.cpp index 2926180212..5ea9b39722 100644 --- a/activex/oleinplaceobject.cpp +++ b/activex/oleinplaceobject.cpp @@ -1,7 +1,7 @@ /***************************************************************************** * oleinplaceobject.cpp: ActiveX control for VLC ***************************************************************************** - * Copyright (C) 2005 VideoLAN (Centrale Réseaux) and its contributors + * Copyright (C) 2005 the VideoLAN team * * Authors: Damien Fouilleul * @@ -17,7 +17,7 @@ * * 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" @@ -30,18 +30,15 @@ using namespace std; 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) @@ -54,6 +51,7 @@ STDMETHODIMP VLCOleInPlaceObject::InPlaceDeactivate(void) if( _p_instance->isInPlaceActive() ) { UIDeactivate(); + _p_instance->onInPlaceDeactivate(); LPOLEOBJECT p_oleObject; @@ -83,28 +81,45 @@ STDMETHODIMP VLCOleInPlaceObject::UIDeactivate(void) 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; };