summaryrefslogtreecommitdiff
path: root/embedserv/source
diff options
context:
space:
mode:
Diffstat (limited to 'embedserv/source')
-rw-r--r--embedserv/source/embed/docholder.cxx8
-rwxr-xr-xembedserv/source/embed/ed_ipersiststr.cxx13
-rw-r--r--embedserv/source/inc/docholder.hxx3
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.