ODBFilter::filter: Also leave window wait on exception
Change-Id: I6bb759c583e15f229bc2afa178a1d1d90d8315ef
Reviewed-on: https://gerrit.libreoffice.org/44458
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
diff --git a/dbaccess/source/filter/xml/xmlfilter.cxx b/dbaccess/source/filter/xml/xmlfilter.cxx
index 8069a57..f386206 100644
--- a/dbaccess/source/filter/xml/xmlfilter.cxx
+++ b/dbaccess/source/filter/xml/xmlfilter.cxx
@@ -244,30 +244,38 @@ css::uno::Reference< css::uno::XInterface >
return static_cast< XServiceInfo* >(new ODBFilter( comphelper::getComponentContext(_rxORB)));
}
namespace {
class FocusWindowWaitGuard
{
public:
FocusWindowWaitGuard()
{
SolarMutexGuard aGuard;
mpWindow.set(Application::GetFocusWindow());
if (mpWindow)
mpWindow->EnterWait();
}
~FocusWindowWaitGuard()
{
if (mpWindow)
{
SolarMutexGuard aGuard;
mpWindow->LeaveWait();
}
}
private:
VclPtr<vcl::Window> mpWindow;
};
}
sal_Bool SAL_CALL ODBFilter::filter( const Sequence< PropertyValue >& rDescriptor )
{
uno::Reference< css::awt::XWindow > xWindow;
{
SolarMutexGuard aGuard;
vcl::Window* pFocusWindow = Application::GetFocusWindow();
xWindow = VCLUnoHelper::GetInterface( pFocusWindow );
if( pFocusWindow )
pFocusWindow->EnterWait();
}
FocusWindowWaitGuard aWindowFocusGuard;
bool bRet = false;
if ( GetModel().is() )
bRet = implImport( rDescriptor );
if ( xWindow.is() )
{
SolarMutexGuard aGuard;
VclPtr<vcl::Window> pFocusWindow = VCLUnoHelper::GetWindow( xWindow );
if ( pFocusWindow )
pFocusWindow->LeaveWait();
}
return bRet;
}