diff options
author | Michael Stahl <mstahl@redhat.com> | 2014-08-15 23:57:39 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2014-08-20 16:40:09 +0200 |
commit | 851af7040e05e956a5c8f145679c8141a07fecb4 (patch) | |
tree | 4c2d3531ae4265de948ce6be50320edc4795f314 /sw | |
parent | 3777d302fa52b8921c990dead3a311bcfb3b54cb (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.cxx | 4 | ||||
-rw-r--r-- | sw/source/uibase/uno/unotxvw.cxx | 46 |
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; |