summaryrefslogtreecommitdiff
path: root/vcl/source
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2014-06-04 08:45:54 +0200
committerStephan Bergmann <sbergman@redhat.com>2014-06-04 08:55:12 +0200
commit369d95931f42267eb2f55e066f58ee859183025d (patch)
treef6047cebccb31dea56653bb1adfa08f853d09918 /vcl/source
parent9e13afeaf67b9c07762692cd858de4b577234ab7 (diff)
DeInitVCL at end of tests
This required some changes to the framework: * Init-/DeInitVCL is no longer done per individual test in BootstrapFixture, but once per CppunitTest invocation in a new vclbootstrapprotector (similarly to the exisiting unobootstrapprotector). CppunitTests that need VCL now need to declare gb_CppunitTest_use_vcl. * For things to work properly, the UNO component context needs to be disposed from within DeInitVCL (cf. Desktop's Application::DeInit called from DeInitVCL). The easiest solution was to introduce an Application::setDeInitHook (where the hook is called from DeInitVCL) specifically for vclbootstrapprotector to call. * PythonTests don't (yet) call DeInitVCL; they still hook into BootstrapFixture's original test_init functionality (to call InitVCL), and do not make use of the vclbootstrapprotector. Change-Id: I4f3a3c75db30b58c1cd49d81c51db14902ed68b2
Diffstat (limited to 'vcl/source')
-rw-r--r--vcl/source/app/svapp.cxx10
-rw-r--r--vcl/source/app/svmain.cxx15
2 files changed, 23 insertions, 2 deletions
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index b27b9c31174e..50cda48010c6 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -68,6 +68,7 @@
#include "comphelper/solarmutex.hxx"
#include "osl/process.h"
+#include <cassert>
#include <utility>
using namespace ::com::sun::star;
@@ -1654,6 +1655,15 @@ Application::createFolderPicker( const Reference< uno::XComponentContext >& xSM
return pSVData->mpDefInst->createFolderPicker( xSM );
}
+void Application::setDeInitHook(Link const & hook) {
+ ImplSVData * pSVData = ImplGetSVData();
+ assert(!pSVData->maDeInitHook.IsSet());
+ pSVData->maDeInitHook = hook;
+ // Fake this for VCLXToolkit ctor instantiated from
+ // postprocess/CppunitTest_services.mk:
+ pSVData->maAppData.mbInAppMain = true;
+}
+
// helper method to allow inline constructor even for pWindow!=NULL case
void ImplDelData::AttachToWindow( const Window* pWindow )
{
diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx
index 25c8f995a0db..0acb009292a5 100644
--- a/vcl/source/app/svmain.cxx
+++ b/vcl/source/app/svmain.cxx
@@ -17,6 +17,10 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <sal/config.h>
+
+#include <cassert>
+
#include "rtl/logfile.hxx"
#include <osl/file.hxx>
@@ -464,13 +468,20 @@ void DeInitVCL()
}
}
- if( pSVData->mpApp )
+ if( pSVData->mpApp || pSVData->maDeInitHook.IsSet() )
{
sal_uLong nCount = Application::ReleaseSolarMutex();
// call deinit to deinitialize application class
// soffice/sfx implementation disposes the global service manager
// Warning: After this call you can't call uno services
- pSVData->mpApp->DeInit();
+ if( pSVData->mpApp )
+ {
+ pSVData->mpApp->DeInit();
+ }
+ if( pSVData->maDeInitHook.IsSet() )
+ {
+ pSVData->maDeInitHook.Call(0);
+ }
Application::AcquireSolarMutex(nCount);
}