]> git.sesse.net Git - vlc/blob - activex/oleinplaceobject.cpp
bump version to 0.8.4-test3
[vlc] / activex / oleinplaceobject.cpp
1 /*****************************************************************************
2  * oleinplaceobject.cpp: ActiveX control for VLC
3  *****************************************************************************
4  * Copyright (C) 2005 the VideoLAN team
5  *
6  * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>
7  *
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.
12  *
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.
17  *
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., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
21  *****************************************************************************/
22
23 #include "plugin.h"
24 #include "oleinplaceobject.h"
25
26 #include <docobj.h>
27
28 using namespace std;
29
30 STDMETHODIMP VLCOleInPlaceObject::GetWindow(HWND *pHwnd)
31 {
32     if( NULL == pHwnd )
33         return E_POINTER;
34
35     *pHwnd = NULL;
36     if( _p_instance->isInPlaceActive() )
37     {
38         if( NULL != (*pHwnd = _p_instance->getInPlaceWindow()) )
39             return S_OK;
40     }
41     return E_FAIL;
42 };
43
44 STDMETHODIMP VLCOleInPlaceObject::ContextSensitiveHelp(BOOL fEnterMode)
45 {
46     return E_NOTIMPL;
47 };
48
49 STDMETHODIMP VLCOleInPlaceObject::InPlaceDeactivate(void)
50 {
51     if( _p_instance->isInPlaceActive() )
52     {
53         UIDeactivate();
54
55         _p_instance->onInPlaceDeactivate();
56
57         LPOLEOBJECT p_oleObject;
58         if( SUCCEEDED(QueryInterface(IID_IOleObject, (void**)&p_oleObject)) ) 
59         {
60             LPOLECLIENTSITE p_clientSite;
61             if( SUCCEEDED(p_oleObject->GetClientSite(&p_clientSite)) )
62             {
63                 LPOLEINPLACESITE p_inPlaceSite;
64
65                 if( SUCCEEDED(p_clientSite->QueryInterface(IID_IOleInPlaceSite, (void**)&p_inPlaceSite)) )
66                 {
67                     p_inPlaceSite->OnInPlaceDeactivate();
68                     p_inPlaceSite->Release();
69                 }
70                 p_clientSite->Release();
71             }
72             p_oleObject->Release();
73         }
74         return S_OK;
75     }
76     return E_UNEXPECTED;
77 };
78
79 STDMETHODIMP VLCOleInPlaceObject::UIDeactivate(void)
80 {
81     if( _p_instance->isInPlaceActive() )
82     {
83         if( _p_instance->hasFocus() )
84         {
85             _p_instance->setFocus(FALSE);
86         }
87
88         LPOLEOBJECT p_oleObject;
89         if( SUCCEEDED(QueryInterface(IID_IOleObject, (void**)&p_oleObject)) ) 
90         {
91             LPOLECLIENTSITE p_clientSite;
92             if( SUCCEEDED(p_oleObject->GetClientSite(&p_clientSite)) )
93             {
94                 LPOLEINPLACESITE p_inPlaceSite;
95
96                 if( SUCCEEDED(p_clientSite->QueryInterface(IID_IOleInPlaceSite, (void**)&p_inPlaceSite)) )
97                 {
98                     p_inPlaceSite->OnUIDeactivate(FALSE);
99                     p_inPlaceSite->Release();
100                 }
101                 p_clientSite->Release();
102             }
103             p_oleObject->Release();
104         }
105         return S_OK;
106     }
107     return E_UNEXPECTED;
108 };
109
110 STDMETHODIMP VLCOleInPlaceObject::SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect)
111 {
112     if( _p_instance->isInPlaceActive() )
113     {
114         _p_instance->onPositionChange(lprcPosRect, lprcClipRect);
115         return S_OK;
116     }
117     return E_UNEXPECTED;
118 };
119
120 STDMETHODIMP VLCOleInPlaceObject::ReactivateAndUndo(void)
121 {
122     return INPLACE_E_NOTUNDOABLE;
123 };
124