ReactOS 0.4.17-dev-573-g8315b8c
client.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 <assert.h>
22#include "oleacc_private.h"
23#include "commctrl.h"
24
25#include "wine/debug.h"
26#include "wine/heap.h"
27
29
31typedef struct {
36
38
42
44} Client;
45
53};
54
56{
57 WCHAR buf[1024];
58 UINT i, len;
59
61 if(!len)
62 return S_FALSE;
63
64 for(i=0; i<len; i++) {
65 if(buf[i] == '&') {
66 len--;
67 memmove(buf+i, buf+i+1, (len-i)*sizeof(WCHAR));
68 break;
69 }
70 }
71
73 return *name ? S_OK : E_OUTOFMEMORY;
74}
75
77{
78 WCHAR buf[1024];
79 UINT i, len;
80
82 if(!len)
83 return S_FALSE;
84
85 for(i=0; i<len; i++) {
86 if(buf[i] == '&')
87 break;
88 }
89 if(i+1 >= len)
90 return S_FALSE;
91
92 *shortcut = SysAllocString(L"Alt+!");
93 if(!*shortcut)
94 return E_OUTOFMEMORY;
95 (*shortcut)[4] = buf[i+1];
96 return S_OK;
97}
98
99static inline Client* impl_from_Client(IAccessible *iface)
100{
101 return CONTAINING_RECORD(iface, Client, IAccessible_iface);
102}
103
105{
106 Client *This = impl_from_Client(iface);
107
108 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
109
110 if(IsEqualIID(riid, &IID_IAccessible) ||
113 *ppv = iface;
114 }else if(IsEqualIID(riid, &IID_IOleWindow)) {
115 *ppv = &This->IOleWindow_iface;
116 }else if(IsEqualIID(riid, &IID_IEnumVARIANT)) {
117 *ppv = &This->IEnumVARIANT_iface;
118 }else if(IsEqualIID(riid, &IID_IServiceProvider)) {
119 *ppv = &This->IServiceProvider_iface;
120 }else {
121 WARN("no interface: %s\n", debugstr_guid(riid));
122 *ppv = NULL;
123 return E_NOINTERFACE;
124 }
125
126 IAccessible_AddRef(iface);
127 return S_OK;
128}
129
131{
132 Client *This = impl_from_Client(iface);
134
135 TRACE("(%p) ref = %lu\n", This, ref);
136 return ref;
137}
138
140{
141 Client *This = impl_from_Client(iface);
143
144 TRACE("(%p) ref = %lu\n", This, ref);
145
146 if(!ref)
148 return ref;
149}
150
152{
153 Client *This = impl_from_Client(iface);
154 FIXME("(%p)->(%p)\n", This, pctinfo);
155 return E_NOTIMPL;
156}
157
159 UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
160{
161 Client *This = impl_from_Client(iface);
162 FIXME("(%p)->(%u %lx %p)\n", This, iTInfo, lcid, ppTInfo);
163 return E_NOTIMPL;
164}
165
167 LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
168{
169 Client *This = impl_from_Client(iface);
170 FIXME("(%p)->(%s %p %u %lx %p)\n", This, debugstr_guid(riid),
171 rgszNames, cNames, lcid, rgDispId);
172 return E_NOTIMPL;
173}
174
175static HRESULT WINAPI Client_Invoke(IAccessible *iface, DISPID dispIdMember,
176 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
177 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
178{
179 Client *This = impl_from_Client(iface);
180 FIXME("(%p)->(%lx %s %lx %x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
181 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
182 return E_NOTIMPL;
183}
184
186{
187 Client *This = impl_from_Client(iface);
188
189 TRACE("(%p)->(%p)\n", This, ppdispParent);
190
192 &IID_IDispatch, (void**)ppdispParent);
193}
194
196{
197 Client *This = impl_from_Client(iface);
198 HWND cur;
199
200 TRACE("(%p)->(%p)\n", This, pcountChildren);
201
202 *pcountChildren = 0;
204 (*pcountChildren)++;
205
206 return S_OK;
207}
208
210 VARIANT varChildID, IDispatch **ppdispChild)
211{
212 Client *This = impl_from_Client(iface);
213
214 TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&varChildID), ppdispChild);
215
216 *ppdispChild = NULL;
217 return E_INVALIDARG;
218}
219
221{
222 Client *This = impl_from_Client(iface);
223
224 TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&id), name);
225
226 *name = NULL;
227 if(This->vtbl && This->vtbl->get_name)
228 return This->vtbl->get_name(This, id, name);
229
230 if(convert_child_id(&id) != CHILDID_SELF || !IsWindow(This->hwnd))
231 return E_INVALIDARG;
232
233 return win_get_name(This->hwnd, name);
234}
235
237{
238 Client *This = impl_from_Client(iface);
239
240 TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&id), value);
241
242 *value = NULL;
243 if(This->vtbl && This->vtbl->get_value)
244 return This->vtbl->get_value(This, id, value);
245
247 return E_INVALIDARG;
248 return S_FALSE;
249}
250
252 VARIANT varID, BSTR *pszDescription)
253{
254 Client *This = impl_from_Client(iface);
255
256 TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszDescription);
257
258 *pszDescription = NULL;
259 if(convert_child_id(&varID) != CHILDID_SELF)
260 return E_INVALIDARG;
261 return S_FALSE;
262}
263
265{
266 Client *This = impl_from_Client(iface);
267
268 TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pvarRole);
269
270 if(convert_child_id(&varID) != CHILDID_SELF) {
271 V_VT(pvarRole) = VT_EMPTY;
272 return E_INVALIDARG;
273 }
274
275 V_VT(pvarRole) = VT_I4;
276 V_I4(pvarRole) = This->role;
277 return S_OK;
278}
279
281{
283 LONG style;
284
285 if(convert_child_id(&id) != CHILDID_SELF) {
287 return E_INVALIDARG;
288 }
289
290 V_VT(state) = VT_I4;
291 V_I4(state) = 0;
292
294 if(style & WS_DISABLED)
296 else if(IsWindow(client->hwnd))
298
299 info.cbSize = sizeof(info);
300 if(GetGUIThreadInfo(0, &info) && info.hwndFocus == client->hwnd)
302 if(!(style & WS_VISIBLE))
304 return S_OK;
305}
306
308{
309 Client *This = impl_from_Client(iface);
310
311 TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&id), state);
312
313 if(This->vtbl && This->vtbl->get_state)
314 return This->vtbl->get_state(This, id, state);
315 return client_get_state(This, id, state);
316}
317
319{
320 Client *This = impl_from_Client(iface);
321
322 TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszHelp);
323
324 *pszHelp = NULL;
325 if(convert_child_id(&varID) != CHILDID_SELF)
326 return E_INVALIDARG;
327 return S_FALSE;
328}
329
331 BSTR *pszHelpFile, VARIANT varID, LONG *pidTopic)
332{
333 Client *This = impl_from_Client(iface);
334 FIXME("(%p)->(%p %s %p)\n", This, pszHelpFile, debugstr_variant(&varID), pidTopic);
335 return E_NOTIMPL;
336}
337
339 VARIANT id, BSTR *shortcut)
340{
341 Client *This = impl_from_Client(iface);
342
343 TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&id), shortcut);
344
345 *shortcut = NULL;
346 if(This->vtbl && This->vtbl->get_kbd_shortcut)
347 return This->vtbl->get_kbd_shortcut(This, id, shortcut);
348
350 return E_INVALIDARG;
351
352 return win_get_kbd_shortcut(This->hwnd, shortcut);
353}
354
356{
357 Client *This = impl_from_Client(iface);
359
360 TRACE("(%p)->(%p)\n", This, focus);
361
362 V_VT(focus) = VT_EMPTY;
363 info.cbSize = sizeof(info);
364 if(GetGUIThreadInfo(0, &info) && info.hwndFocus) {
365 if(info.hwndFocus == This->hwnd) {
366 V_VT(focus) = VT_I4;
367 V_I4(focus) = CHILDID_SELF;
368 }
369 else if(IsChild(This->hwnd, info.hwndFocus)) {
370 IDispatch *disp;
371 HRESULT hr;
372
374 &IID_IDispatch, (void**)&disp);
375 if(FAILED(hr))
376 return hr;
377 if(!disp)
378 return E_FAIL;
379
380 V_VT(focus) = VT_DISPATCH;
381 V_DISPATCH(focus) = disp;
382 }
383 }
384
385 return S_OK;
386}
387
389{
390 Client *This = impl_from_Client(iface);
391 FIXME("(%p)->(%p)\n", This, pvarID);
392 return E_NOTIMPL;
393}
394
396 VARIANT varID, BSTR *pszDefaultAction)
397{
398 Client *This = impl_from_Client(iface);
399
400 TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&varID), pszDefaultAction);
401
402 *pszDefaultAction = NULL;
403 if(convert_child_id(&varID) != CHILDID_SELF)
404 return E_INVALIDARG;
405 return S_FALSE;
406}
407
408static HRESULT WINAPI Client_accSelect(IAccessible *iface, LONG flagsSelect, VARIANT varID)
409{
410 Client *This = impl_from_Client(iface);
411 FIXME("(%p)->(%lx %s)\n", This, flagsSelect, debugstr_variant(&varID));
412 return E_NOTIMPL;
413}
414
416 LONG *pyTop, LONG *pcxWidth, LONG *pcyHeight, VARIANT varID)
417{
418 Client *This = impl_from_Client(iface);
419 RECT rect;
420 POINT pt;
421
422 TRACE("(%p)->(%p %p %p %p %s)\n", This, pxLeft, pyTop,
423 pcxWidth, pcyHeight, debugstr_variant(&varID));
424
425 *pxLeft = *pyTop = *pcxWidth = *pcyHeight = 0;
426 if(convert_child_id(&varID) != CHILDID_SELF)
427 return E_INVALIDARG;
428
429 if(!GetClientRect(This->hwnd, &rect))
430 return S_OK;
431
432 pt.x = rect.left;
433 pt.y = rect.top;
434 MapWindowPoints(This->hwnd, NULL, &pt, 1);
435 *pxLeft = pt.x;
436 *pyTop = pt.y;
437
438 pt.x = rect.right;
439 pt.y = rect.bottom;
440 MapWindowPoints(This->hwnd, NULL, &pt, 1);
441 *pcxWidth = pt.x - *pxLeft;
442 *pcyHeight = pt.y - *pyTop;
443 return S_OK;
444}
445
447 LONG navDir, VARIANT varStart, VARIANT *pvarEnd)
448{
449 Client *This = impl_from_Client(iface);
450 FIXME("(%p)->(%ld %s %p)\n", This, navDir, debugstr_variant(&varStart), pvarEnd);
451 return E_NOTIMPL;
452}
453
455 LONG xLeft, LONG yTop, VARIANT *pvarID)
456{
457 Client *This = impl_from_Client(iface);
458 HWND child;
459 POINT pt;
460
461 TRACE("(%p)->(%ld %ld %p)\n", This, xLeft, yTop, pvarID);
462
463 V_VT(pvarID) = VT_I4;
464 V_I4(pvarID) = 0;
465
466 pt.x = xLeft;
467 pt.y = yTop;
468 if(!IsWindowVisible(This->hwnd) || !ScreenToClient(This->hwnd, &pt))
469 return S_OK;
470
472 if(!child || child==This->hwnd)
473 return S_OK;
474
475 V_VT(pvarID) = VT_DISPATCH;
477 &IID_IDispatch, (void**)&V_DISPATCH(pvarID));
478}
479
481{
482 Client *This = impl_from_Client(iface);
483 FIXME("(%p)->(%s)\n", This, debugstr_variant(&varID));
484 return E_NOTIMPL;
485}
486
488{
489 Client *This = impl_from_Client(iface);
490 FIXME("(%p)->(%s %s)\n", This, debugstr_variant(&varID), debugstr_w(pszName));
491 return E_NOTIMPL;
492}
493
495{
496 Client *This = impl_from_Client(iface);
497
498 TRACE("(%p)->(%s %p)\n", This, debugstr_variant(&id), value);
499
500 if(This->vtbl && This->vtbl->put_value)
501 return This->vtbl->put_value(This, id, value);
502
504 return E_INVALIDARG;
505 return S_FALSE;
506}
507
508static const IAccessibleVtbl ClientVtbl = {
537};
538
540{
541 return CONTAINING_RECORD(iface, Client, IOleWindow_iface);
542}
543
545{
547 return IAccessible_QueryInterface(&This->IAccessible_iface, riid, ppv);
548}
549
551{
553 return IAccessible_AddRef(&This->IAccessible_iface);
554}
555
557{
559 return IAccessible_Release(&This->IAccessible_iface);
560}
561
563{
565
566 TRACE("(%p)->(%p)\n", This, phwnd);
567
568 *phwnd = This->hwnd;
569 return S_OK;
570}
571
573{
575 FIXME("(%p)->(%x)\n", This, fEnterMode);
576 return E_NOTIMPL;
577}
578
579static const IOleWindowVtbl ClientOleWindowVtbl = {
585};
586
588{
589 return CONTAINING_RECORD(iface, Client, IEnumVARIANT_iface);
590}
591
593{
595 return IAccessible_QueryInterface(&This->IAccessible_iface, riid, ppv);
596}
597
599{
601 return IAccessible_AddRef(&This->IAccessible_iface);
602}
603
605{
607 return IAccessible_Release(&This->IAccessible_iface);
608}
609
611 ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched)
612{
614 HWND cur = This->enum_pos, next;
615 ULONG fetched = 0;
616 HRESULT hr;
617
618 TRACE("(%p)->(%lu %p %p)\n", This, celt, rgVar, pCeltFetched);
619
620 if(!celt) {
621 if(pCeltFetched)
622 *pCeltFetched = 0;
623 return S_OK;
624 }
625
626 if(!This->enum_pos)
627 next = GetWindow(This->hwnd, GW_CHILD);
628 else
629 next = GetWindow(This->enum_pos, GW_HWNDNEXT);
630
631 while(next) {
632 cur = next;
633
634 V_VT(rgVar+fetched) = VT_DISPATCH;
636 &IID_IDispatch, (void**)&V_DISPATCH(rgVar+fetched));
637 if(FAILED(hr)) {
638 V_VT(rgVar+fetched) = VT_EMPTY;
639 while(fetched > 0) {
640 VariantClear(rgVar+fetched-1);
641 fetched--;
642 }
643 if(pCeltFetched)
644 *pCeltFetched = 0;
645 return hr;
646 }
647 fetched++;
648 if(fetched == celt)
649 break;
650
652 }
653
654 This->enum_pos = cur;
655 if(pCeltFetched)
656 *pCeltFetched = fetched;
657 return celt == fetched ? S_OK : S_FALSE;
658}
659
661{
663 HWND next;
664
665 TRACE("(%p)->(%lu)\n", This, celt);
666
667 while(celt) {
668 if(!This->enum_pos)
669 next = GetWindow(This->hwnd, GW_CHILD);
670 else
671 next = GetWindow(This->enum_pos, GW_HWNDNEXT);
672 if(!next)
673 return S_FALSE;
674
675 This->enum_pos = next;
676 celt--;
677 }
678
679 return S_OK;
680}
681
683{
685
686 TRACE("(%p)\n", This);
687
688 This->enum_pos = 0;
689 return S_OK;
690}
691
693{
695 FIXME("(%p)->(%p)\n", This, ppEnum);
696 return E_NOTIMPL;
697}
698
699static const IEnumVARIANTVtbl ClientEnumVARIANTVtbl = {
707};
708
710{
711 return CONTAINING_RECORD(iface, Client, IServiceProvider_iface);
712}
713
715{
717 return IAccessible_QueryInterface(&This->IAccessible_iface, riid, ppv);
718}
719
721{
723 return IAccessible_AddRef(&This->IAccessible_iface);
724}
725
727{
729 return IAccessible_Release(&This->IAccessible_iface);
730}
731
733 REFIID riid, void **ppv)
734{
736
737 TRACE("(%p)->(%s %s %p)\n", This, debugstr_guid(guid_service), debugstr_guid(riid), ppv);
738
739 *ppv = NULL;
740 if (IsEqualIID(guid_service, &IIS_IsOleaccProxy))
741 return IAccessible_QueryInterface(&This->IAccessible_iface, riid, ppv);
742
743 return E_INVALIDARG;
744}
745
746static const IServiceProviderVtbl ClientServiceProviderVtbl = {
751};
752
754{
755 client->role = ROLE_SYSTEM_TEXT;
756}
757
759{
761 LONG style;
762
764 if(FAILED(hres))
765 return hres;
766
767 assert(V_VT(state) == VT_I4);
768
770 if(style & ES_READONLY)
772 if(style & ES_PASSWORD)
774 return S_OK;
775}
776
777/*
778 * Edit control objects have their name property defined by the first static
779 * text control preceding them in the order of window creation. If one is not
780 * found, the edit has no name property. In the case of the keyboard shortcut
781 * property, the first preceding visible static text control is used.
782 */
784{
785 HWND cur;
786
787 for(cur = hwnd; cur; cur = GetWindow(cur, GW_HWNDPREV)) {
788 WCHAR class_name[64];
789
790 if(!RealGetWindowClassW(cur, class_name, ARRAY_SIZE(class_name)))
791 continue;
792
793 if(!wcsicmp(class_name, WC_STATICW)) {
794 if(visible && !(GetWindowLongW(cur, GWL_STYLE) & WS_VISIBLE))
795 continue;
796 else
797 break;
798 }
799 }
800
801 return cur;
802}
803
805{
806 HWND label;
807
808 if(convert_child_id(&id) != CHILDID_SELF || !IsWindow(client->hwnd))
809 return E_INVALIDARG;
810
812 if(!label)
813 return S_FALSE;
814
815 return win_get_name(label, name);
816}
817
819{
820 HWND label;
821
823 return E_INVALIDARG;
824
826 if(!label)
827 return S_FALSE;
828
829 return win_get_kbd_shortcut(label, shortcut);
830}
831
833{
834 WCHAR *buf;
835 UINT len;
836
838 return E_INVALIDARG;
839
841 return E_ACCESSDENIED;
842
843 len = SendMessageW(client->hwnd, WM_GETTEXTLENGTH, 0, 0);
844 buf = heap_alloc_zero((len + 1) * sizeof(*buf));
845 if(!buf)
846 return E_OUTOFMEMORY;
847
849 *value_out = SysAllocString(buf);
850 heap_free(buf);
851 return S_OK;
852}
853
855{
856 if(convert_child_id(&id) != CHILDID_SELF || !IsWindow(client->hwnd))
857 return E_INVALIDARG;
858
860 return S_OK;
861}
862
863static const win_class_vtbl edit_vtbl = {
864 edit_init,
870};
871
872static const struct win_class_data classes[] = {
873 {WC_LISTBOXW, 0x10000, TRUE},
874 {L"#32768", 0x10001, TRUE}, /* menu */
875 {WC_BUTTONW, 0x10002, TRUE},
876 {WC_STATICW, 0x10003, TRUE},
877 {WC_EDITW, 0x10004, FALSE, &edit_vtbl},
878 {WC_COMBOBOXW, 0x10005, TRUE},
879 {L"#32770", 0x10006, TRUE}, /* dialog */
880 {L"#32771", 0x10007, TRUE}, /* winswitcher */
881 {L"MDIClient", 0x10008, TRUE},
882 {L"#32769", 0x10009, TRUE}, /* desktop */
883 {WC_SCROLLBARW, 0x1000a, TRUE},
884 {STATUSCLASSNAMEW, 0x1000b, TRUE},
885 {TOOLBARCLASSNAMEW, 0x1000c, TRUE},
886 {PROGRESS_CLASSW, 0x1000d, TRUE},
887 {ANIMATE_CLASSW, 0x1000e, TRUE},
888 {WC_TABCONTROLW, 0x1000f, TRUE},
889 {HOTKEY_CLASSW, 0x10010, TRUE},
890 {WC_HEADERW, 0x10011, TRUE},
891 {TRACKBAR_CLASSW, 0x10012, TRUE},
892 {WC_LISTVIEWW, 0x10013, TRUE},
893 {UPDOWN_CLASSW, 0x10016, TRUE},
894 {TOOLTIPS_CLASSW, 0x10018, TRUE},
895 {WC_TREEVIEWW, 0x10019, TRUE},
897 {WC_IPADDRESSW, 0, TRUE},
898 {L"RICHEDIT", 0x1001c, TRUE},
899 {L"RichEdit20A", 0, TRUE},
900 {L"RichEdit20W", 0, TRUE},
901 {NULL}
902};
903
905{
906 const struct win_class_data *data;
907 Client *client;
908 HRESULT hres = S_OK;
909
910 if(!IsWindow(hwnd))
911 return E_FAIL;
912
913 client = heap_alloc_zero(sizeof(Client));
914 if(!client)
915 return E_OUTOFMEMORY;
916
918
919 client->IAccessible_iface.lpVtbl = &ClientVtbl;
920 client->IOleWindow_iface.lpVtbl = &ClientOleWindowVtbl;
921 client->IEnumVARIANT_iface.lpVtbl = &ClientEnumVARIANTVtbl;
922 client->IServiceProvider_iface.lpVtbl = &ClientServiceProviderVtbl;
923 client->ref = 1;
924 client->hwnd = hwnd;
925 client->enum_pos = 0;
926 client->role = ROLE_SYSTEM_CLIENT;
927
928 if(data)
929 client->vtbl = data->vtbl;
930 if(client->vtbl && client->vtbl->init)
931 client->vtbl->init(client);
932
933 hres = IAccessible_QueryInterface(&client->IAccessible_iface, iid, obj);
934 IAccessible_Release(&client->IAccessible_iface);
935 return hres;
936}
Arabic default style
Definition: afstyles.h:94
static int state
Definition: maze.c:121
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 ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
RECT rect
Definition: combotst.c:67
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
struct tagVARIANT VARIANT
Definition: compat.h:2377
OLECHAR * BSTR
Definition: compat.h:2293
@ VT_I4
Definition: compat.h:2298
@ VT_EMPTY
Definition: compat.h:2295
@ VT_DISPATCH
Definition: compat.h:2304
#define wcsicmp
Definition: compat.h:15
LCID lcid
Definition: locale.c:5660
#define assert(_expr)
Definition: assert.h:32
static ULONG WINAPI Client_EnumVARIANT_Release(IEnumVARIANT *iface)
Definition: client.c:604
static HRESULT WINAPI Client_get_accSelection(IAccessible *iface, VARIANT *pvarID)
Definition: client.c:388
static HRESULT WINAPI Client_get_accChild(IAccessible *iface, VARIANT varChildID, IDispatch **ppdispChild)
Definition: client.c:209
static HRESULT WINAPI Client_EnumVARIANT_Skip(IEnumVARIANT *iface, ULONG celt)
Definition: client.c:660
static ULONG WINAPI Client_OleWindow_Release(IOleWindow *iface)
Definition: client.c:556
static HRESULT WINAPI Client_accHitTest(IAccessible *iface, LONG xLeft, LONG yTop, VARIANT *pvarID)
Definition: client.c:454
static HRESULT WINAPI Client_get_accKeyboardShortcut(IAccessible *iface, VARIANT id, BSTR *shortcut)
Definition: client.c:338
static HRESULT WINAPI Client_ServiceProvider_QueryService(IServiceProvider *iface, REFGUID guid_service, REFIID riid, void **ppv)
Definition: client.c:732
static HRESULT WINAPI Client_GetTypeInfo(IAccessible *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
Definition: client.c:158
static HRESULT WINAPI Client_get_accHelpTopic(IAccessible *iface, BSTR *pszHelpFile, VARIANT varID, LONG *pidTopic)
Definition: client.c:330
static ULONG WINAPI Client_AddRef(IAccessible *iface)
Definition: client.c:130
HRESULT create_client_object(HWND hwnd, const IID *iid, void **obj)
Definition: client.c:904
static const IServiceProviderVtbl ClientServiceProviderVtbl
Definition: client.c:746
static void edit_init(Client *client)
Definition: client.c:753
static HRESULT WINAPI Client_accNavigate(IAccessible *iface, LONG navDir, VARIANT varStart, VARIANT *pvarEnd)
Definition: client.c:446
static Client * impl_from_Client_ServiceProvider(IServiceProvider *iface)
Definition: client.c:709
static HRESULT WINAPI Client_get_accFocus(IAccessible *iface, VARIANT *focus)
Definition: client.c:355
static HRESULT WINAPI Client_get_accParent(IAccessible *iface, IDispatch **ppdispParent)
Definition: client.c:185
static HRESULT WINAPI Client_put_accValue(IAccessible *iface, VARIANT id, BSTR value)
Definition: client.c:494
static HRESULT WINAPI Client_accDoDefaultAction(IAccessible *iface, VARIANT varID)
Definition: client.c:480
static HRESULT WINAPI Client_OleWindow_QueryInterface(IOleWindow *iface, REFIID riid, void **ppv)
Definition: client.c:544
static HRESULT WINAPI Client_EnumVARIANT_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **ppv)
Definition: client.c:592
static HRESULT WINAPI Client_get_accChildCount(IAccessible *iface, LONG *pcountChildren)
Definition: client.c:195
static HRESULT WINAPI Client_QueryInterface(IAccessible *iface, REFIID riid, void **ppv)
Definition: client.c:104
static HRESULT WINAPI Client_EnumVARIANT_Reset(IEnumVARIANT *iface)
Definition: client.c:682
static const IAccessibleVtbl ClientVtbl
Definition: client.c:508
static HRESULT edit_get_state(Client *client, VARIANT id, VARIANT *state)
Definition: client.c:758
static const win_class_vtbl edit_vtbl
Definition: client.c:863
static HRESULT WINAPI Client_get_accDescription(IAccessible *iface, VARIANT varID, BSTR *pszDescription)
Definition: client.c:251
static const struct win_class_data classes[]
Definition: client.c:872
static const IOleWindowVtbl ClientOleWindowVtbl
Definition: client.c:579
static HRESULT edit_get_name(Client *client, VARIANT id, BSTR *name)
Definition: client.c:804
static ULONG WINAPI Client_ServiceProvider_AddRef(IServiceProvider *iface)
Definition: client.c:720
static HRESULT WINAPI Client_EnumVARIANT_Next(IEnumVARIANT *iface, ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched)
Definition: client.c:610
static Client * impl_from_Client(IAccessible *iface)
Definition: client.c:99
static Client * impl_from_Client_OleWindow(IOleWindow *iface)
Definition: client.c:539
static HRESULT WINAPI Client_GetTypeInfoCount(IAccessible *iface, UINT *pctinfo)
Definition: client.c:151
static HRESULT WINAPI Client_EnumVARIANT_Clone(IEnumVARIANT *iface, IEnumVARIANT **ppEnum)
Definition: client.c:692
static HRESULT client_get_state(Client *client, VARIANT id, VARIANT *state)
Definition: client.c:280
static HWND edit_find_label(HWND hwnd, BOOL visible)
Definition: client.c:783
static HRESULT edit_put_value(Client *client, VARIANT id, BSTR value)
Definition: client.c:854
static ULONG WINAPI Client_Release(IAccessible *iface)
Definition: client.c:139
static HRESULT WINAPI Client_GetIDsOfNames(IAccessible *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
Definition: client.c:166
static const IEnumVARIANTVtbl ClientEnumVARIANTVtbl
Definition: client.c:699
static HRESULT WINAPI Client_OleWindow_ContextSensitiveHelp(IOleWindow *iface, BOOL fEnterMode)
Definition: client.c:572
static HRESULT WINAPI Client_get_accHelp(IAccessible *iface, VARIANT varID, BSTR *pszHelp)
Definition: client.c:318
static ULONG WINAPI Client_OleWindow_AddRef(IOleWindow *iface)
Definition: client.c:550
static HRESULT WINAPI Client_accSelect(IAccessible *iface, LONG flagsSelect, VARIANT varID)
Definition: client.c:408
static HRESULT WINAPI Client_accLocation(IAccessible *iface, LONG *pxLeft, LONG *pyTop, LONG *pcxWidth, LONG *pcyHeight, VARIANT varID)
Definition: client.c:415
static HRESULT WINAPI Client_OleWindow_GetWindow(IOleWindow *iface, HWND *phwnd)
Definition: client.c:562
static HRESULT WINAPI Client_get_accValue(IAccessible *iface, VARIANT id, BSTR *value)
Definition: client.c:236
static ULONG WINAPI Client_ServiceProvider_Release(IServiceProvider *iface)
Definition: client.c:726
static HRESULT WINAPI Client_get_accRole(IAccessible *iface, VARIANT varID, VARIANT *pvarRole)
Definition: client.c:264
static HRESULT win_get_kbd_shortcut(HWND hwnd, BSTR *shortcut)
Definition: client.c:76
static ULONG WINAPI Client_EnumVARIANT_AddRef(IEnumVARIANT *iface)
Definition: client.c:598
static HRESULT WINAPI Client_get_accName(IAccessible *iface, VARIANT id, BSTR *name)
Definition: client.c:220
static HRESULT win_get_name(HWND hwnd, BSTR *name)
Definition: client.c:55
static HRESULT WINAPI Client_get_accDefaultAction(IAccessible *iface, VARIANT varID, BSTR *pszDefaultAction)
Definition: client.c:395
static Client * impl_from_Client_EnumVARIANT(IEnumVARIANT *iface)
Definition: client.c:587
static HRESULT WINAPI Client_put_accName(IAccessible *iface, VARIANT varID, BSTR pszName)
Definition: client.c:487
static HRESULT WINAPI Client_ServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: client.c:714
static HRESULT edit_get_value(Client *client, VARIANT id, BSTR *value_out)
Definition: client.c:832
static HRESULT WINAPI Client_Invoke(IAccessible *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
Definition: client.c:175
static HRESULT edit_get_kbd_shortcut(Client *client, VARIANT id, BSTR *shortcut)
Definition: client.c:818
static HRESULT WINAPI Client_get_accState(IAccessible *iface, VARIANT id, VARIANT *state)
Definition: client.c:307
HRESULT WINAPI AccessibleObjectFromWindow(HWND hwnd, DWORD dwObjectID, REFIID riid, void **ppvObject)
Definition: main.c:386
int convert_child_id(VARIANT *v)
Definition: main.c:48
const struct win_class_data * find_class_data(HWND hwnd, const struct win_class_data *classes)
Definition: main.c:59
static const char * debugstr_variant(const VARIANT *var)
Definition: dom.c:505
#define pt(x, y)
Definition: drawing.c:79
#define L(x)
Definition: resources.c:13
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
FxCollectionEntry * cur
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
LONG_PTR LPARAM
Definition: minwindef.h:175
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
static const WCHAR label[]
Definition: itemdlg.c:1546
HRESULT hres
Definition: protocol.c:465
static VARIANTARG static DISPID
Definition: ordinal.c:49
static HWND child
Definition: cursoricon.c:298
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:240
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:341
#define V_VT(A)
Definition: oleauto.h:211
#define V_I4(A)
Definition: oleauto.h:247
#define V_DISPATCH(A)
Definition: oleauto.h:239
const GUID IID_IOleWindow
const GUID IID_IDispatch
#define ES_PASSWORD
Definition: pedump.c:670
#define ES_READONLY
Definition: pedump.c:675
short WCHAR
Definition: pedump.c:58
#define WS_VISIBLE
Definition: pedump.c:620
long LONG
Definition: pedump.c:60
#define WS_DISABLED
Definition: pedump.c:621
#define WC_TABCONTROLW
Definition: commctrl.h:3940
#define UPDOWN_CLASSW
Definition: commctrl.h:2124
#define WC_BUTTONW
Definition: commctrl.h:4628
#define HOTKEY_CLASSW
Definition: commctrl.h:2241
#define PROGRESS_CLASSW
Definition: commctrl.h:2181
#define WC_LISTVIEWW
Definition: commctrl.h:2262
#define WC_EDITW
Definition: commctrl.h:4692
#define TOOLTIPS_CLASSW
Definition: commctrl.h:1707
#define TRACKBAR_CLASSW
Definition: commctrl.h:2016
#define STATUSCLASSNAMEW
Definition: commctrl.h:1941
#define ANIMATE_CLASSW
Definition: commctrl.h:4146
#define WC_HEADERW
Definition: commctrl.h:624
#define WC_IPADDRESSW
Definition: commctrl.h:4477
#define TOOLBARCLASSNAMEW
Definition: commctrl.h:943
#define WC_TREEVIEWW
Definition: commctrl.h:3248
#define DATETIMEPICK_CLASSW
Definition: commctrl.h:4327
#define WC_STATICW
Definition: commctrl.h:4685
#define WC_LISTBOXW
Definition: commctrl.h:4716
#define WC_SCROLLBARW
Definition: commctrl.h:4734
#define WC_COMBOBOXW
Definition: commctrl.h:4722
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
static unsigned __int64 next
Definition: rand_nt.c:6
DWORD LCID
Definition: nls.h:13
static FILE * client
Definition: client.c:37
#define TRACE(s)
Definition: solgame.cpp:4
Definition: client.c:31
const win_class_vtbl * vtbl
Definition: client.c:43
IEnumVARIANT IEnumVARIANT_iface
Definition: client.c:34
HWND enum_pos
Definition: client.c:40
IOleWindow IOleWindow_iface
Definition: client.c:33
IAccessible IAccessible_iface
Definition: client.c:32
LONG ref
Definition: client.c:37
IServiceProvider IServiceProvider_iface
Definition: client.c:35
INT role
Definition: client.c:41
HWND hwnd
Definition: client.c:39
Definition: scsiwmi.h:51
Definition: name.c:39
Definition: send.c:48
LONG right
Definition: windef.h:108
LONG bottom
Definition: windef.h:109
LONG top
Definition: windef.h:107
LONG left
Definition: windef.h:106
HRESULT(* get_state)(Client *, VARIANT, VARIANT *)
Definition: client.c:48
HRESULT(* get_kbd_shortcut)(Client *, VARIANT, BSTR *)
Definition: client.c:50
HRESULT(* put_value)(Client *, VARIANT, BSTR)
Definition: client.c:52
void(* init)(Client *)
Definition: client.c:47
HRESULT(* get_value)(Client *, VARIANT, BSTR *)
Definition: client.c:51
HRESULT(* get_name)(Client *, VARIANT, BSTR *)
Definition: client.c:49
int32_t INT
Definition: typedefs.h:58
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
Definition: pdh_main.c:96
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:626
BOOL WINAPI GetGUIThreadInfo(DWORD, LPGUITHREADINFO)
Definition: ntwrapper.h:398
#define OBJID_WINDOW
Definition: winable.h:15
#define CHILDID_SELF
Definition: winable.h:14
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_ACCESSDENIED
Definition: winerror.h:4116
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define WM_GETTEXTLENGTH
Definition: winuser.h:1647
#define STATE_SYSTEM_READONLY
Definition: winuser.h:2975
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define STATE_SYSTEM_FOCUSED
Definition: winuser.h:2971
#define WM_GETTEXT
Definition: winuser.h:1646
HWND WINAPI ChildWindowFromPointEx(_In_ HWND, _In_ POINT, _In_ UINT)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define GW_HWNDNEXT
Definition: winuser.h:772
#define WM_SETTEXT
Definition: winuser.h:1645
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define STATE_SYSTEM_FOCUSABLE
Definition: winuser.h:2989
BOOL WINAPI IsChild(_In_ HWND, _In_ HWND)
#define STATE_SYSTEM_INVISIBLE
Definition: winuser.h:2984
#define STATE_SYSTEM_UNAVAILABLE
Definition: winuser.h:2969
#define CWP_SKIPINVISIBLE
Definition: winuser.h:208
UINT WINAPI RealGetWindowClassW(_In_ HWND hwnd, _Out_writes_to_(cchClassNameMax, return) LPWSTR ptszClassName, _In_ UINT cchClassNameMax)
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
#define GW_HWNDPREV
Definition: winuser.h:773
#define GW_CHILD
Definition: winuser.h:774
#define GWL_STYLE
Definition: winuser.h:863
BOOL WINAPI IsWindowVisible(_In_ HWND)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define STATE_SYSTEM_PROTECTED
Definition: winuser.h:2998
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)