1 /*****************************************************************************
2 * oleinplaceobject.cpp: ActiveX control for VLC
3 *****************************************************************************
4 * Copyright (C) 2005 the VideoLAN team
6 * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
21 *****************************************************************************/
24 #include "oleinplaceobject.h"
30 STDMETHODIMP
VLCOleInPlaceObject::GetWindow(HWND
*pHwnd
)
36 if( _p_instance
->isInPlaceActive() )
38 if( NULL
!= (*pHwnd
= _p_instance
->getInPlaceWindow()) )
44 STDMETHODIMP
VLCOleInPlaceObject::ContextSensitiveHelp(BOOL fEnterMode
)
49 STDMETHODIMP
VLCOleInPlaceObject::InPlaceDeactivate(void)
51 if( _p_instance
->isInPlaceActive() )
55 _p_instance
->onInPlaceDeactivate();
57 LPOLEOBJECT p_oleObject
;
58 if( SUCCEEDED(QueryInterface(IID_IOleObject
, (void**)&p_oleObject
)) )
60 LPOLECLIENTSITE p_clientSite
;
61 if( SUCCEEDED(p_oleObject
->GetClientSite(&p_clientSite
)) )
63 LPOLEINPLACESITE p_inPlaceSite
;
65 if( SUCCEEDED(p_clientSite
->QueryInterface(IID_IOleInPlaceSite
, (void**)&p_inPlaceSite
)) )
67 p_inPlaceSite
->OnInPlaceDeactivate();
68 p_inPlaceSite
->Release();
70 p_clientSite
->Release();
72 p_oleObject
->Release();
79 STDMETHODIMP
VLCOleInPlaceObject::UIDeactivate(void)
81 if( _p_instance
->isInPlaceActive() )
83 if( _p_instance
->hasFocus() )
84 _p_instance
->setFocus(FALSE
);
86 LPOLEOBJECT p_oleObject
;
87 if( SUCCEEDED(QueryInterface(IID_IOleObject
, (void**)&p_oleObject
)) )
89 LPOLECLIENTSITE p_clientSite
;
90 if( SUCCEEDED(p_oleObject
->GetClientSite(&p_clientSite
)) )
92 LPOLEINPLACESITE p_inPlaceSite
;
94 if( SUCCEEDED(p_clientSite
->QueryInterface(IID_IOleInPlaceSite
, (void**)&p_inPlaceSite
)) )
96 LPOLEINPLACEFRAME p_inPlaceFrame
;
97 LPOLEINPLACEUIWINDOW p_inPlaceUIWindow
;
98 OLEINPLACEFRAMEINFO oleFrameInfo
;
99 RECT posRect
, clipRect
;
101 oleFrameInfo
.cb
= sizeof(OLEINPLACEFRAMEINFO
);
102 if( SUCCEEDED(p_inPlaceSite
->GetWindowContext(&p_inPlaceFrame
, &p_inPlaceUIWindow
, &posRect
, &clipRect
, &oleFrameInfo
)) )
106 p_inPlaceFrame
->SetActiveObject(NULL
, NULL
);
107 p_inPlaceFrame
->Release();
109 if( p_inPlaceUIWindow
)
111 p_inPlaceUIWindow
->SetActiveObject(NULL
, NULL
);
112 p_inPlaceUIWindow
->Release();
115 p_inPlaceSite
->OnUIDeactivate(FALSE
);
116 p_inPlaceSite
->Release();
118 p_clientSite
->Release();
120 p_oleObject
->Release();
127 STDMETHODIMP
VLCOleInPlaceObject::SetObjectRects(LPCRECT lprcPosRect
, LPCRECT lprcClipRect
)
129 if( _p_instance
->isInPlaceActive() )
131 _p_instance
->onPositionChange(lprcPosRect
, lprcClipRect
);
137 STDMETHODIMP
VLCOleInPlaceObject::ReactivateAndUndo(void)
139 return INPLACE_E_NOTUNDOABLE
;