diff options
Diffstat (limited to 'toolkit/source/helper/accessibilityclient.cxx')
-rw-r--r-- | toolkit/source/helper/accessibilityclient.cxx | 280 |
1 files changed, 0 insertions, 280 deletions
diff --git a/toolkit/source/helper/accessibilityclient.cxx b/toolkit/source/helper/accessibilityclient.cxx deleted file mode 100644 index c926ec25d8..0000000000 --- a/toolkit/source/helper/accessibilityclient.cxx +++ /dev/null @@ -1,280 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_toolkit.hxx" -#include <toolkit/helper/accessibilityclient.hxx> -#include <toolkit/helper/accessiblefactory.hxx> -#include <osl/module.h> -#include <osl/diagnose.h> -#include <tools/solar.h> - -// #define UNLOAD_ON_LAST_CLIENT_DYING - // this is not recommended currently. If enabled, the implementation will log - // the number of active clients, and unload the acc library when the last client - // goes away. - // Sounds like a good idea, unfortunately, there's no guarantee that all objects - // implemented in this library are already dead. - // Iow, just because an object implementing an XAccessible (implemented in this lib - // here) died, it's not said that everybody released all references to the - // XAccessibleContext used by this component, and implemented in the acc lib. - // So we cannot really unload the lib. - // - // Alternatively, if the lib would us own "usage counting", i.e. every component - // implemented therein would affect a static ref count, the acc lib could care - // for unloading itself. - -//........................................................................ -namespace toolkit -{ -//........................................................................ - - using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::accessibility; - - namespace - { -#ifdef UNLOAD_ON_LAST_CLIENT_DYING - static oslInterlockedCount s_nAccessibilityClients = 0; -#endif // UNLOAD_ON_LAST_CLIENT_DYING - static oslModule s_hAccessibleImplementationModule = NULL; - static GetStandardAccComponentFactory s_pAccessibleFactoryFunc = NULL; - static ::rtl::Reference< IAccessibleFactory > s_pFactory; - } - - //==================================================================== - //= AccessibleDummyFactory - //==================================================================== - class AccessibleDummyFactory : public IAccessibleFactory - { - public: - AccessibleDummyFactory(); - - protected: - virtual ~AccessibleDummyFactory(); - - private: - AccessibleDummyFactory( const AccessibleDummyFactory& ); // never implemented - AccessibleDummyFactory& operator=( const AccessibleDummyFactory& ); // never implemented - - oslInterlockedCount m_refCount; - - public: - // IReference - virtual oslInterlockedCount SAL_CALL acquire(); - virtual oslInterlockedCount SAL_CALL release(); - - // IAccessibleFactory - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXButton* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXCheckBox* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXRadioButton* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXListBox* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXFixedHyperlink* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXFixedText* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXScrollBar* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXEdit* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXComboBox* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXToolBox* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > - createAccessibleContext( VCLXWindow* /*_pXWindow*/ ) - { - return NULL; - } - ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > - createAccessible( Menu* /*_pMenu*/, sal_Bool /*_bIsMenuBar*/ ) - { - return NULL; - } - }; - - //-------------------------------------------------------------------- - AccessibleDummyFactory::AccessibleDummyFactory() - { - } - - //-------------------------------------------------------------------- - AccessibleDummyFactory::~AccessibleDummyFactory() - { - } - - //-------------------------------------------------------------------- - oslInterlockedCount SAL_CALL AccessibleDummyFactory::acquire() - { - return osl_incrementInterlockedCount( &m_refCount ); - } - - //-------------------------------------------------------------------- - oslInterlockedCount SAL_CALL AccessibleDummyFactory::release() - { - if ( 0 == osl_decrementInterlockedCount( &m_refCount ) ) - { - delete this; - return 0; - } - return m_refCount; - } - - //==================================================================== - //= AccessibilityClient - //==================================================================== - //-------------------------------------------------------------------- - AccessibilityClient::AccessibilityClient() - :m_bInitialized( false ) - { - } - - //-------------------------------------------------------------------- - extern "C" { static void SAL_CALL thisModule() {} } - - void AccessibilityClient::ensureInitialized() - { - if ( m_bInitialized ) - return; - - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - -#ifdef UNLOAD_ON_LAST_CLIENT_DYING - if ( 1 == osl_incrementInterlockedCount( &s_nAccessibilityClients ) ) - { // the first client -#endif // UNLOAD_ON_LAST_CLIENT_DYING - // load the library implementing the factory - if ( !s_pFactory.get() ) - { - const ::rtl::OUString sModuleName(RTL_CONSTASCII_USTRINGPARAM( - SVLIBRARY( "acc" )) - ); - s_hAccessibleImplementationModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, 0 ); - if ( s_hAccessibleImplementationModule != NULL ) - { - const ::rtl::OUString sFactoryCreationFunc = - ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("getStandardAccessibleFactory")); - s_pAccessibleFactoryFunc = (GetStandardAccComponentFactory) - osl_getFunctionSymbol( s_hAccessibleImplementationModule, sFactoryCreationFunc.pData ); - - } - OSL_ENSURE( s_pAccessibleFactoryFunc, "AccessibilityClient::ensureInitialized: could not load the library, or not retrieve the needed symbol!" ); - - // get a factory instance - if ( s_pAccessibleFactoryFunc ) - { - IAccessibleFactory* pFactory = static_cast< IAccessibleFactory* >( (*s_pAccessibleFactoryFunc)() ); - OSL_ENSURE( pFactory, "AccessibilityClient::ensureInitialized: no factory provided by the A11Y lib!" ); - if ( pFactory ) - { - s_pFactory = pFactory; - pFactory->release(); - } - } - } - - if ( !s_pFactory.get() ) - // the attempt to load the lib, or to create the factory, failed - // -> fall back to a dummy factory - s_pFactory = new AccessibleDummyFactory; -#ifdef UNLOAD_ON_LAST_CLIENT_DYING - } -#endif - - m_bInitialized = true; - } - - //-------------------------------------------------------------------- - AccessibilityClient::~AccessibilityClient() - { - if ( m_bInitialized ) - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - -#ifdef UNLOAD_ON_LAST_CLIENT_DYING - if( 0 == osl_decrementInterlockedCount( &s_nAccessibilityClients ) ) - { - s_pFactory = NULL; - s_pAccessibleFactoryFunc = NULL; - if ( s_hAccessibleImplementationModule ) - { - osl_unloadModule( s_hAccessibleImplementationModule ); - s_hAccessibleImplementationModule = NULL; - } - } -#endif // UNLOAD_ON_LAST_CLIENT_DYING - } - } - - //-------------------------------------------------------------------- - IAccessibleFactory& AccessibilityClient::getFactory() - { - ensureInitialized(); - OSL_ENSURE( s_pFactory.is(), "AccessibilityClient::getFactory: at least a dummy factory should have been created!" ); - return *s_pFactory; - } - -//........................................................................ -} // namespace toolkit -//........................................................................ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |