summaryrefslogtreecommitdiff
path: root/dbaccess/source/core/recovery
diff options
context:
space:
mode:
authorFrank Schoenheit [fs] <frank.schoenheit@sun.com>2010-02-16 15:43:53 +0100
committerFrank Schoenheit [fs] <frank.schoenheit@sun.com>2010-02-16 15:43:53 +0100
commitc6b2dff376fa217003808e6b001cd9c3eb113f5f (patch)
treec23a566011b5f9d4564c697a713e30b8acfe153a /dbaccess/source/core/recovery
parent110b7db42fa69b3d3ec29c629f2f91b6107fa61c (diff)
autorecovery: recover non-document sub compontns hidden, too
Diffstat (limited to 'dbaccess/source/core/recovery')
-rw-r--r--dbaccess/source/core/recovery/subcomponentloader.cxx45
-rw-r--r--dbaccess/source/core/recovery/subcomponentloader.hxx5
-rw-r--r--dbaccess/source/core/recovery/subcomponentrecovery.cxx8
3 files changed, 50 insertions, 8 deletions
diff --git a/dbaccess/source/core/recovery/subcomponentloader.cxx b/dbaccess/source/core/recovery/subcomponentloader.cxx
index 53d27bb93d47..5fd120a5009b 100644
--- a/dbaccess/source/core/recovery/subcomponentloader.cxx
+++ b/dbaccess/source/core/recovery/subcomponentloader.cxx
@@ -59,6 +59,7 @@ namespace dbaccess
using ::com::sun::star::ucb::Command;
using ::com::sun::star::ucb::XCommandProcessor;
using ::com::sun::star::frame::XController2;
+ using ::com::sun::star::lang::XComponent;
/** === end UNO using === **/
//====================================================================
@@ -67,10 +68,18 @@ namespace dbaccess
struct DBACCESS_DLLPRIVATE SubComponentLoader_Data
{
const Reference< XCommandProcessor > xDocDefCommands;
+ const Reference< XComponent > xNonDocComponent;
Reference< XWindow > xAppComponentWindow;
SubComponentLoader_Data( const Reference< XCommandProcessor >& i_rDocumentDefinition )
:xDocDefCommands( i_rDocumentDefinition, UNO_SET_THROW )
+ ,xNonDocComponent()
+ {
+ }
+
+ SubComponentLoader_Data( const Reference< XComponent >& i_rNonDocumentComponent )
+ :xDocDefCommands()
+ ,xNonDocComponent( i_rNonDocumentComponent, UNO_SET_THROW )
{
}
};
@@ -85,11 +94,21 @@ namespace dbaccess
{
try
{
- Command aCommandOpen;
- aCommandOpen.Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "show" ) );
-
- const sal_Int32 nCommandIdentifier = i_rData.xDocDefCommands->createCommandIdentifier();
- i_rData.xDocDefCommands->execute( aCommandOpen, nCommandIdentifier, NULL );
+ if ( i_rData.xDocDefCommands.is() )
+ {
+ Command aCommandOpen;
+ aCommandOpen.Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "show" ) );
+
+ const sal_Int32 nCommandIdentifier = i_rData.xDocDefCommands->createCommandIdentifier();
+ i_rData.xDocDefCommands->execute( aCommandOpen, nCommandIdentifier, NULL );
+ }
+ else
+ {
+ const Reference< XController > xController( i_rData.xNonDocComponent, UNO_QUERY_THROW );
+ const Reference< XFrame > xFrame( xController->getFrame(), UNO_SET_THROW );
+ const Reference< XWindow > xWindow( xFrame->getContainerWindow(), UNO_SET_THROW );
+ xWindow->setVisible( sal_True );
+ }
}
catch( const Exception& )
{
@@ -118,6 +137,22 @@ namespace dbaccess
}
//--------------------------------------------------------------------
+ SubComponentLoader::SubComponentLoader( const Reference< XController >& i_rApplicationController,
+ const Reference< XComponent >& i_rNonDocumentComponent )
+ :m_pData( new SubComponentLoader_Data( i_rNonDocumentComponent ) )
+ {
+ // add as window listener to the controller's container window, so we get notified when it is shown
+ Reference< XController2 > xController( i_rApplicationController, UNO_QUERY_THROW );
+ m_pData->xAppComponentWindow.set( xController->getComponentWindow(), UNO_SET_THROW );
+
+ osl_incrementInterlockedCount( &m_refCount );
+ {
+ m_pData->xAppComponentWindow->addWindowListener( this );
+ }
+ osl_decrementInterlockedCount( &m_refCount );
+ }
+
+ //--------------------------------------------------------------------
SubComponentLoader::~SubComponentLoader()
{
delete m_pData, m_pData = NULL;
diff --git a/dbaccess/source/core/recovery/subcomponentloader.hxx b/dbaccess/source/core/recovery/subcomponentloader.hxx
index 7efaea016724..f3bec5b6b39e 100644
--- a/dbaccess/source/core/recovery/subcomponentloader.hxx
+++ b/dbaccess/source/core/recovery/subcomponentloader.hxx
@@ -59,6 +59,11 @@ namespace dbaccess
const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandProcessor >& i_rSubDocumentDefinition
);
+ SubComponentLoader(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController >& i_rApplicationController,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& i_rNonDocumentComponent
+ );
+
// XWindowListener
virtual void SAL_CALL windowResized( const ::com::sun::star::awt::WindowEvent& e ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL windowMoved( const ::com::sun::star::awt::WindowEvent& e ) throw (::com::sun::star::uno::RuntimeException);
diff --git a/dbaccess/source/core/recovery/subcomponentrecovery.cxx b/dbaccess/source/core/recovery/subcomponentrecovery.cxx
index bcfc3131892f..0ae69402faeb 100644
--- a/dbaccess/source/core/recovery/subcomponentrecovery.cxx
+++ b/dbaccess/source/core/recovery/subcomponentrecovery.cxx
@@ -397,7 +397,6 @@ namespace dbaccess
//--------------------------------------------------------------------
void SAL_CALL SettingsDocumentHandler::setDocumentLocator( const Reference< XLocator >& i_Locator ) throw (SAXException, RuntimeException)
{
- // TODO: place your code here
(void)i_Locator;
}
@@ -645,8 +644,7 @@ namespace dbaccess
// then load the query designer
::comphelper::NamedValueCollection aLoadArgs;
aLoadArgs.put( "CurrentQueryDesign", aCurrentQueryDesign );
-
- // TODO: load the thing hidden, and show when the main doc window is shown
+ aLoadArgs.put( "Hidden", true );
if ( i_rComponentName.getLength() )
{
@@ -671,6 +669,10 @@ namespace dbaccess
);
}
+ Reference< XController > xController( m_xDocumentUI, UNO_QUERY_THROW );
+ Reference< XInterface > xLoader( *new SubComponentLoader( xController, xSubComponent ) );
+ (void)xLoader;
+
return xSubComponent;
}