]> git.sesse.net Git - vlc/blob - activex/oleinplaceobject.cpp
97db7231e8f6b6c12010cbc99b9fcc27548085b0
[vlc] / activex / oleinplaceobject.cpp
1 /*****************************************************************************\r
2  * oleinplaceobject.cpp: ActiveX control for VLC\r
3  *****************************************************************************\r
4  * Copyright (C) 2005 VideoLAN\r
5  *\r
6  * Authors: Damien Fouilleul <Damien.Fouilleul@laposte.net>\r
7  *\r
8  * This program is free software; you can redistribute it and/or modify\r
9  * it under the terms of the GNU General Public License as published by\r
10  * the Free Software Foundation; either version 2 of the License, or\r
11  * (at your option) any later version.\r
12  *\r
13  * This program is distributed in the hope that it will be useful,\r
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
16  * GNU General Public License for more details.\r
17  *\r
18  * You should have received a copy of the GNU General Public License\r
19  * along with this program; if not, write to the Free Software\r
20  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
21  *****************************************************************************/\r
22 \r
23 #include "plugin.h"\r
24 #include "oleinplaceobject.h"\r
25 \r
26 #include <docobj.h>\r
27 \r
28 using namespace std;\r
29 \r
30 STDMETHODIMP VLCOleInPlaceObject::GetWindow(HWND *pHwnd)\r
31 {\r
32     if( NULL == pHwnd )\r
33         return E_INVALIDARG;\r
34 \r
35     if( _p_instance->isInPlaceActive() )\r
36     {\r
37         if( NULL != (*pHwnd = _p_instance->getInPlaceWindow()) )\r
38             return S_OK;\r
39 \r
40         return E_FAIL;\r
41     }\r
42     *pHwnd = NULL;\r
43 \r
44     return E_UNEXPECTED;\r
45 };\r
46 \r
47 STDMETHODIMP VLCOleInPlaceObject::ContextSensitiveHelp(BOOL fEnterMode)\r
48 {\r
49     return E_NOTIMPL;\r
50 };\r
51 \r
52 STDMETHODIMP VLCOleInPlaceObject::InPlaceDeactivate(void)\r
53 {\r
54     if( _p_instance->isInPlaceActive() )\r
55     {\r
56         UIDeactivate();\r
57         _p_instance->onInPlaceDeactivate();\r
58 \r
59         LPOLEOBJECT p_oleObject;\r
60         if( SUCCEEDED(QueryInterface(IID_IOleObject, (void**)&p_oleObject)) ) \r
61         {\r
62             LPOLECLIENTSITE p_clientSite;\r
63             if( SUCCEEDED(p_oleObject->GetClientSite(&p_clientSite)) )\r
64             {\r
65                 LPOLEINPLACESITE p_inPlaceSite;\r
66 \r
67                 if( SUCCEEDED(p_clientSite->QueryInterface(IID_IOleInPlaceSite, (void**)&p_inPlaceSite)) )\r
68                 {\r
69                     p_inPlaceSite->OnInPlaceDeactivate();\r
70                     p_inPlaceSite->Release();\r
71                 }\r
72                 p_clientSite->Release();\r
73             }\r
74             p_oleObject->Release();\r
75         }\r
76         return S_OK;\r
77     }\r
78     return E_UNEXPECTED;\r
79 };\r
80 \r
81 STDMETHODIMP VLCOleInPlaceObject::UIDeactivate(void)\r
82 {\r
83     if( _p_instance->isInPlaceActive() )\r
84     {\r
85         if( _p_instance->hasFocus() )\r
86         {\r
87             _p_instance->setFocus(FALSE);\r
88 \r
89             LPOLEOBJECT p_oleObject;\r
90             if( SUCCEEDED(QueryInterface(IID_IOleObject, (void**)&p_oleObject)) ) \r
91             {\r
92                 LPOLECLIENTSITE p_clientSite;\r
93                 if( SUCCEEDED(p_oleObject->GetClientSite(&p_clientSite)) )\r
94                 {\r
95                     LPOLEINPLACESITE p_inPlaceSite;\r
96 \r
97                     if( SUCCEEDED(p_clientSite->QueryInterface(IID_IOleInPlaceSite, (void**)&p_inPlaceSite)) )\r
98                     {\r
99                         p_inPlaceSite->OnUIDeactivate(FALSE);\r
100                         p_inPlaceSite->Release();\r
101                     }\r
102                     p_clientSite->Release();\r
103                 }\r
104                 p_oleObject->Release();\r
105             }\r
106             return S_OK;\r
107         }\r
108     }\r
109     return E_UNEXPECTED;\r
110 };\r
111 \r
112 STDMETHODIMP VLCOleInPlaceObject::SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect)\r
113 {\r
114     if( _p_instance->isInPlaceActive() )\r
115     {\r
116         _p_instance->onPositionChange(lprcPosRect, lprcClipRect);\r
117         return S_OK;\r
118     }\r
119     return E_UNEXPECTED;\r
120 };\r
121 \r
122 STDMETHODIMP VLCOleInPlaceObject::ReactivateAndUndo(void)\r
123 {\r
124     return INPLACE_E_NOTUNDOABLE;\r
125 };\r
126 \r