summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2014-08-15 23:57:39 +0200
committerMichael Stahl <mstahl@redhat.com>2014-08-20 16:40:09 +0200
commit851af7040e05e956a5c8f145679c8141a07fecb4 (patch)
tree4c2d3531ae4265de948ce6be50320edc4795f314 /sw
parent3777d302fa52b8921c990dead3a311bcfb3b54cb (diff)
i#105557: even more thread-safe caching of SwXFrame instances
Change-Id: If5cc29e75a35326a933fed70e2f39d92c9e09cde
Diffstat (limited to 'sw')
-rw-r--r--sw/source/core/unocore/unoobj2.cxx4
-rw-r--r--sw/source/uibase/uno/unotxvw.cxx46
2 files changed, 23 insertions, 27 deletions
diff --git a/sw/source/core/unocore/unoobj2.cxx b/sw/source/core/unocore/unoobj2.cxx
index 801275784b94..b5a37c5ae29a 100644
--- a/sw/source/core/unocore/unoobj2.cxx
+++ b/sw/source/core/unocore/unoobj2.cxx
@@ -1190,8 +1190,8 @@ CreateParentXText(SwDoc & rDoc, const SwPosition& rPos)
SwFrmFmt *const pFmt = pSttNode->GetFlyFmt();
if (0 != pFmt)
{
- SwXTextFrame* pFrame = SwIterator<SwXTextFrame,SwFmt>::FirstElement( *pFmt );
- xParentText = pFrame ? pFrame : new SwXTextFrame( *pFmt );
+ xParentText.set(SwXTextFrame::CreateXTextFrame(rDoc, pFmt),
+ uno::UNO_QUERY);
}
}
break;
diff --git a/sw/source/uibase/uno/unotxvw.cxx b/sw/source/uibase/uno/unotxvw.cxx
index 1f15014dfc9b..e04d4f7eda9c 100644
--- a/sw/source/uibase/uno/unotxvw.cxx
+++ b/sw/source/uibase/uno/unotxvw.cxx
@@ -357,36 +357,32 @@ uno::Any SwXTextView::getSelection()
}
break;
case SHELL_MODE_FRAME :
+ {
+ SwFrmFmt *const pFmt = rSh.GetFlyFrmFmt();
+ if (pFmt)
+ {
+ aRef = SwXTextFrame::CreateXTextFrame(
+ *pFmt->GetDoc(), pFmt);
+ }
+ }
+ break;
case SHELL_MODE_GRAPHIC :
+ {
+ SwFrmFmt *const pFmt = rSh.GetFlyFrmFmt();
+ if (pFmt)
+ {
+ aRef = SwXTextGraphicObject::CreateXTextGraphicObject(
+ *pFmt->GetDoc(), pFmt);
+ }
+ }
+ break;
case SHELL_MODE_OBJECT :
{
- //Get FlyFrameFormat; for UI-Macro connection to flys
- const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt();
+ SwFrmFmt *const pFmt = rSh.GetFlyFrmFmt();
if (pFmt)
{
- SwXFrame* pxFrame = SwIterator<SwXFrame,SwFmt>::FirstElement(*pFmt);
- if(pxFrame) //The only common interface for all frames.
- {
- aRef = uno::Reference< uno::XInterface >((cppu::OWeakObject*)pxFrame, uno::UNO_QUERY);
- }
- else
- {
- if(SHELL_MODE_FRAME == eSelMode)
- {
- uno::Reference< text::XTextFrame > xFrm = new SwXTextFrame((SwFrmFmt&)*pFmt);
- aRef = uno::Reference< uno::XInterface >(xFrm, uno::UNO_QUERY);
- }
- else if(SHELL_MODE_GRAPHIC == eSelMode)
- {
- uno::Reference< text::XTextContent > xFrm = new SwXTextGraphicObject((SwFrmFmt&)*pFmt);
- aRef = xFrm;
- }
- else
- {
- uno::Reference< text::XTextContent > xFrm = new SwXTextEmbeddedObject((SwFrmFmt&)*pFmt);
- aRef = xFrm;
- }
- }
+ aRef = SwXTextEmbeddedObject::CreateXTextEmbeddedObject(
+ *pFmt->GetDoc(), pFmt);
}
}
break;