summaryrefslogtreecommitdiff
path: root/filter/source/config/cache/typedetection.hxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-11-23 14:05:26 +0000
committerCaolán McNamara <caolanm@redhat.com>2017-11-24 09:55:17 +0100
commit6f31670783b3445a8073bd49fe4c041b655e91b3 (patch)
tree3cbfc77e7f9e8191c6eaded7f92633f9808ba414 /filter/source/config/cache/typedetection.hxx
parent99534540df148513fc0bb9622b7285e10b285ccb (diff)
set new document window as parent for dialogs during load
and exit typedetection early and completely if application quits while detecting During typedetection, before loading proper, we have the hidden window as parent so warnings are not modal to existing windows and they are cancelled on exit. Once we do have a window, then reinit interaction handler to have that window as the parent for any further dialogs. Change-Id: I5c6711557266bf7d1eb9291f1c454cbfaf766886 Reviewed-on: https://gerrit.libreoffice.org/45148 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'filter/source/config/cache/typedetection.hxx')
-rw-r--r--filter/source/config/cache/typedetection.hxx41
1 files changed, 40 insertions, 1 deletions
diff --git a/filter/source/config/cache/typedetection.hxx b/filter/source/config/cache/typedetection.hxx
index 18185134af5a..830badc54f63 100644
--- a/filter/source/config/cache/typedetection.hxx
+++ b/filter/source/config/cache/typedetection.hxx
@@ -21,14 +21,16 @@
#include "basecontainer.hxx"
#include <com/sun/star/document/XTypeDetection.hpp>
+#include <com/sun/star/frame/XTerminateListener.hpp>
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <unotools/mediadescriptor.hxx>
+#include <cppuhelper/compbase.hxx>
#include <cppuhelper/implbase.hxx>
-
namespace filter{ namespace config {
+class TerminateDetection;
/** @short implements the service <type scope="com.sun.star.document">TypeDetection</type>.
*/
@@ -39,6 +41,8 @@ class TypeDetection : public ::cppu::ImplInheritanceHelper< BaseContainer
// native interface
css::uno::Reference< css::uno::XComponentContext > m_xContext;
+ rtl::Reference<TerminateDetection> m_xTerminateListener;
+ bool m_bCancel;
public:
@@ -53,6 +57,11 @@ public:
*/
explicit TypeDetection(const css::uno::Reference< css::uno::XComponentContext >& rxContext);
+ void cancel()
+ {
+ m_bCancel = true;
+ }
+
/** @short standard dtor.
*/
@@ -362,6 +371,36 @@ public:
static css::uno::Reference< css::uno::XInterface > impl_createInstance(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR);
};
+class TerminateDetection : public cppu::WeakComponentImplHelper<css::frame::XTerminateListener>
+{
+private:
+ osl::Mutex m_aLock;
+ TypeDetection* m_pTypeDetection;
+
+public:
+
+ using cppu::WeakComponentImplHelperBase::disposing;
+ virtual void SAL_CALL disposing(const css::lang::EventObject&) override
+ {
+ }
+
+ // XTerminateListener
+ virtual void SAL_CALL queryTermination(const css::lang::EventObject&) override
+ {
+ m_pTypeDetection->cancel();
+ }
+
+ virtual void SAL_CALL notifyTermination(const css::lang::EventObject&) override
+ {
+ }
+
+ TerminateDetection(TypeDetection* pTypeDetection)
+ : cppu::WeakComponentImplHelper<css::frame::XTerminateListener>(m_aLock)
+ , m_pTypeDetection(pTypeDetection)
+ {
+ }
+};
+
}}
#endif // INCLUDED_FILTER_SOURCE_CONFIG_CACHE_TYPEDETECTION_HXX