summaryrefslogtreecommitdiff
path: root/svx/source/unodraw/unopage.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/unodraw/unopage.cxx')
-rw-r--r--svx/source/unodraw/unopage.cxx36
1 files changed, 36 insertions, 0 deletions
diff --git a/svx/source/unodraw/unopage.cxx b/svx/source/unodraw/unopage.cxx
index 960212ef6cdc..64badf2e1c0f 100644
--- a/svx/source/unodraw/unopage.cxx
+++ b/svx/source/unodraw/unopage.cxx
@@ -909,6 +909,42 @@ SdrPage* GetSdrPageFromXDrawPage( const uno::Reference< drawing::XDrawPage >& xD
return nullptr;
}
+// helper that returns true if the given XShape is member of the given
+// XDrawPage or it's MasterPage (aka associated)
+bool IsXShapeAssociatedWithXDrawPage(
+ const css::uno::Reference<css::drawing::XShape>& rxShape,
+ const css::uno::Reference< css::drawing::XDrawPage >& rxDrawPage) noexcept
+{
+ if (!rxShape)
+ return false;
+
+ if (!rxDrawPage)
+ return false;
+
+ const SdrObject* pSdrObject(SdrObject::getSdrObjectFromXShape(rxShape));
+ if (nullptr == pSdrObject)
+ return false;
+
+ SdrPage* pSdrPage(GetSdrPageFromXDrawPage(rxDrawPage));
+ if (nullptr == pSdrPage)
+ return false;
+
+ const SdrPage* pPageFromObj(pSdrObject->getSdrPageFromSdrObject());
+ if (nullptr == pPageFromObj)
+ return false;
+
+ if (pSdrPage == pPageFromObj)
+ // given XShape is member of given XDrawPage
+ return true;
+
+ if (pSdrPage->TRG_HasMasterPage())
+ if (&pSdrPage->TRG_GetMasterPage() == pPageFromObj)
+ // given XShape is member of MasterPage of given XDrawPage
+ return true;
+
+ return false;
+}
+
// XFormsSupplier
css::uno::Reference< css::container::XNameContainer > SAL_CALL SvxDrawPage::getForms()
{