ReactOS 0.4.16-dev-329-g9223134
window.c
Go to the documentation of this file.
1/*
2 * Copyright 2014 Piotr 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#define COBJMACROS
20
21#include "oleacc_private.h"
22
23#include "wine/debug.h"
24#include "wine/heap.h"
25
27
28typedef struct {
32
34} Window;
35
36static inline Window* impl_from_Window(IAccessible *iface)
37{
38 return CONTAINING_RECORD(iface, Window, IAccessible_iface);
39}
40
42{
44
45 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
46
47 if(IsEqualIID(riid, &IID_IAccessible) ||
50 *ppv = iface;
51 }else if(IsEqualIID(riid, &IID_IOleWindow)) {
52 *ppv = &This->IOleWindow_iface;
53 }else if(IsEqualIID(riid, &IID_IEnumVARIANT)) {
54 *ppv = &This->IEnumVARIANT_iface;
55 }else {
56 WARN("no interface: %s\n", debugstr_guid(riid));
57 *ppv = NULL;
58 return E_NOINTERFACE;
59 }
60
61 IAccessible_AddRef(iface);
62 return S_OK;
63}
64
66{
69
70 TRACE("(%p) ref = %u\n", This, ref);
71 return ref;
72}
73
75{
78
79 TRACE("(%p) ref = %u\n", This, ref);
80
81 if(!ref)
83 return ref;
84}
85
87{
89 FIXME("(%p)->(%p)\n", This, pctinfo);
90 return E_NOTIMPL;
91}
92
94 UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
95{
97 FIXME("(%p)->(%u %x %p)\n", This, iTInfo, lcid, ppTInfo);
98 return E_NOTIMPL;
99}
100
102 LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
103{
104 Window *This = impl_from_Window(iface);
105 FIXME("(%p)->(%s %p %u %x %p)\n", This, debugstr_guid(riid),
106 rgszNames, cNames, lcid, rgDispId);
107 return E_NOTIMPL;
108}
109
110static HRESULT WINAPI Window_Invoke(IAccessible *iface, DISPID dispIdMember,
111 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
112 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
113{
114 Window *This = impl_from_Window(iface);
115 FIXME("(%p)->(%x %s %x %x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
116 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
117 return E_NOTIMPL;
118}
119
121{
122 Window *This = impl_from_Window(iface);
123 FIXME("(%p)->(%p)\n", This, ppdispParent);
124 return E_NOTIMPL;
125}
126
128{
129 Window *This = impl_from_Window(iface);
130 FIXME("(%p)->(%p)\n", This, pcountChildren);
131 return E_NOTIMPL;
132}
133
135 VARIANT varChildID, IDispatch **ppdispChild)
136{
137 Window *This = impl_from_Window(iface);
138 FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varChildID), ppdispChild);
139 return E_NOTIMPL;
140}
141
143{
144 Window *This = impl_from_Window(iface);
145 FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszName);
146 return E_NOTIMPL;
147}
148
150{
151 Window *This = impl_from_Window(iface);
152 FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszValue);
153 return E_NOTIMPL;
154}
155
157 VARIANT varID, BSTR *pszDescription)
158{
159 Window *This = impl_from_Window(iface);
160 FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszDescription);
161 return E_NOTIMPL;
162}
163
165{
166 Window *This = impl_from_Window(iface);
167 FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pvarRole);
168 return E_NOTIMPL;
169}
170
172{
173 Window *This = impl_from_Window(iface);
174 FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pvarState);
175 return E_NOTIMPL;
176}
177
179{
180 Window *This = impl_from_Window(iface);
181 FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszHelp);
182 return E_NOTIMPL;
183}
184
186 BSTR *pszHelpFile, VARIANT varID, LONG *pidTopic)
187{
188 Window *This = impl_from_Window(iface);
189 FIXME("(%p)->(%p %s %p)\n", This, pszHelpFile, debugstr_variant(&varID), pidTopic);
190 return E_NOTIMPL;
191}
192
194 VARIANT varID, BSTR *pszKeyboardShortcut)
195{
196 Window *This = impl_from_Window(iface);
197 FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszKeyboardShortcut);
198 return E_NOTIMPL;
199}
200
202{
203 Window *This = impl_from_Window(iface);
204 FIXME("(%p)->(%p)\n", This, pvarID);
205 return E_NOTIMPL;
206}
207
209{
210 Window *This = impl_from_Window(iface);
211 FIXME("(%p)->(%p)\n", This, pvarID);
212 return E_NOTIMPL;
213}
214
216 VARIANT varID, BSTR *pszDefaultAction)
217{
218 Window *This = impl_from_Window(iface);
219 FIXME("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszDefaultAction);
220 return E_NOTIMPL;
221}
222
223static HRESULT WINAPI Window_accSelect(IAccessible *iface, LONG flagsSelect, VARIANT varID)
224{
225 Window *This = impl_from_Window(iface);
226 FIXME("(%p)->(%x %s)\n", This, flagsSelect, debugstr_variant(&varID));
227 return E_NOTIMPL;
228}
229
231 LONG *pyTop, LONG *pcxWidth, LONG *pcyHeight, VARIANT varID)
232{
233 Window *This = impl_from_Window(iface);
234 FIXME("(%p)->(%p %p %p %p %s)\n", This, pxLeft, pyTop,
235 pcxWidth, pcyHeight, debugstr_variant(&varID));
236 return E_NOTIMPL;
237}
238
240 LONG navDir, VARIANT varStart, VARIANT *pvarEnd)
241{
242 Window *This = impl_from_Window(iface);
243 FIXME("(%p)->(%d %s %p)\n", This, navDir, debugstr_variant(&varStart), pvarEnd);
244 return E_NOTIMPL;
245}
246
248 LONG xLeft, LONG yTop, VARIANT *pvarID)
249{
250 Window *This = impl_from_Window(iface);
251 FIXME("(%p)->(%d %d %p)\n", This, xLeft, yTop, pvarID);
252 return E_NOTIMPL;
253}
254
256{
257 Window *This = impl_from_Window(iface);
258 FIXME("(%p)->(%s)\n", This, debugstr_variant(&varID));
259 return E_NOTIMPL;
260}
261
263{
264 Window *This = impl_from_Window(iface);
265 FIXME("(%p)->(%s %s)\n", This, debugstr_variant(&varID), debugstr_w(pszName));
266 return E_NOTIMPL;
267}
268
270{
271 Window *This = impl_from_Window(iface);
272 FIXME("(%p)->(%s %s)\n", This, debugstr_variant(&varID), debugstr_w(pszValue));
273 return E_NOTIMPL;
274}
275
276static const IAccessibleVtbl WindowVtbl = {
305};
306
308{
309 return CONTAINING_RECORD(iface, Window, IOleWindow_iface);
310}
311
313{
315 return IAccessible_QueryInterface(&This->IAccessible_iface, riid, ppv);
316}
317
319{
321 return IAccessible_AddRef(&This->IAccessible_iface);
322}
323
325{
327 return IAccessible_Release(&This->IAccessible_iface);
328}
329
331{
333 FIXME("(%p)->(%p)\n", This, phwnd);
334 return E_NOTIMPL;
335}
336
338{
340 FIXME("(%p)->(%x)\n", This, fEnterMode);
341 return E_NOTIMPL;
342}
343
344static const IOleWindowVtbl WindowOleWindowVtbl = {
350};
351
353{
354 return CONTAINING_RECORD(iface, Window, IEnumVARIANT_iface);
355}
356
358{
360 return IAccessible_QueryInterface(&This->IAccessible_iface, riid, ppv);
361}
362
364{
366 return IAccessible_AddRef(&This->IAccessible_iface);
367}
368
370{
372 return IAccessible_Release(&This->IAccessible_iface);
373}
374
376 ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched)
377{
379 FIXME("(%p)->(%u %p %p)\n", This, celt, rgVar, pCeltFetched);
380 return E_NOTIMPL;
381}
382
384{
386 FIXME("(%p)->(%u)\n", This, celt);
387 return E_NOTIMPL;
388}
389
391{
393 FIXME("(%p)\n", This);
394 return E_NOTIMPL;
395}
396
398{
400 FIXME("(%p)->(%p)\n", This, ppEnum);
401 return E_NOTIMPL;
402}
403
404static const IEnumVARIANTVtbl WindowEnumVARIANTVtbl = {
412};
413
415{
416 Window *window;
418
419 if(!IsWindow(hwnd))
420 return E_FAIL;
421
422 window = heap_alloc_zero(sizeof(Window));
423 if(!window)
424 return E_OUTOFMEMORY;
425
426 window->IAccessible_iface.lpVtbl = &WindowVtbl;
427 window->IOleWindow_iface.lpVtbl = &WindowOleWindowVtbl;
428 window->IEnumVARIANT_iface.lpVtbl = &WindowEnumVARIANTVtbl;
429 window->ref = 1;
430
431 hres = IAccessible_QueryInterface(&window->IAccessible_iface, iid, obj);
432 IAccessible_Release(&window->IAccessible_iface);
433 return hres;
434}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
OLECHAR * BSTR
Definition: compat.h:2293
static HRESULT WINAPI Window_get_accSelection(IAccessible *iface, VARIANT *pvarID)
Definition: window.c:208
static HRESULT WINAPI Window_QueryInterface(IAccessible *iface, REFIID riid, void **ppv)
Definition: window.c:41
static Window * impl_from_Window_OleWindow(IOleWindow *iface)
Definition: window.c:307
static HRESULT WINAPI Window_OleWindow_QueryInterface(IOleWindow *iface, REFIID riid, void **ppv)
Definition: window.c:312
static const IOleWindowVtbl WindowOleWindowVtbl
Definition: window.c:344
static HRESULT WINAPI Window_put_accName(IAccessible *iface, VARIANT varID, BSTR pszName)
Definition: window.c:262
static Window * impl_from_Window_EnumVARIANT(IEnumVARIANT *iface)
Definition: window.c:352
static HRESULT WINAPI Window_accSelect(IAccessible *iface, LONG flagsSelect, VARIANT varID)
Definition: window.c:223
static HRESULT WINAPI Window_accNavigate(IAccessible *iface, LONG navDir, VARIANT varStart, VARIANT *pvarEnd)
Definition: window.c:239
static const IAccessibleVtbl WindowVtbl
Definition: window.c:276
static ULONG WINAPI Window_AddRef(IAccessible *iface)
Definition: window.c:65
static HRESULT WINAPI Window_EnumVARIANT_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **ppv)
Definition: window.c:357
static ULONG WINAPI Window_OleWindow_Release(IOleWindow *iface)
Definition: window.c:324
static HRESULT WINAPI Window_EnumVARIANT_Skip(IEnumVARIANT *iface, ULONG celt)
Definition: window.c:383
static HRESULT WINAPI Window_get_accDescription(IAccessible *iface, VARIANT varID, BSTR *pszDescription)
Definition: window.c:156
static HRESULT WINAPI Window_EnumVARIANT_Next(IEnumVARIANT *iface, ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched)
Definition: window.c:375
static HRESULT WINAPI Window_OleWindow_ContextSensitiveHelp(IOleWindow *iface, BOOL fEnterMode)
Definition: window.c:337
static HRESULT WINAPI Window_get_accValue(IAccessible *iface, VARIANT varID, BSTR *pszValue)
Definition: window.c:149
static ULONG WINAPI Window_EnumVARIANT_Release(IEnumVARIANT *iface)
Definition: window.c:369
static HRESULT WINAPI Window_get_accKeyboardShortcut(IAccessible *iface, VARIANT varID, BSTR *pszKeyboardShortcut)
Definition: window.c:193
static HRESULT WINAPI Window_get_accChildCount(IAccessible *iface, LONG *pcountChildren)
Definition: window.c:127
static HRESULT WINAPI Window_get_accHelpTopic(IAccessible *iface, BSTR *pszHelpFile, VARIANT varID, LONG *pidTopic)
Definition: window.c:185
static HRESULT WINAPI Window_EnumVARIANT_Clone(IEnumVARIANT *iface, IEnumVARIANT **ppEnum)
Definition: window.c:397
static HRESULT WINAPI Window_get_accHelp(IAccessible *iface, VARIANT varID, BSTR *pszHelp)
Definition: window.c:178
static HRESULT WINAPI Window_accDoDefaultAction(IAccessible *iface, VARIANT varID)
Definition: window.c:255
static HRESULT WINAPI Window_get_accRole(IAccessible *iface, VARIANT varID, VARIANT *pvarRole)
Definition: window.c:164
static HRESULT WINAPI Window_OleWindow_GetWindow(IOleWindow *iface, HWND *phwnd)
Definition: window.c:330
static HRESULT WINAPI Window_put_accValue(IAccessible *iface, VARIANT varID, BSTR pszValue)
Definition: window.c:269
static HRESULT WINAPI Window_get_accParent(IAccessible *iface, IDispatch **ppdispParent)
Definition: window.c:120
static Window * impl_from_Window(IAccessible *iface)
Definition: window.c:36
static HRESULT WINAPI Window_get_accName(IAccessible *iface, VARIANT varID, BSTR *pszName)
Definition: window.c:142
HRESULT create_window_object(HWND hwnd, const IID *iid, void **obj)
Definition: window.c:414
static ULONG WINAPI Window_EnumVARIANT_AddRef(IEnumVARIANT *iface)
Definition: window.c:363
static HRESULT WINAPI Window_Invoke(IAccessible *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: window.c:110
static HRESULT WINAPI Window_get_accDefaultAction(IAccessible *iface, VARIANT varID, BSTR *pszDefaultAction)
Definition: window.c:215
static HRESULT WINAPI Window_GetIDsOfNames(IAccessible *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: window.c:101
static ULONG WINAPI Window_OleWindow_AddRef(IOleWindow *iface)
Definition: window.c:318
static HRESULT WINAPI Window_get_accFocus(IAccessible *iface, VARIANT *pvarID)
Definition: window.c:201
static HRESULT WINAPI Window_get_accChild(IAccessible *iface, VARIANT varChildID, IDispatch **ppdispChild)
Definition: window.c:134
static HRESULT WINAPI Window_accLocation(IAccessible *iface, LONG *pxLeft, LONG *pyTop, LONG *pcxWidth, LONG *pcyHeight, VARIANT varID)
Definition: window.c:230
static ULONG WINAPI Window_Release(IAccessible *iface)
Definition: window.c:74
static HRESULT WINAPI Window_GetTypeInfoCount(IAccessible *iface, UINT *pctinfo)
Definition: window.c:86
static HRESULT WINAPI Window_GetTypeInfo(IAccessible *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: window.c:93
static HRESULT WINAPI Window_get_accState(IAccessible *iface, VARIANT varID, VARIANT *pvarState)
Definition: window.c:171
static HRESULT WINAPI Window_accHitTest(IAccessible *iface, LONG xLeft, LONG yTop, VARIANT *pvarID)
Definition: window.c:247
static HRESULT WINAPI Window_EnumVARIANT_Reset(IEnumVARIANT *iface)
Definition: window.c:390
static const IEnumVARIANTVtbl WindowEnumVARIANTVtbl
Definition: window.c:404
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned short WORD
Definition: ntddk_ex.h:93
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
HRESULT hres
Definition: protocol.c:465
static IHTMLWindow2 * window
Definition: events.c:77
static LPOLESTR
Definition: stg_prop.c:27
static VARIANTARG static DISPID
Definition: ordinal.c:52
unsigned int UINT
Definition: ndis.h:50
const GUID IID_IOleWindow
const GUID IID_IDispatch
long LONG
Definition: pedump.c:60
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
DWORD LCID
Definition: nls.h:13
#define TRACE(s)
Definition: solgame.cpp:4
Definition: window.c:28
IAccessible IAccessible_iface
Definition: window.c:29
IEnumVARIANT IEnumVARIANT_iface
Definition: window.c:31
LONG ref
Definition: window.c:33
IOleWindow IOleWindow_iface
Definition: window.c:30
Definition: send.c:48
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:2364
BOOL WINAPI IsWindow(_In_opt_ HWND)