diff options
Diffstat (limited to 'embedserv')
-rw-r--r-- | embedserv/source/embed/docholder.cxx | 8 | ||||
-rwxr-xr-x | embedserv/source/embed/ed_ipersiststr.cxx | 13 | ||||
-rw-r--r-- | embedserv/source/inc/docholder.hxx | 3 |
3 files changed, 20 insertions, 4 deletions
diff --git a/embedserv/source/embed/docholder.cxx b/embedserv/source/embed/docholder.cxx index 6b856be92e34..1f7fe0a0500e 100644 --- a/embedserv/source/embed/docholder.cxx +++ b/embedserv/source/embed/docholder.cxx @@ -676,7 +676,7 @@ void DocumentHolder::FreeOffice() } } -void DocumentHolder::DisconnectFrameDocument() +void DocumentHolder::DisconnectFrameDocument( sal_Bool bComplete ) { try { @@ -704,6 +704,12 @@ void DocumentHolder::DisconnectFrameDocument() catch( uno::Exception& ) {} + if ( bComplete ) + { + m_xFrame = uno::Reference< frame::XFrame>(); + m_pIDispatch = NULL; + m_xDocument = uno::Reference< frame::XModel >(); + } } void DocumentHolder::CloseDocument() diff --git a/embedserv/source/embed/ed_ipersiststr.cxx b/embedserv/source/embed/ed_ipersiststr.cxx index 4c2fa098cbbc..d0df506cf902 100755 --- a/embedserv/source/embed/ed_ipersiststr.cxx +++ b/embedserv/source/embed/ed_ipersiststr.cxx @@ -193,8 +193,17 @@ EmbedDocument_Impl::EmbedDocument_Impl( const uno::Reference< lang::XMultiServic EmbedDocument_Impl::~EmbedDocument_Impl() { m_pDocHolder->FreeOffice(); - m_pDocHolder->CloseDocument(); - m_pDocHolder->CloseFrame(); + + if ( m_pDocHolder->HasFrame() && m_pDocHolder->IsLink() ) + { + // a link with frame should be only disconnected, not closed + m_pDocHolder->DisconnectFrameDocument( sal_True ); + } + else + { + m_pDocHolder->CloseDocument(); + m_pDocHolder->CloseFrame(); + } m_pDocHolder->release(); } diff --git a/embedserv/source/inc/docholder.hxx b/embedserv/source/inc/docholder.hxx index e2c627ecc844..83aad107502a 100644 --- a/embedserv/source/inc/docholder.hxx +++ b/embedserv/source/inc/docholder.hxx @@ -168,7 +168,7 @@ public: sal_Bool ExecuteSuspendCloseFrame(); - void DisconnectFrameDocument(); + void DisconnectFrameDocument( sal_Bool bComplete = sal_False ); void CloseDocument(); void CloseFrame(); void ClearInterceptor(); @@ -185,6 +185,7 @@ public: void show(); sal_Bool HasFrame() { return m_xFrame.is(); } + sal_Bool IsLink() { return m_bLink; } /** hides the document window, even in case of an external container * side managed window. |