27#include <com/sun/star/lang/XServiceInfo.hpp>
28#include <com/sun/star/accessibility/XMSAAService.hpp>
29#include <com/sun/star/accessibility/AccessibleRole.hpp>
31#include <com/sun/star/awt/XExtendedToolkit.hpp>
51class MSAAServiceImpl :
public ::cppu::WeakImplHelper<
52 XMSAAService, lang::XServiceInfo >
61 virtual void SAL_CALL
dispose()
override;
62 virtual void SAL_CALL addEventListener(
const css::uno::Reference< css::lang::XEventListener >& )
override
64 virtual void SAL_CALL removeEventListener(
const css::uno::Reference< css::lang::XEventListener >& )
override
68 virtual sal_Int64 SAL_CALL getAccObjectPtr(
69 sal_Int64 hWnd, sal_Int64 lParam, sal_Int64 wParam)
override;
70 virtual void SAL_CALL handleWindowOpened(sal_Int64)
override;
85sal_Int64 MSAAServiceImpl::getAccObjectPtr(
86 sal_Int64 hWnd, sal_Int64 lParam, sal_Int64 wParam)
103void MSAAServiceImpl::handleWindowOpened(sal_Int64 nAcc)
107 SAL_INFO(
"iacc2",
"Window opened " << nAcc );
112 static_cast<css::accessibility::XAccessible*
>(
113 reinterpret_cast<void*
>(nAcc)));
117OUString MSAAServiceImpl::getImplementationName()
119 return "com.sun.star.accessibility.my_sc_implementation.MSAAService";
127sal_Bool MSAAServiceImpl::supportsService( OUString
const & serviceName )
137Sequence< OUString > MSAAServiceImpl::getSupportedServiceNames()
139 return {
"com.sun.star.accessibility.MSAAService" };
147 css::uno::Reference< css::accessibility::XAccessible > xAccessible;
149 SAL_INFO(
"iacc2",
"Decide whether to register existing window with IAccessible2" );
159 css::uno::Reference< css::accessibility::XAccessible > xParentAccessible(pParentWindow->
GetAccessible());
160 if ( xParentAccessible.is() )
162 css::uno::Reference< css::accessibility::XAccessibleContext > xParentAC( xParentAccessible->getAccessibleContext() );
163 if ( xParentAC.is() && (css::accessibility::AccessibleRole::COMBO_BOX == xParentAC->getAccessibleRole()) )
167 sal_Int64
nCount = xParentAC->getAccessibleChildCount();
168 for (sal_Int64
n = 0; (
n <
nCount) && !xAccessible.is();
n++)
170 css::uno::Reference< css::accessibility::XAccessible > xChild = xParentAC->getAccessibleChild(
n);
173 css::uno::Reference< css::accessibility::XAccessibleContext > xChildAC = xChild->getAccessibleContext();
174 if ( xChildAC.is() && (css::accessibility::AccessibleRole::LIST == xChildAC->getAccessibleRole()) )
176 xAccessible = xChild;
183 catch (css::uno::RuntimeException
const&)
195 if ( ! xAccessible.is() )
198 assert( xAccMgr.is() );
199 if ( xAccessible.is() )
201 xAccMgr->handleWindowOpened(
202 reinterpret_cast<sal_Int64
>(xAccessible.get()));
203 SAL_INFO(
"iacc2",
"Decide whether to register existing window with IAccessible2" );
215 for ( sal_uInt16
i = 0;
i < nTopWindowCount;
i++ )
218 css::uno::Reference< css::accessibility::XAccessible > xAccessible = pTopWindow->
GetAccessible();
219 if ( xAccessible.is() )
221 css::uno::Reference< css::accessibility::XAccessibleContext > xAC( xAccessible->getAccessibleContext() );
224 if ( !xAC->getAccessibleName().isEmpty() )
231MSAAServiceImpl::MSAAServiceImpl()
239 xToolkit->addTopWindowListener( xRef );
240 SAL_INFO(
"iacc2",
"successfully connected to the toolkit event hose" );
243 SAL_WARN(
"iacc2",
"No VCL toolkit interface to listen to for events");
246void MSAAServiceImpl::dispose()
259extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
261 css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any>
const&)
263 Reference< XMSAAService > xAccMgr(
new MSAAServiceImpl() );
267 SAL_INFO(
"iacc2",
"Created new IAccessible2 service impl.");
270 return xAccMgr.get();
AccEventListener is the general event listener for all top windows.
static tools::Long GetTopWindowCount()
static vcl::Window * GetTopWindow(tools::Long nIndex)
static css::uno::Reference< css::awt::XToolkit > GetVCLToolkit()
vcl::Window * GetParent() const
css::uno::Reference< css::accessibility::XAccessible > GetAccessible(bool bCreate=true)
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
rtl::Reference< AccTopWindowListener > m_pTopWindowListener
css::uno::Sequence< OUString > getSupportedServiceNames()
OUString getImplementationName()
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * winaccessibility_MSAAServiceImpl_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
static void AccessBridgeHandleExistingWindow(const Reference< XMSAAService > &xAccMgr, vcl::Window *pWindow, bool bShow)
static void AccessBridgeUpdateOldTopWindows(const Reference< XMSAAService > &xAccMgr)