ReactOS  0.4.14-dev-599-g2d4d3f5
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 
28 typedef struct {
32 
34 } Window;
35 
36 static inline Window* impl_from_Window(IAccessible *iface)
37 {
38  return CONTAINING_RECORD(iface, Window, IAccessible_iface);
39 }
40 
42 {
43  Window *This = impl_from_Window(iface);
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 {
67  Window *This = impl_from_Window(iface);
69 
70  TRACE("(%p) ref = %u\n", This, ref);
71  return ref;
72 }
73 
75 {
76  Window *This = impl_from_Window(iface);
78 
79  TRACE("(%p) ref = %u\n", This, ref);
80 
81  if(!ref)
82  heap_free(This);
83  return ref;
84 }
85 
87 {
88  Window *This = impl_from_Window(iface);
89  FIXME("(%p)->(%p)\n", This, pctinfo);
90  return E_NOTIMPL;
91 }
92 
94  UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
95 {
96  Window *This = impl_from_Window(iface);
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 
110 static 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 
127 static HRESULT WINAPI Window_get_accChildCount(IAccessible *iface, LONG *pcountChildren)
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 
142 static HRESULT WINAPI Window_get_accName(IAccessible *iface, VARIANT varID, BSTR *pszName)
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 
149 static HRESULT WINAPI Window_get_accValue(IAccessible *iface, VARIANT varID, BSTR *pszValue)
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 
164 static HRESULT WINAPI Window_get_accRole(IAccessible *iface, VARIANT varID, VARIANT *pvarRole)
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 
171 static HRESULT WINAPI Window_get_accState(IAccessible *iface, VARIANT varID, VARIANT *pvarState)
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 
178 static HRESULT WINAPI Window_get_accHelp(IAccessible *iface, VARIANT varID, BSTR *pszHelp)
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 
223 static 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 
262 static HRESULT WINAPI Window_put_accName(IAccessible *iface, VARIANT varID, BSTR pszName)
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 
269 static HRESULT WINAPI Window_put_accValue(IAccessible *iface, VARIANT varID, BSTR pszValue)
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 
276 static 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 
344 static 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 
404 static const IEnumVARIANTVtbl WindowEnumVARIANTVtbl = {
412 };
413 
415 {
416  Window *window;
417  HRESULT hres;
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 }
WINE_DEFAULT_DEBUG_CHANNEL(oleacc)
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static HRESULT WINAPI Window_get_accRole(IAccessible *iface, VARIANT varID, VARIANT *pvarRole)
Definition: window.c:164
static HRESULT WINAPI Window_get_accState(IAccessible *iface, VARIANT varID, VARIANT *pvarState)
Definition: window.c:171
static HRESULT WINAPI Window_GetIDsOfNames(IAccessible *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: window.c:101
#define REFIID
Definition: guiddef.h:118
static HRESULT WINAPI Window_accDoDefaultAction(IAccessible *iface, VARIANT varID)
Definition: window.c:255
#define E_NOINTERFACE
Definition: winerror.h:2364
IAccessible IAccessible_iface
Definition: window.c:29
HRESULT create_window_object(HWND hwnd, const IID *iid, void **obj)
Definition: window.c:414
REFIID riid
Definition: precomp.h:44
static HRESULT WINAPI Window_get_accDefaultAction(IAccessible *iface, VARIANT varID, BSTR *pszDefaultAction)
Definition: window.c:215
#define WARN(fmt,...)
Definition: debug.h:111
static HRESULT WINAPI Window_get_accKeyboardShortcut(IAccessible *iface, VARIANT varID, BSTR *pszKeyboardShortcut)
Definition: window.c:193
static HRESULT WINAPI Window_EnumVARIANT_Clone(IEnumVARIANT *iface, IEnumVARIANT **ppEnum)
Definition: window.c:397
static ULONG WINAPI Window_OleWindow_AddRef(IOleWindow *iface)
Definition: window.c:318
REFIID LPVOID * ppv
Definition: atlbase.h:39
static Window * impl_from_Window(IAccessible *iface)
Definition: window.c:36
static HRESULT WINAPI Window_get_accDescription(IAccessible *iface, VARIANT varID, BSTR *pszDescription)
Definition: window.c:156
static const IOleWindowVtbl WindowOleWindowVtbl
Definition: window.c:344
static HRESULT WINAPI Window_accNavigate(IAccessible *iface, LONG navDir, VARIANT varStart, VARIANT *pvarEnd)
Definition: window.c:239
DWORD LCID
Definition: nls.h:13
OLECHAR * BSTR
Definition: compat.h:1942
static HRESULT WINAPI Window_EnumVARIANT_Reset(IEnumVARIANT *iface)
Definition: window.c:390
static HRESULT WINAPI Window_put_accName(IAccessible *iface, VARIANT varID, BSTR pszName)
Definition: window.c:262
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 LPOLESTR
Definition: stg_prop.c:27
#define E_FAIL
Definition: ddrawi.h:102
static ULONG WINAPI Window_EnumVARIANT_AddRef(IEnumVARIANT *iface)
Definition: window.c:363
Definition: send.c:47
static HRESULT WINAPI Window_EnumVARIANT_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **ppv)
Definition: window.c:357
static HRESULT WINAPI Window_get_accParent(IAccessible *iface, IDispatch **ppdispParent)
Definition: window.c:120
Definition: window.c:28
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
static ULONG WINAPI Window_EnumVARIANT_Release(IEnumVARIANT *iface)
Definition: window.c:369
#define debugstr_w
Definition: kernel32.h:32
GLenum GLint ref
Definition: glext.h:6028
#define FIXME(fmt,...)
Definition: debug.h:110
static HRESULT WINAPI Window_accHitTest(IAccessible *iface, LONG xLeft, LONG yTop, VARIANT *pvarID)
Definition: window.c:247
static HRESULT WINAPI Window_get_accHelp(IAccessible *iface, VARIANT varID, BSTR *pszHelp)
Definition: window.c:178
smooth NULL
Definition: ftsmooth.c:416
static const IEnumVARIANTVtbl WindowEnumVARIANTVtbl
Definition: window.c:404
static const IAccessibleVtbl WindowVtbl
Definition: window.c:276
#define debugstr_guid
Definition: kernel32.h:35
static Window * impl_from_Window_EnumVARIANT(IEnumVARIANT *iface)
Definition: window.c:352
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
static HRESULT WINAPI Window_get_accValue(IAccessible *iface, VARIANT varID, BSTR *pszValue)
Definition: window.c:149
static HRESULT WINAPI Window_QueryInterface(IAccessible *iface, REFIID riid, void **ppv)
Definition: window.c:41
BOOL WINAPI IsWindow(HWND hWnd)
Definition: window.c:1543
#define TRACE(s)
Definition: solgame.cpp:4
static HRESULT WINAPI Window_EnumVARIANT_Skip(IEnumVARIANT *iface, ULONG celt)
Definition: window.c:383
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:77
const GUID IID_IUnknown
static HRESULT WINAPI Window_accLocation(IAccessible *iface, LONG *pxLeft, LONG *pyTop, LONG *pcxWidth, LONG *pcyHeight, VARIANT varID)
Definition: window.c:230
#define WINAPI
Definition: msvc.h:6
unsigned short WORD
Definition: ntddk_ex.h:93
static HRESULT WINAPI Window_get_accSelection(IAccessible *iface, VARIANT *pvarID)
Definition: window.c:208
int Window
Definition: x11stubs.h:26
const GUID IID_IDispatch
static HRESULT WINAPI Window_GetTypeInfo(IAccessible *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: window.c:93
static ULONG WINAPI Window_OleWindow_Release(IOleWindow *iface)
Definition: window.c:324
static HRESULT WINAPI Window_get_accHelpTopic(IAccessible *iface, BSTR *pszHelpFile, VARIANT varID, LONG *pidTopic)
Definition: window.c:185
#define InterlockedDecrement
Definition: armddk.h:52
static IHTMLWindow2 * window
Definition: events.c:77
static ULONG WINAPI Window_Release(IAccessible *iface)
Definition: window.c:74
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:519
struct stdole::EXCEPINFO EXCEPINFO
static const char * debugstr_variant(const VARIANT *var)
Definition: container.c:46
static VARIANTARG static DISPID
Definition: ordinal.c:49
#define S_OK
Definition: intsafe.h:59
IOleWindow IOleWindow_iface
Definition: window.c:30
#define InterlockedIncrement
Definition: armddk.h:53
static Window * impl_from_Window_OleWindow(IOleWindow *iface)
Definition: window.c:307
#define E_NOTIMPL
Definition: ddrawi.h:99
IEnumVARIANT IEnumVARIANT_iface
Definition: window.c:31
unsigned int UINT
Definition: ndis.h:50
static HRESULT WINAPI Window_get_accName(IAccessible *iface, VARIANT varID, BSTR *pszName)
Definition: window.c:142
LONG ref
Definition: window.c:33
struct stdole::DISPPARAMS DISPPARAMS
static HRESULT WINAPI Window_OleWindow_ContextSensitiveHelp(IOleWindow *iface, BOOL fEnterMode)
Definition: window.c:337
const GUID IID_IOleWindow
static HRESULT WINAPI Window_GetTypeInfoCount(IAccessible *iface, UINT *pctinfo)
Definition: window.c:86
static HRESULT WINAPI Window_EnumVARIANT_Next(IEnumVARIANT *iface, ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched)
Definition: window.c:375
unsigned int ULONG
Definition: retypes.h:1
static HRESULT WINAPI Window_OleWindow_QueryInterface(IOleWindow *iface, REFIID riid, void **ppv)
Definition: window.c:312
static HRESULT WINAPI Window_put_accValue(IAccessible *iface, VARIANT varID, BSTR pszValue)
Definition: window.c:269
static HRESULT WINAPI Window_get_accChildCount(IAccessible *iface, LONG *pcountChildren)
Definition: window.c:127
static ULONG WINAPI Window_AddRef(IAccessible *iface)
Definition: window.c:65
static HRESULT WINAPI Window_OleWindow_GetWindow(IOleWindow *iface, HWND *phwnd)
Definition: window.c:330
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
static HRESULT WINAPI Window_get_accFocus(IAccessible *iface, VARIANT *pvarID)
Definition: window.c:201
static HRESULT WINAPI Window_accSelect(IAccessible *iface, LONG flagsSelect, VARIANT varID)
Definition: window.c:223
static HRESULT WINAPI Window_get_accChild(IAccessible *iface, VARIANT varChildID, IDispatch **ppdispChild)
Definition: window.c:134
static BOOL heap_free(void *mem)
Definition: appwiz.h:75