ofz#887 support avoiding reading config

Change-Id: Ic7e0e65b15c7b6a01a10d6004230ad71a2d439d2
This commit is contained in:
Caolán McNamara
2017-03-17 21:25:56 +00:00
parent b165f0f9cc
commit 376ae93f48
2 changed files with 64 additions and 59 deletions

View File

@@ -29,6 +29,7 @@ $(eval $(call gb_Library_use_libraries,canvasfactory,\
cppu \ cppu \
cppuhelper \ cppuhelper \
sal \ sal \
utl \
vcl \ vcl \
$(gb_UWINAPI) \ $(gb_UWINAPI) \
)) ))

View File

@@ -43,6 +43,7 @@
#if HAVE_FEATURE_OPENGL #if HAVE_FEATURE_OPENGL
#include <vcl/opengl/OpenGLWrapper.hxx> #include <vcl/opengl/OpenGLWrapper.hxx>
#endif #endif
#include <unotools/configmgr.hxx>
using namespace ::com::sun::star; using namespace ::com::sun::star;
using namespace ::com::sun::star::uno; using namespace ::com::sun::star::uno;
@@ -123,76 +124,79 @@ CanvasFactory::CanvasFactory( Reference<XComponentContext> const & xContext ) :
m_bCacheHasUseAcceleratedEntry(), m_bCacheHasUseAcceleratedEntry(),
m_bCacheHasUseAAEntry() m_bCacheHasUseAAEntry()
{ {
try if (!utl::ConfigManager::IsAvoidConfig())
{ {
// read out configuration for preferred services: try
Reference<lang::XMultiServiceFactory> xConfigProvider(
configuration::theDefaultProvider::get( m_xContext ) );
Any propValue(
Any( beans::PropertyValue(
"nodepath", -1,
Any( OUString("/org.openoffice.Office.Canvas") ),
beans::PropertyState_DIRECT_VALUE ) ) );
m_xCanvasConfigNameAccess.set(
xConfigProvider->createInstanceWithArguments(
"com.sun.star.configuration.ConfigurationAccess",
Sequence<Any>( &propValue, 1 ) ),
UNO_QUERY_THROW );
propValue <<=
beans::PropertyValue(
"nodepath", -1,
Any( OUString("/org.openoffice.Office.Canvas/CanvasServiceList") ),
beans::PropertyState_DIRECT_VALUE );
Reference<container::XNameAccess> xNameAccess(
xConfigProvider->createInstanceWithArguments(
"com.sun.star.configuration.ConfigurationAccess",
Sequence<Any>( &propValue, 1 ) ), UNO_QUERY_THROW );
Reference<container::XHierarchicalNameAccess> xHierarchicalNameAccess(
xNameAccess, UNO_QUERY_THROW);
Sequence<OUString> serviceNames = xNameAccess->getElementNames();
const OUString* pCurr = serviceNames.getConstArray();
const OUString* const pEnd = pCurr + serviceNames.getLength();
while( pCurr != pEnd )
{ {
Reference<container::XNameAccess> xEntryNameAccess( // read out configuration for preferred services:
xHierarchicalNameAccess->getByHierarchicalName(*pCurr), Reference<lang::XMultiServiceFactory> xConfigProvider(
UNO_QUERY ); configuration::theDefaultProvider::get( m_xContext ) );
if( xEntryNameAccess.is() ) Any propValue(
Any( beans::PropertyValue(
"nodepath", -1,
Any( OUString("/org.openoffice.Office.Canvas") ),
beans::PropertyState_DIRECT_VALUE ) ) );
m_xCanvasConfigNameAccess.set(
xConfigProvider->createInstanceWithArguments(
"com.sun.star.configuration.ConfigurationAccess",
Sequence<Any>( &propValue, 1 ) ),
UNO_QUERY_THROW );
propValue <<=
beans::PropertyValue(
"nodepath", -1,
Any( OUString("/org.openoffice.Office.Canvas/CanvasServiceList") ),
beans::PropertyState_DIRECT_VALUE );
Reference<container::XNameAccess> xNameAccess(
xConfigProvider->createInstanceWithArguments(
"com.sun.star.configuration.ConfigurationAccess",
Sequence<Any>( &propValue, 1 ) ), UNO_QUERY_THROW );
Reference<container::XHierarchicalNameAccess> xHierarchicalNameAccess(
xNameAccess, UNO_QUERY_THROW);
Sequence<OUString> serviceNames = xNameAccess->getElementNames();
const OUString* pCurr = serviceNames.getConstArray();
const OUString* const pEnd = pCurr + serviceNames.getLength();
while( pCurr != pEnd )
{ {
Sequence<OUString> implementationList; Reference<container::XNameAccess> xEntryNameAccess(
if( (xEntryNameAccess->getByName("PreferredImplementations") >>= implementationList) ) xHierarchicalNameAccess->getByHierarchicalName(*pCurr),
UNO_QUERY );
if( xEntryNameAccess.is() )
{ {
m_aAvailableImplementations.push_back( std::make_pair(*pCurr,implementationList) ); Sequence<OUString> implementationList;
} if( (xEntryNameAccess->getByName("PreferredImplementations") >>= implementationList) )
if( (xEntryNameAccess->getByName("AcceleratedImplementations") >>= implementationList) ) {
{ m_aAvailableImplementations.push_back( std::make_pair(*pCurr,implementationList) );
m_aAcceleratedImplementations.push_back( std::make_pair(*pCurr,implementationList) ); }
} if( (xEntryNameAccess->getByName("AcceleratedImplementations") >>= implementationList) )
if( (xEntryNameAccess->getByName("AntialiasingImplementations") >>= implementationList) ) {
{ m_aAcceleratedImplementations.push_back( std::make_pair(*pCurr,implementationList) );
m_aAAImplementations.push_back( std::make_pair(*pCurr,implementationList) ); }
if( (xEntryNameAccess->getByName("AntialiasingImplementations") >>= implementationList) )
{
m_aAAImplementations.push_back( std::make_pair(*pCurr,implementationList) );
}
} }
++pCurr;
} }
}
++pCurr; catch (const RuntimeException &)
{
throw;
}
catch (const Exception&)
{
} }
} }
catch (const RuntimeException &)
{
throw;
}
catch (const Exception&)
{
}
if( m_aAvailableImplementations.empty() ) if (m_aAvailableImplementations.empty())
{ {
// Ugh. Looks like configuration is borked. Fake minimal // Ugh. Looks like configuration is borked. Fake minimal
// setup. // setup.