1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/accessible/src/windows/msaa/AccessibleWrap.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,223 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* vim: set ts=2 et sw=2 tw=80: */ 1.6 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 +#ifndef mozilla_a11y_AccessibleWrap_h_ 1.11 +#define mozilla_a11y_AccessibleWrap_h_ 1.12 + 1.13 +#include "nsCOMPtr.h" 1.14 +#include "Accessible.h" 1.15 +#include "Accessible2.h" 1.16 +#include "ia2Accessible.h" 1.17 +#include "ia2AccessibleComponent.h" 1.18 +#include "ia2AccessibleHyperlink.h" 1.19 +#include "ia2AccessibleValue.h" 1.20 + 1.21 +#ifdef __GNUC__ 1.22 +// Inheriting from both XPCOM and MSCOM interfaces causes a lot of warnings 1.23 +// about virtual functions being hidden by each other. This is done by 1.24 +// design, so silence the warning. 1.25 +#pragma GCC diagnostic ignored "-Woverloaded-virtual" 1.26 +#endif 1.27 + 1.28 +namespace mozilla { 1.29 +namespace a11y { 1.30 + 1.31 +class AccessibleWrap : public Accessible, 1.32 + public ia2Accessible, 1.33 + public ia2AccessibleComponent, 1.34 + public ia2AccessibleHyperlink, 1.35 + public ia2AccessibleValue 1.36 +{ 1.37 +public: // construction, destruction 1.38 + AccessibleWrap(nsIContent* aContent, DocAccessible* aDoc) : 1.39 + Accessible(aContent, aDoc) { } 1.40 + virtual ~AccessibleWrap() { } 1.41 + 1.42 + // nsISupports 1.43 + NS_DECL_ISUPPORTS_INHERITED 1.44 + 1.45 + public: // IUnknown methods - see iunknown.h for documentation 1.46 + STDMETHODIMP QueryInterface(REFIID, void**); 1.47 + 1.48 + // Return the registered OLE class ID of this object's CfDataObj. 1.49 + CLSID GetClassID() const; 1.50 + 1.51 + public: // COM interface IAccessible 1.52 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accParent( 1.53 + /* [retval][out] */ IDispatch __RPC_FAR *__RPC_FAR *ppdispParent); 1.54 + 1.55 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accChildCount( 1.56 + /* [retval][out] */ long __RPC_FAR *pcountChildren); 1.57 + 1.58 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accChild( 1.59 + /* [in] */ VARIANT varChild, 1.60 + /* [retval][out] */ IDispatch __RPC_FAR *__RPC_FAR *ppdispChild); 1.61 + 1.62 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accName( 1.63 + /* [optional][in] */ VARIANT varChild, 1.64 + /* [retval][out] */ BSTR __RPC_FAR *pszName); 1.65 + 1.66 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accValue( 1.67 + /* [optional][in] */ VARIANT varChild, 1.68 + /* [retval][out] */ BSTR __RPC_FAR *pszValue); 1.69 + 1.70 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accDescription( 1.71 + /* [optional][in] */ VARIANT varChild, 1.72 + /* [retval][out] */ BSTR __RPC_FAR *pszDescription); 1.73 + 1.74 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accRole( 1.75 + /* [optional][in] */ VARIANT varChild, 1.76 + /* [retval][out] */ VARIANT __RPC_FAR *pvarRole); 1.77 + 1.78 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accState( 1.79 + /* [optional][in] */ VARIANT varChild, 1.80 + /* [retval][out] */ VARIANT __RPC_FAR *pvarState); 1.81 + 1.82 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accHelp( 1.83 + /* [optional][in] */ VARIANT varChild, 1.84 + /* [retval][out] */ BSTR __RPC_FAR *pszHelp); 1.85 + 1.86 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accHelpTopic( 1.87 + /* [out] */ BSTR __RPC_FAR *pszHelpFile, 1.88 + /* [optional][in] */ VARIANT varChild, 1.89 + /* [retval][out] */ long __RPC_FAR *pidTopic); 1.90 + 1.91 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accKeyboardShortcut( 1.92 + /* [optional][in] */ VARIANT varChild, 1.93 + /* [retval][out] */ BSTR __RPC_FAR *pszKeyboardShortcut); 1.94 + 1.95 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accFocus( 1.96 + /* [retval][out] */ VARIANT __RPC_FAR *pvarChild); 1.97 + 1.98 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accSelection( 1.99 + /* [retval][out] */ VARIANT __RPC_FAR *pvarChildren); 1.100 + 1.101 + virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_accDefaultAction( 1.102 + /* [optional][in] */ VARIANT varChild, 1.103 + /* [retval][out] */ BSTR __RPC_FAR *pszDefaultAction); 1.104 + 1.105 + virtual /* [id] */ HRESULT STDMETHODCALLTYPE accSelect( 1.106 + /* [in] */ long flagsSelect, 1.107 + /* [optional][in] */ VARIANT varChild); 1.108 + 1.109 + virtual /* [id] */ HRESULT STDMETHODCALLTYPE accLocation( 1.110 + /* [out] */ long __RPC_FAR *pxLeft, 1.111 + /* [out] */ long __RPC_FAR *pyTop, 1.112 + /* [out] */ long __RPC_FAR *pcxWidth, 1.113 + /* [out] */ long __RPC_FAR *pcyHeight, 1.114 + /* [optional][in] */ VARIANT varChild); 1.115 + 1.116 + virtual /* [id] */ HRESULT STDMETHODCALLTYPE accNavigate( 1.117 + /* [in] */ long navDir, 1.118 + /* [optional][in] */ VARIANT varStart, 1.119 + /* [retval][out] */ VARIANT __RPC_FAR *pvarEndUpAt); 1.120 + 1.121 + virtual /* [id] */ HRESULT STDMETHODCALLTYPE accHitTest( 1.122 + /* [in] */ long xLeft, 1.123 + /* [in] */ long yTop, 1.124 + /* [retval][out] */ VARIANT __RPC_FAR *pvarChild); 1.125 + 1.126 + virtual /* [id] */ HRESULT STDMETHODCALLTYPE accDoDefaultAction( 1.127 + /* [optional][in] */ VARIANT varChild); 1.128 + 1.129 + virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_accName( 1.130 + /* [optional][in] */ VARIANT varChild, 1.131 + /* [in] */ BSTR szName); 1.132 + 1.133 + virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_accValue( 1.134 + /* [optional][in] */ VARIANT varChild, 1.135 + /* [in] */ BSTR szValue); 1.136 + 1.137 + // IDispatch (support of scripting languages like VB) 1.138 + virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo); 1.139 + 1.140 + virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, 1.141 + ITypeInfo **ppTInfo); 1.142 + 1.143 + virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, 1.144 + LPOLESTR *rgszNames, 1.145 + UINT cNames, 1.146 + LCID lcid, 1.147 + DISPID *rgDispId); 1.148 + 1.149 + virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, 1.150 + LCID lcid, WORD wFlags, 1.151 + DISPPARAMS *pDispParams, 1.152 + VARIANT *pVarResult, 1.153 + EXCEPINFO *pExcepInfo, 1.154 + UINT *puArgErr); 1.155 + 1.156 + // Accessible 1.157 + virtual nsresult HandleAccEvent(AccEvent* aEvent); 1.158 + 1.159 + // Helper methods 1.160 + static int32_t GetChildIDFor(Accessible* aAccessible); 1.161 + static HWND GetHWNDFor(Accessible* aAccessible); 1.162 + 1.163 + /** 1.164 + * System caret support: update the Windows caret position. 1.165 + * The system caret works more universally than the MSAA caret 1.166 + * For example, Window-Eyes, JAWS, ZoomText and Windows Tablet Edition use it 1.167 + * We will use an invisible system caret. 1.168 + * Gecko is still responsible for drawing its own caret 1.169 + */ 1.170 + void UpdateSystemCaretFor(Accessible* aAccessible); 1.171 + 1.172 + /** 1.173 + * Find an accessible by the given child ID in cached documents. 1.174 + */ 1.175 + Accessible* GetXPAccessibleFor(const VARIANT& aVarChild); 1.176 + 1.177 + NS_IMETHOD GetNativeInterface(void **aOutAccessible); 1.178 + 1.179 + static IDispatch *NativeAccessible(nsIAccessible *aXPAccessible); 1.180 + 1.181 +protected: 1.182 + 1.183 + /** 1.184 + * Creates ITypeInfo for LIBID_Accessibility if it's needed and returns it. 1.185 + */ 1.186 + static ITypeInfo* GetTI(LCID lcid); 1.187 + 1.188 + static ITypeInfo* gTypeInfo; 1.189 + 1.190 + 1.191 + enum navRelations { 1.192 + NAVRELATION_CONTROLLED_BY = 0x1000, 1.193 + NAVRELATION_CONTROLLER_FOR = 0x1001, 1.194 + NAVRELATION_LABEL_FOR = 0x1002, 1.195 + NAVRELATION_LABELLED_BY = 0x1003, 1.196 + NAVRELATION_MEMBER_OF = 0x1004, 1.197 + NAVRELATION_NODE_CHILD_OF = 0x1005, 1.198 + NAVRELATION_FLOWS_TO = 0x1006, 1.199 + NAVRELATION_FLOWS_FROM = 0x1007, 1.200 + NAVRELATION_SUBWINDOW_OF = 0x1008, 1.201 + NAVRELATION_EMBEDS = 0x1009, 1.202 + NAVRELATION_EMBEDDED_BY = 0x100a, 1.203 + NAVRELATION_POPUP_FOR = 0x100b, 1.204 + NAVRELATION_PARENT_WINDOW_OF = 0x100c, 1.205 + NAVRELATION_DEFAULT_BUTTON = 0x100d, 1.206 + NAVRELATION_DESCRIBED_BY = 0x100e, 1.207 + NAVRELATION_DESCRIPTION_FOR = 0x100f, 1.208 + NAVRELATION_NODE_PARENT_OF = 0x1010, 1.209 + NAVRELATION_CONTAINING_DOCUMENT = 0x1011, 1.210 + NAVRELATION_CONTAINING_TAB_PANE = 0x1012, 1.211 + NAVRELATION_CONTAINING_APPLICATION = 0x1014 1.212 + }; 1.213 +}; 1.214 + 1.215 +} // namespace a11y 1.216 +} // namespace mozilla 1.217 + 1.218 +#ifdef XP_WIN 1.219 +// Undo the windows.h damage 1.220 +#undef GetMessage 1.221 +#undef CreateEvent 1.222 +#undef GetClassName 1.223 +#undef GetBinaryType 1.224 +#endif 1.225 + 1.226 +#endif