mshtml: Fixed typos in IHTMLInputElement::value tests.
[wine] / dlls / mshtml / ipwindow.c
1 /*
2  * Copyright 2010 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include "config.h"
20
21 #include <stdarg.h>
22
23 #define COBJMACROS
24
25 #include "windef.h"
26 #include "winbase.h"
27 #include "winuser.h"
28 #include "ole2.h"
29 #include "shlobj.h"
30
31 #include "mshtml_private.h"
32 #include "pluginhost.h"
33
34 #include "wine/debug.h"
35 #include "wine/unicode.h"
36
37 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
38
39 typedef struct {
40     IOleInPlaceFrame IOleInPlaceFrame_iface;
41     LONG ref;
42 } InPlaceFrame;
43
44 static inline InPlaceFrame *impl_from_IOleInPlaceFrame(IOleInPlaceFrame *iface)
45 {
46     return CONTAINING_RECORD(iface, InPlaceFrame, IOleInPlaceFrame_iface);
47 }
48
49 static HRESULT WINAPI InPlaceFrame_QueryInterface(IOleInPlaceFrame *iface,
50                                                   REFIID riid, void **ppv)
51 {
52     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
53
54     if(IsEqualGUID(&IID_IUnknown, riid)) {
55         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
56         *ppv = &This->IOleInPlaceFrame_iface;
57     }else if(IsEqualGUID(&IID_IOleWindow, riid)) {
58         TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv);
59         *ppv = &This->IOleInPlaceFrame_iface;
60     }else if(IsEqualGUID(&IID_IOleInPlaceUIWindow, riid)) {
61         TRACE("(%p)->(IID_IOleInPlaceUIWindow %p)\n", This, ppv);
62         *ppv = &This->IOleInPlaceFrame_iface;
63     }else if(IsEqualGUID(&IID_IOleInPlaceFrame, riid)) {
64         TRACE("(%p)->(IID_IOleInPlaceFrame %p)\n", This, ppv);
65         *ppv = &This->IOleInPlaceFrame_iface;
66     }else {
67         WARN("Unsopported interface %s\n", debugstr_guid(riid));
68         *ppv = NULL;
69         return E_NOINTERFACE;
70     }
71
72     IUnknown_AddRef((IUnknown*)*ppv);
73     return S_OK;
74 }
75
76 static ULONG WINAPI InPlaceFrame_AddRef(IOleInPlaceFrame *iface)
77 {
78     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
79     LONG ref = InterlockedIncrement(&This->ref);
80
81     TRACE("(%p) ref=%d\n", This, ref);
82
83     return ref;
84 }
85
86 static ULONG WINAPI InPlaceFrame_Release(IOleInPlaceFrame *iface)
87 {
88     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
89     LONG ref = InterlockedDecrement(&This->ref);
90
91     TRACE("(%p) ref=%d\n", This, ref);
92
93     if(!ref)
94         heap_free(This);
95
96     return ref;
97 }
98
99 static HRESULT WINAPI InPlaceFrame_GetWindow(IOleInPlaceFrame *iface, HWND *phwnd)
100 {
101     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
102     FIXME("(%p)->(%p)\n", This, phwnd);
103     return E_NOTIMPL;
104 }
105
106 static HRESULT WINAPI InPlaceFrame_ContextSensitiveHelp(IOleInPlaceFrame *iface,
107                                                         BOOL fEnterMode)
108 {
109     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
110     FIXME("(%p)->(%x)\n", This, fEnterMode);
111     return E_NOTIMPL;
112 }
113
114 static HRESULT WINAPI InPlaceFrame_GetBorder(IOleInPlaceFrame *iface, LPRECT lprectBorder)
115 {
116     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
117     FIXME("(%p)->(%p)\n", This, lprectBorder);
118     return E_NOTIMPL;
119 }
120
121 static HRESULT WINAPI InPlaceFrame_RequestBorderSpace(IOleInPlaceFrame *iface,
122                                                       LPCBORDERWIDTHS pborderwidths)
123 {
124     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
125     FIXME("(%p)->(%p)\n", This, pborderwidths);
126     return E_NOTIMPL;
127 }
128
129 static HRESULT WINAPI InPlaceFrame_SetBorderSpace(IOleInPlaceFrame *iface,
130                                                   LPCBORDERWIDTHS pborderwidths)
131 {
132     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
133     FIXME("(%p)->(%p)\n", This, pborderwidths);
134     return E_NOTIMPL;
135 }
136
137 static HRESULT WINAPI InPlaceFrame_SetActiveObject(IOleInPlaceFrame *iface,
138         IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
139 {
140     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
141     FIXME("(%p)->(%p %s)\n", This, pActiveObject, debugstr_w(pszObjName));
142     return E_NOTIMPL;
143 }
144
145 static HRESULT WINAPI InPlaceFrame_InsertMenus(IOleInPlaceFrame *iface, HMENU hmenuShared,
146         LPOLEMENUGROUPWIDTHS lpMenuWidths)
147 {
148     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
149     FIXME("(%p)->(%p %p)\n", This, hmenuShared, lpMenuWidths);
150     return E_NOTIMPL;
151 }
152
153 static HRESULT WINAPI InPlaceFrame_SetMenu(IOleInPlaceFrame *iface, HMENU hmenuShared,
154         HOLEMENU holemenu, HWND hwndActiveObject)
155 {
156     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
157     FIXME("(%p)->(%p %p %p)\n", This, hmenuShared, holemenu, hwndActiveObject);
158     return E_NOTIMPL;
159 }
160
161 static HRESULT WINAPI InPlaceFrame_RemoveMenus(IOleInPlaceFrame *iface, HMENU hmenuShared)
162 {
163     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
164     FIXME("(%p)->(%p)\n", This, hmenuShared);
165     return E_NOTIMPL;
166 }
167
168 static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface,
169                                                  LPCOLESTR pszStatusText)
170 {
171     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
172     FIXME("(%p)->(%s)\n", This, debugstr_w(pszStatusText));
173     return E_NOTIMPL;
174 }
175
176 static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
177 {
178     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
179     FIXME("(%p)->(%x)\n", This, fEnable);
180     return E_NOTIMPL;
181 }
182
183 static HRESULT WINAPI InPlaceFrame_TranslateAccelerator(IOleInPlaceFrame *iface, LPMSG lpmsg,
184                                                         WORD wID)
185 {
186     InPlaceFrame *This = impl_from_IOleInPlaceFrame(iface);
187     FIXME("(%p)->(%p %d)\n", This, lpmsg, wID);
188     return E_NOTIMPL;
189 }
190
191 static const IOleInPlaceFrameVtbl OleInPlaceFrameVtbl = {
192     InPlaceFrame_QueryInterface,
193     InPlaceFrame_AddRef,
194     InPlaceFrame_Release,
195     InPlaceFrame_GetWindow,
196     InPlaceFrame_ContextSensitiveHelp,
197     InPlaceFrame_GetBorder,
198     InPlaceFrame_RequestBorderSpace,
199     InPlaceFrame_SetBorderSpace,
200     InPlaceFrame_SetActiveObject,
201     InPlaceFrame_InsertMenus,
202     InPlaceFrame_SetMenu,
203     InPlaceFrame_RemoveMenus,
204     InPlaceFrame_SetStatusText,
205     InPlaceFrame_EnableModeless,
206     InPlaceFrame_TranslateAccelerator
207 };
208
209 HRESULT create_ip_frame(IOleInPlaceFrame **ret)
210 {
211     InPlaceFrame *frame;
212
213     frame = heap_alloc_zero(sizeof(*frame));
214     if(!frame)
215         return E_OUTOFMEMORY;
216
217     frame->IOleInPlaceFrame_iface.lpVtbl = &OleInPlaceFrameVtbl;
218     frame->ref = 1;
219
220     *ret = &frame->IOleInPlaceFrame_iface;
221     return S_OK;
222 }
223
224 typedef struct {
225     IOleInPlaceUIWindow IOleInPlaceUIWindow_iface;
226     LONG ref;
227 } InPlaceUIWindow;
228
229 static inline InPlaceUIWindow *impl_from_IOleInPlaceUIWindow(IOleInPlaceUIWindow *iface)
230 {
231     return CONTAINING_RECORD(iface, InPlaceUIWindow, IOleInPlaceUIWindow_iface);
232 }
233
234 static HRESULT WINAPI InPlaceUIWindow_QueryInterface(IOleInPlaceUIWindow *iface, REFIID riid, void **ppv)
235 {
236     InPlaceUIWindow *This = impl_from_IOleInPlaceUIWindow(iface);
237
238     if(IsEqualGUID(&IID_IUnknown, riid)) {
239         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
240         *ppv = &This->IOleInPlaceUIWindow_iface;
241     }else if(IsEqualGUID(&IID_IOleWindow, riid)) {
242         TRACE("(%p)->(IID_IOleWindow %p)\n", This, ppv);
243         *ppv = &This->IOleInPlaceUIWindow_iface;
244     }else if(IsEqualGUID(&IID_IOleInPlaceUIWindow, riid)) {
245         TRACE("(%p)->(IID_IOleInPlaceUIWindow %p)\n", This, ppv);
246         *ppv = &This->IOleInPlaceUIWindow_iface;
247     }else {
248         WARN("Unsopported interface %s\n", debugstr_guid(riid));
249         *ppv = NULL;
250         return E_NOINTERFACE;
251     }
252
253     IUnknown_AddRef((IUnknown*)*ppv);
254     return S_OK;
255 }
256
257 static ULONG WINAPI InPlaceUIWindow_AddRef(IOleInPlaceUIWindow *iface)
258 {
259     InPlaceUIWindow *This = impl_from_IOleInPlaceUIWindow(iface);
260     LONG ref = InterlockedIncrement(&This->ref);
261
262     TRACE("(%p) ref=%d\n", This, ref);
263
264     return ref;
265 }
266
267 static ULONG WINAPI InPlaceUIWindow_Release(IOleInPlaceUIWindow *iface)
268 {
269     InPlaceUIWindow *This = impl_from_IOleInPlaceUIWindow(iface);
270     LONG ref = InterlockedDecrement(&This->ref);
271
272     TRACE("(%p) ref=%d\n", This, ref);
273
274     if(!ref)
275         heap_free(This);
276
277     return ref;
278 }
279
280 static HRESULT WINAPI InPlaceUIWindow_GetWindow(IOleInPlaceUIWindow *iface, HWND *phwnd)
281 {
282     InPlaceUIWindow *This = impl_from_IOleInPlaceUIWindow(iface);
283     FIXME("(%p)->(%p)\n", This, phwnd);
284     return E_NOTIMPL;
285 }
286
287 static HRESULT WINAPI InPlaceUIWindow_ContextSensitiveHelp(IOleInPlaceUIWindow *iface,
288         BOOL fEnterMode)
289 {
290     InPlaceUIWindow *This = impl_from_IOleInPlaceUIWindow(iface);
291     FIXME("(%p)->(%x)\n", This, fEnterMode);
292     return E_NOTIMPL;
293 }
294
295 static HRESULT WINAPI InPlaceUIWindow_GetBorder(IOleInPlaceUIWindow *iface, LPRECT lprectBorder)
296 {
297     InPlaceUIWindow *This = impl_from_IOleInPlaceUIWindow(iface);
298     FIXME("(%p)->(%p)\n", This, lprectBorder);
299     return E_NOTIMPL;
300 }
301
302 static HRESULT WINAPI InPlaceUIWindow_RequestBorderSpace(IOleInPlaceUIWindow *iface,
303         LPCBORDERWIDTHS pborderwidths)
304 {
305     InPlaceUIWindow *This = impl_from_IOleInPlaceUIWindow(iface);
306     FIXME("(%p)->(%p)\n", This, pborderwidths);
307     return E_NOTIMPL;
308 }
309
310 static HRESULT WINAPI InPlaceUIWindow_SetBorderSpace(IOleInPlaceUIWindow *iface,
311         LPCBORDERWIDTHS pborderwidths)
312 {
313     InPlaceUIWindow *This = impl_from_IOleInPlaceUIWindow(iface);
314     FIXME("(%p)->(%p)\n", This, pborderwidths);
315     return E_NOTIMPL;
316 }
317
318 static HRESULT WINAPI InPlaceUIWindow_SetActiveObject(IOleInPlaceUIWindow *iface,
319         IOleInPlaceActiveObject *pActiveObject, LPCOLESTR pszObjName)
320 {
321     InPlaceUIWindow *This = impl_from_IOleInPlaceUIWindow(iface);
322     FIXME("(%p)->(%p %s)\n", This, pActiveObject, debugstr_w(pszObjName));
323     return E_NOTIMPL;
324 }
325
326 static const IOleInPlaceUIWindowVtbl OleInPlaceUIWindowVtbl = {
327     InPlaceUIWindow_QueryInterface,
328     InPlaceUIWindow_AddRef,
329     InPlaceUIWindow_Release,
330     InPlaceUIWindow_GetWindow,
331     InPlaceUIWindow_ContextSensitiveHelp,
332     InPlaceUIWindow_GetBorder,
333     InPlaceUIWindow_RequestBorderSpace,
334     InPlaceUIWindow_SetBorderSpace,
335     InPlaceUIWindow_SetActiveObject,
336 };
337
338 HRESULT create_ip_window(IOleInPlaceUIWindow **ret)
339 {
340     InPlaceUIWindow *uiwindow;
341
342     uiwindow = heap_alloc_zero(sizeof(*uiwindow));
343     if(!uiwindow)
344         return E_OUTOFMEMORY;
345
346     uiwindow->IOleInPlaceUIWindow_iface.lpVtbl = &OleInPlaceUIWindowVtbl;
347     uiwindow->ref = 1;
348
349     *ret = &uiwindow->IOleInPlaceUIWindow_iface;
350     return S_OK;
351 }