vcl/source/app/svdata.cxx | 10 + winaccessibility/source/service/msaaservice_impl.cxx | 144 ++++++------------- 2 files changed, 59 insertions(+), 95 deletions(-)
New commits: commit ab9710c4a2c0e42d8e3219d21e2f7a92b1f19b76 Author: Michael Meeks <michael.me...@collabora.com> Date: Mon Nov 18 20:46:56 2013 +0000 uia: cleanup msa service info and implement XComponent. Change-Id: I00d19949a67147ef077bd92abc09ca8e8cf9a661 diff --git a/vcl/source/app/svdata.cxx b/vcl/source/app/svdata.cxx index 521b07c..0423b68 100644 --- a/vcl/source/app/svdata.cxx +++ b/vcl/source/app/svdata.cxx @@ -321,13 +321,19 @@ bool ImplInitAccessBridge(bool bAllowCancel, bool &rCancelled) { css::uno::Reference< XComponentContext > xContext(comphelper::getProcessComponentContext()); - // Windows only but safe here - if ( !getenv ("SAL_DISABLE_IACCESSIBLE2") ) + bool bTryIAcc2 = ( officecfg::Office::Common::Misc::ExperimentalMode::get( xContext ) && + !getenv ("SAL_DISABLE_IACCESSIBLE2") ); + + if ( bTryIAcc2 ) // Windows only really { // FIXME: convert to service ... pSVData->mxAccessBridge = css::accessibility::MSAAService::create( xContext ); pSVData->mxAccessBridge = Reference< XComponent >( xContext->getServiceManager()->createInstanceWithContext( "com.sun.star.accessibility.MSAAService", xContext ), UNO_QUERY ); + + SAL_INFO( "vcl", "IAccessible2 bridge is: " << (int)(pSVData->mxAccessBridge.is()) ); return pSVData->mxAccessBridge.is(); } + else + SAL_INFO( "vcl", "IAccessible2 disabled, falling back to java" ); css::uno::Reference< XExtendedToolkit > xToolkit = css::uno::Reference< XExtendedToolkit >(Application::GetVCLToolkit(), UNO_QUERY); diff --git a/winaccessibility/source/service/msaaservice_impl.cxx b/winaccessibility/source/service/msaaservice_impl.cxx index 99b6728..b96a86d 100755 --- a/winaccessibility/source/service/msaaservice_impl.cxx +++ b/winaccessibility/source/service/msaaservice_impl.cxx @@ -17,7 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <cppuhelper/implbase3.hxx> +#include <cppuhelper/implbase4.hxx> #include <cppuhelper/factory.hxx> #include <cppuhelper/implementationentry.hxx> @@ -51,78 +51,47 @@ extern void handleWindowOpened_impl( long pAcc); namespace my_sc_impl { -/** - * Method that returns the service name. - * @param - * @return Name sequence. - */ static Sequence< OUString > getSupportedServiceNames_MSAAServiceImpl() { - static Sequence < OUString > *pNames = 0; - if( ! pNames ) - { - // MutexGuard guard( Mutex::getGlobalMutex() ); - if( !pNames ) - { - static Sequence< OUString > seqNames(1); - seqNames.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.accessibility.MSAAService")); - pNames = &seqNames; - } - } - return *pNames; + Sequence< OUString > seqNames(1); + seqNames.getArray()[0] = "com.sun.star.accessibility.MSAAService"; + return seqNames; } -/** - * Method that returns the service name. - * @param - * @return Name sequence. - */ static OUString getImplementationName_MSAAServiceImpl() { - static OUString *pImplName = 0; - if( ! pImplName ) - { - // MutexGuard guard( Mutex::getGlobalMutex() ); - if( ! pImplName ) - { - static OUString implName( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.accessibility.my_sc_implementation.MSAAService") ); - pImplName = &implName; - } - } - return *pImplName; + return OUString( "com.sun.star.accessibility.my_sc_implementation.MSAAService" ); } -class MSAAServiceImpl : public ::cppu::WeakImplHelper3< - XMSAAService, lang::XServiceInfo, lang::XInitialization > +class MSAAServiceImpl : public ::cppu::WeakImplHelper4< + XMSAAService, lang::XServiceInfo, + lang::XInitialization, lang::XComponent > { OUString m_arg; public: - // focus on three given interfaces, - // no need to implement XInterface, XTypeProvider, XWeak + // focus on four interfaces, + // no need to implement XInterface, XTypeProvider, XWeak etc. MSAAServiceImpl (); virtual ~MSAAServiceImpl( void ); + // XInitialization will be called upon createInstanceWithArguments[AndContext]() - virtual void SAL_CALL initialize( Sequence< Any > const & args ) - throw (Exception); + virtual void SAL_CALL initialize( Sequence< Any > const & args ) throw (Exception); + + // XComponent - as used by VCL to lifecycle manage this bridge. + virtual void SAL_CALL dispose(); + virtual void SAL_CALL addEventListener( const ::css::uno::Reference< ::css::lang::XEventListener >& xListener ) { /* dummy */ } + virtual void SAL_CALL removeEventListener( const ::css::uno::Reference< ::css::lang::XEventListener >& aListener ) { /* dummy */ } + // XMSAAService - virtual sal_Int32 SAL_CALL getAccObjectPtr (long hWnd, long lParam, long wParam) - throw (RuntimeException); - virtual void SAL_CALL handleWindowOpened(sal_Int32) - throw (RuntimeException); + virtual sal_Int32 SAL_CALL getAccObjectPtr (long hWnd, long lParam, long wParam); + virtual void SAL_CALL handleWindowOpened(sal_Int32); + // XServiceInfo - virtual OUString SAL_CALL getImplementationName() - throw (RuntimeException); - virtual sal_Bool SAL_CALL supportsService( OUString const & serviceName ) - throw (RuntimeException); - virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() - throw (RuntimeException); + virtual OUString SAL_CALL getImplementationName(); + virtual sal_Bool SAL_CALL supportsService( OUString const & serviceName ); + virtual Sequence< OUString > SAL_CALL getSupportedServiceNames(); }; -/** - * Implemention of XInitialization. - * @param - * @return. - */ void MSAAServiceImpl::initialize( Sequence< Any > const & args ) throw (Exception) { if (1 != args.getLength()) @@ -148,29 +117,23 @@ void MSAAServiceImpl::initialize( Sequence< Any > const & args ) throw (Exceptio */ sal_Int32 MSAAServiceImpl::getAccObjectPtr ( long hWnd, long lParam, long wParam) throw (RuntimeException) { - return GetMSComPtr(hWnd, lParam, wParam); + return GetMSComPtr( hWnd, lParam, wParam ); } /** - * Implemention of handleWindowOpened,the method will be invoked when a top window - * opened and AT starts up. + * Implemention of handleWindowOpened, the method will be invoked when a + * top window is opened and AT starts up. * @param * @return */ void MSAAServiceImpl::handleWindowOpened( sal_Int32 pAcc) { - handleWindowOpened_impl(pAcc); + handleWindowOpened_impl( pAcc ); } -/** - * Implemention of XServiceInfo. - * @param - * @return Implementataion name. - */ OUString MSAAServiceImpl::getImplementationName() throw (RuntimeException) { - // unique implementation name - return OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.accessibility.my_sc_impl.MSAAService") ); + return OUString( "com.sun.star.accessibility.my_sc_impl.MSAAService" ); } /** @@ -181,7 +144,7 @@ OUString MSAAServiceImpl::getImplementationName() throw (RuntimeException) sal_Bool MSAAServiceImpl::supportsService( OUString const & serviceName ) throw (RuntimeException) { // this object only supports one service, so the test is simple - return serviceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.accessibility.MSAAService") ); + return serviceName == "com.sun.star.accessibility.MSAAService"; } /** @@ -277,7 +240,7 @@ void AccessBridgeUpdateOldTopWindows( const Reference< XMSAAService > &xAccMgr ) } } -sal_Bool HasAtHook() +static bool HasAtHook() { sal_Int32 bIsRuning=0; // BOOL WINAPI SystemParametersInfo( @@ -288,39 +251,37 @@ sal_Bool HasAtHook() // ); // pvParam must be BOOL (defined in MFC as int) // End - if(SystemParametersInfo(SPI_GETSCREENREADER,0,&bIsRuning,0)) - { - if( bIsRuning ) - return sal_True; - } - return sal_False; + return SystemParametersInfo( SPI_GETSCREENREADER, 0, + &bIsRuning, 0) && bIsRuning; } /** - * Static method that can create an entity of our MSAA Service - * @param xContext No use here. - * @return The object interface. - */ + * Static method that can create an entity of our MSAA Service + * @param xContext No use here. + * @return The object interface. + */ Reference< XInterface > SAL_CALL create_MSAAServiceImpl( Reference< XComponentContext > const & /*xContext*/ ) SAL_THROW( () ) { + bool bRunWithoutAt = getenv("SAL_FORCE_IACCESSIBLE2"); + if ( !HasAtHook() ) { - SAL_INFO("iacc2", "Apparently no running AT -> not enabling IAccessible2 integration"); - return Reference< XMSAAService >(); + if ( !bRunWithoutAt ) + { + SAL_INFO("iacc2", "Apparently no running AT -> not enabling IAccessible2 integration"); + return Reference< XMSAAService >(); + } } Reference< XMSAAService > xAccMgr( new MSAAServiceImpl() ); AccessBridgeUpdateOldTopWindows( xAccMgr ); + SAL_INFO("iacc2", "Created new IAccessible2 service impl."); + return xAccMgr; } -/** - * Constructor. - * @param - * @return - */ MSAAServiceImpl::MSAAServiceImpl() { Reference< XExtendedToolkit > xToolkit = @@ -336,14 +297,12 @@ MSAAServiceImpl::MSAAServiceImpl() } } -/** - * Static method that can create an entity of our MSAA Service - * @param Destructor - * @return - */ MSAAServiceImpl::~MSAAServiceImpl() { +} +MSAAServiceImpl::dispose() +{ // As all folders and streams contain references to their parents, // we must remove these references so that they will be deleted when // the hash_map of the root folder is cleared, releasing all subfolders @@ -351,8 +310,6 @@ MSAAServiceImpl::~MSAAServiceImpl() // released when this destructor completes, the folder tree should be // deleted fully (and automagically). FreeTopWindowListener(); - - } } @@ -364,7 +321,8 @@ static struct ::cppu::ImplementationEntry s_component_entries [] = { { create_MSAAServiceImpl, getImplementationName_MSAAServiceImpl, - getSupportedServiceNames_MSAAServiceImpl, ::cppu::createSingleComponentFactory, + getSupportedServiceNames_MSAAServiceImpl, + ::cppu::createSingleComponentFactory, 0, 0 }, { 0, 0, 0, 0, 0, 0 } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits