summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2019-04-23 09:26:46 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2019-04-23 14:10:38 +0200
commit10c934147d469965dba6abc78efd02759a010b8e (patch)
tree54fe37d01913d48abf93bd087c59f95fdcfa5a46
parenta08401155a0b4b49878e8e50d39b2fd3e5278779 (diff)
tdf#113266 slow opening XLS with 45 MB drawing
Some hot-spots around dynamic_cast of SdrHint, so avoid that by creating special SfxHintId::ThisIsAnSdrHint The most common CPU hot-spot was in SvxShape::Notify, the other changes are just for consistency. Also remove some dead code in ScShapeChildren, the Notify method was doing nothing useful. Change-Id: I696db1fcafc09bb10bf23ac673de292746141491 Reviewed-on: https://gerrit.libreoffice.org/71108 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--chart2/source/view/main/ChartView.cxx4
-rw-r--r--include/svl/hint.hxx3
-rw-r--r--reportdesign/source/ui/report/SectionView.cxx21
-rw-r--r--sc/source/ui/Accessibility/AccessibleDocument.cxx66
-rw-r--r--sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx63
-rw-r--r--sc/source/ui/Accessibility/DrawModelBroadcaster.cxx4
-rw-r--r--sc/source/ui/view/drawvie3.cxx3
-rw-r--r--sc/source/ui/view/prevwsh2.cxx3
-rw-r--r--sd/source/ui/accessibility/AccessibleOutlineEditSource.cxx12
-rw-r--r--sd/source/ui/accessibility/AccessibleSlideSorterView.cxx4
-rw-r--r--sd/source/ui/animations/motionpathtag.cxx2
-rw-r--r--sd/source/ui/app/sdxfer.cxx4
-rw-r--r--sd/source/ui/dlg/SpellDialogChildWindow.cxx10
-rw-r--r--sd/source/ui/sidebar/MasterPageObserver.cxx4
-rw-r--r--sd/source/ui/slidesorter/controller/SlsListener.cxx4
-rw-r--r--sd/source/ui/tools/EventMultiplexer.cxx4
-rw-r--r--sd/source/ui/unoidl/unomodel.cxx17
-rw-r--r--sd/source/ui/unoidl/unopback.cxx18
-rw-r--r--sd/source/ui/view/drawview.cxx2
-rw-r--r--svx/source/accessibility/GraphCtlAccessibleContext.cxx5
-rw-r--r--svx/source/core/extedit.cxx9
-rw-r--r--svx/source/form/fmundo.cxx3
-rw-r--r--svx/source/form/fmvwimp.cxx6
-rw-r--r--svx/source/form/navigatortreemodel.cxx4
-rw-r--r--svx/source/svdraw/svdedxv.cxx5
-rw-r--r--svx/source/svdraw/svdmodel.cxx12
-rw-r--r--svx/source/svdraw/svdmrkv.cxx5
-rw-r--r--svx/source/svdraw/svdpage.cxx3
-rw-r--r--svx/source/svdraw/svdpntv.cxx5
-rw-r--r--svx/source/unodraw/UnoNameItemTable.cxx7
-rw-r--r--svx/source/unodraw/unomtabl.cxx10
-rw-r--r--svx/source/unodraw/unoshape.cxx17
-rw-r--r--svx/source/unodraw/unoshtxt.cxx3
-rw-r--r--sw/source/core/access/accmap.cxx9
34 files changed, 150 insertions, 201 deletions
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 872406f9f16b..8b0548f909ee 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -2610,9 +2610,9 @@ void ChartView::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
}
}
- const SdrHint* pSdrHint = dynamic_cast< const SdrHint* >(&rHint);
- if( !pSdrHint )
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
return;
+ const SdrHint* pSdrHint = static_cast< const SdrHint* >(&rHint);
bool bShapeChanged = false;
switch( pSdrHint->GetKind() )
diff --git a/include/svl/hint.hxx b/include/svl/hint.hxx
index 98d0ca81de55..708986e31631 100644
--- a/include/svl/hint.hxx
+++ b/include/svl/hint.hxx
@@ -112,6 +112,8 @@ enum class SfxHintId {
SwDrawViewsCreated,
SwSplitNodeOperation,
SwSectionFrameMoveAndDelete,
+
+ ThisIsAnSdrHint // used to avoid dynamic_cast
};
template< typename charT, typename traits >
@@ -190,6 +192,7 @@ inline std::basic_ostream<charT, traits> & operator <<(
case SfxHintId::SwDrawViewsCreated: return stream << "SwDrawViewsCreated";
case SfxHintId::SwSplitNodeOperation: return stream << "SwSplitNodeOperation";
case SfxHintId::SwSectionFrameMoveAndDelete: return stream << "SwSectionFrameMoveAndDelete";
+ case SfxHintId::ThisIsAnSdrHint: return stream << "SdrHint";
default: return stream << "unk(" << std::to_string(int(id)) << ")";
}
}
diff --git a/reportdesign/source/ui/report/SectionView.cxx b/reportdesign/source/ui/report/SectionView.cxx
index 1181581737cb..9a23632da48a 100644
--- a/reportdesign/source/ui/report/SectionView.cxx
+++ b/reportdesign/source/ui/report/SectionView.cxx
@@ -128,17 +128,16 @@ void OSectionView::MakeVisible( const tools::Rectangle& rRect, vcl::Window& rWin
void OSectionView::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
{
SdrView::Notify(rBC,rHint);
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if ( pSdrHint )
- {
- const SdrObject* pObj = pSdrHint->GetObject();
- const SdrHintKind eKind = pSdrHint->GetKind();
- // check for change of selected object
- if(SdrHintKind::ObjectChange == eKind && pObj && IsObjMarked(pObj))
- AdjustMarkHdl();
- else if ( eKind == SdrHintKind::ObjectRemoved )
- ObjectRemovedInAliveMode(pObj);
- }
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
+ return;
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
+ const SdrObject* pObj = pSdrHint->GetObject();
+ const SdrHintKind eKind = pSdrHint->GetKind();
+ // check for change of selected object
+ if(SdrHintKind::ObjectChange == eKind && pObj && IsObjMarked(pObj))
+ AdjustMarkHdl();
+ else if ( eKind == SdrHintKind::ObjectRemoved )
+ ObjectRemovedInAliveMode(pObj);
}
diff --git a/sc/source/ui/Accessibility/AccessibleDocument.cxx b/sc/source/ui/Accessibility/AccessibleDocument.cxx
index 0c7d06d86352..761ec7849092 100644
--- a/sc/source/ui/Accessibility/AccessibleDocument.cxx
+++ b/sc/source/ui/Accessibility/AccessibleDocument.cxx
@@ -396,45 +396,45 @@ void ScChildrenShapes::SetDrawBroadcaster()
void ScChildrenShapes::Notify(SfxBroadcaster&, const SfxHint& rHint)
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (pSdrHint)
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
+ return;
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
+
+ SdrObject* pObj = const_cast<SdrObject*>(pSdrHint->GetObject());
+ if (pObj && /*(pObj->GetLayer() != SC_LAYER_INTERN) && */(pObj->getSdrPageFromSdrObject() == GetDrawPage()) &&
+ (pObj->getSdrPageFromSdrObject() == pObj->getParentSdrObjListFromSdrObject()) ) //only do something if the object lies direct on the page
{
- SdrObject* pObj = const_cast<SdrObject*>(pSdrHint->GetObject());
- if (pObj && /*(pObj->GetLayer() != SC_LAYER_INTERN) && */(pObj->getSdrPageFromSdrObject() == GetDrawPage()) &&
- (pObj->getSdrPageFromSdrObject() == pObj->getParentSdrObjListFromSdrObject()) ) //only do something if the object lies direct on the page
+ switch (pSdrHint->GetKind())
{
- switch (pSdrHint->GetKind())
+ case SdrHintKind::ObjectChange : // object changed
{
- case SdrHintKind::ObjectChange : // object changed
- {
- uno::Reference<drawing::XShape> xShape (pObj->getUnoShape(), uno::UNO_QUERY);
- if (xShape.is())
- {
- std::sort(maZOrderedShapes.begin(), maZOrderedShapes.end(), ScShapeDataLess()); // sort, because the z index or layer could be changed
- CheckWhetherAnchorChanged(xShape);
- }
- }
- break;
- case SdrHintKind::ObjectInserted : // new drawing object inserted
- {
- uno::Reference<drawing::XShape> xShape (pObj->getUnoShape(), uno::UNO_QUERY);
- if (xShape.is())
- AddShape(xShape, true);
- }
- break;
- case SdrHintKind::ObjectRemoved : // Removed drawing object from list
+ uno::Reference<drawing::XShape> xShape (pObj->getUnoShape(), uno::UNO_QUERY);
+ if (xShape.is())
{
- uno::Reference<drawing::XShape> xShape (pObj->getUnoShape(), uno::UNO_QUERY);
- if (xShape.is())
- RemoveShape(xShape);
+ std::sort(maZOrderedShapes.begin(), maZOrderedShapes.end(), ScShapeDataLess()); // sort, because the z index or layer could be changed
+ CheckWhetherAnchorChanged(xShape);
}
- break;
- default :
- {
- // other events are not interesting
- }
- break;
}
+ break;
+ case SdrHintKind::ObjectInserted : // new drawing object inserted
+ {
+ uno::Reference<drawing::XShape> xShape (pObj->getUnoShape(), uno::UNO_QUERY);
+ if (xShape.is())
+ AddShape(xShape, true);
+ }
+ break;
+ case SdrHintKind::ObjectRemoved : // Removed drawing object from list
+ {
+ uno::Reference<drawing::XShape> xShape (pObj->getUnoShape(), uno::UNO_QUERY);
+ if (xShape.is())
+ RemoveShape(xShape);
+ }
+ break;
+ default :
+ {
+ // other events are not interesting
+ }
+ break;
}
}
}
diff --git a/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx b/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx
index 81b8cf79460e..8f21926bec50 100644
--- a/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx
+++ b/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx
@@ -589,16 +589,10 @@ struct ScShapeRange
typedef std::vector<ScShapeRange> ScShapeRangeVec;
-class ScShapeChildren : public SfxListener,
- public ::accessibility::IAccessibleParent
+class ScShapeChildren : public ::accessibility::IAccessibleParent
{
public:
ScShapeChildren(ScPreviewShell* pViewShell, ScAccessibleDocumentPagePreview* pAccDoc);
- virtual ~ScShapeChildren() override;
-
- ///===== SfxListener =====================================================
-
- virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
///===== IAccessibleParent ==============================================
@@ -625,7 +619,6 @@ public:
void DataChanged();
void VisAreaChanged() const;
- void SetDrawBroadcaster();
private:
ScAccessibleDocumentPagePreview* const mpAccDoc;
ScPreviewShell* mpViewShell;
@@ -648,56 +641,6 @@ ScShapeChildren::ScShapeChildren(ScPreviewShell* pViewShell, ScAccessibleDocumen
mpViewShell(pViewShell),
maShapeRanges(SC_PREVIEW_MAXRANGES)
{
- if (pViewShell)
- {
- SfxBroadcaster* pDrawBC = pViewShell->GetDocument().GetDrawBroadcaster();
- if (pDrawBC)
- StartListening(*pDrawBC);
- }
-}
-
-ScShapeChildren::~ScShapeChildren()
-{
- if (mpViewShell)
- {
- SfxBroadcaster* pDrawBC = mpViewShell->GetDocument().GetDrawBroadcaster();
- if (pDrawBC)
- EndListening(*pDrawBC);
- }
-}
-
-void ScShapeChildren::SetDrawBroadcaster()
-{
- if (mpViewShell)
- {
- SfxBroadcaster* pDrawBC = mpViewShell->GetDocument().GetDrawBroadcaster();
- if (pDrawBC)
- StartListening(*pDrawBC, DuplicateHandling::Prevent);
- }
-}
-
-void ScShapeChildren::Notify(SfxBroadcaster&, const SfxHint& rHint)
-{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>( &rHint );
- if (pSdrHint)
- {
- SdrObject* pObj = const_cast<SdrObject*>(pSdrHint->GetObject());
- if (pObj && (pObj->getSdrPageFromSdrObject() == GetDrawPage()))
- {
- switch (pSdrHint->GetKind())
- {
- case SdrHintKind::ObjectChange :
- {
- }
- break;
- default :
- {
- // other events are not interesting
- }
- break;
- }
- }
- }
}
void ScShapeChildren::FindChanged(ScShapeChildVec& rOld, ScShapeChildVec& rNew) const
@@ -1237,10 +1180,6 @@ void ScAccessibleDocumentPagePreview::Notify( SfxBroadcaster& rBC, const SfxHint
}
}
}
- else if (rHint.GetId() == SfxHintId::ScAccMakeDrawLayer)
- {
- GetShapeChildren()->SetDrawBroadcaster();
- }
else if (rHint.GetId() == SfxHintId::ScAccVisAreaChanged)
{
Size aOutputSize;
diff --git a/sc/source/ui/Accessibility/DrawModelBroadcaster.cxx b/sc/source/ui/Accessibility/DrawModelBroadcaster.cxx
index 61bf52b466f5..52d8c5f1e1b5 100644
--- a/sc/source/ui/Accessibility/DrawModelBroadcaster.cxx
+++ b/sc/source/ui/Accessibility/DrawModelBroadcaster.cxx
@@ -52,9 +52,9 @@ void SAL_CALL ScDrawModelBroadcaster::removeEventListener( const uno::Reference<
void ScDrawModelBroadcaster::Notify( SfxBroadcaster&,
const SfxHint& rHint )
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if( !pSdrHint )
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
return;
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
document::EventObject aEvent;
if( !SvxUnoDrawMSFactory::createEvent( mpDrawModel, pSdrHint, aEvent ) )
diff --git a/sc/source/ui/view/drawvie3.cxx b/sc/source/ui/view/drawvie3.cxx
index 84622482d451..6fcf91da5542 100644
--- a/sc/source/ui/view/drawvie3.cxx
+++ b/sc/source/ui/view/drawvie3.cxx
@@ -191,8 +191,9 @@ void ScDrawView::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
if ( nTab == static_cast<const ScTabSizeChangedHint&>(rHint).GetTab() )
UpdateWorkArea();
}
- else if ( const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>( &rHint ) )
+ else if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>( &rHint );
adjustAnchoredPosition(*pSdrHint, *pDoc, nTab);
FmFormView::Notify( rBC,rHint );
}
diff --git a/sc/source/ui/view/prevwsh2.cxx b/sc/source/ui/view/prevwsh2.cxx
index 92c92bd350a8..b1066328816f 100644
--- a/sc/source/ui/view/prevwsh2.cxx
+++ b/sc/source/ui/view/prevwsh2.cxx
@@ -39,8 +39,9 @@ void ScPreviewShell::Notify( SfxBroadcaster&, const SfxHint& rHint )
bDataChanged = true;
}
}
- else if (const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint))
+ else if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
// SdrHints are no longer used for invalidating, thus react on objectchange instead
if(SdrHintKind::ObjectChange == pSdrHint->GetKind())
bDataChanged = true;
diff --git a/sd/source/ui/accessibility/AccessibleOutlineEditSource.cxx b/sd/source/ui/accessibility/AccessibleOutlineEditSource.cxx
index 030c547dde14..27ac7a54376c 100644
--- a/sd/source/ui/accessibility/AccessibleOutlineEditSource.cxx
+++ b/sd/source/ui/accessibility/AccessibleOutlineEditSource.cxx
@@ -163,12 +163,14 @@ namespace accessibility
}
else
{
- const SdrHint* pSdrHint = dynamic_cast< const SdrHint* >( &rHint );
-
- if( pSdrHint && ( pSdrHint->GetKind() == SdrHintKind::ModelCleared ) )
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
- // model is dying under us, going defunc
- bDispose = true;
+ const SdrHint* pSdrHint = static_cast< const SdrHint* >( &rHint );
+ if( pSdrHint->GetKind() == SdrHintKind::ModelCleared )
+ {
+ // model is dying under us, going defunc
+ bDispose = true;
+ }
}
}
diff --git a/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx b/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx
index 8a2ad2ee7658..7de687968089 100644
--- a/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx
+++ b/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx
@@ -809,9 +809,9 @@ void AccessibleSlideSorterView::Implementation::Notify (
SfxBroadcaster&,
const SfxHint& rHint)
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (pSdrHint)
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
switch (pSdrHint->GetKind())
{
case SdrHintKind::PageOrderChange:
diff --git a/sd/source/ui/animations/motionpathtag.cxx b/sd/source/ui/animations/motionpathtag.cxx
index 0bfcd2dea135..2c0bb805e493 100644
--- a/sd/source/ui/animations/motionpathtag.cxx
+++ b/sd/source/ui/animations/motionpathtag.cxx
@@ -387,7 +387,7 @@ void MotionPathTag::updatePathAttributes()
void MotionPathTag::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
- if( !(mpPathObj && !mbInUpdatePath && dynamic_cast< const SdrHint* >( &rHint ) && (mpEffect.get() != nullptr)) )
+ if( !(mpPathObj && !mbInUpdatePath && rHint.GetId() == SfxHintId::ThisIsAnSdrHint && (mpEffect.get() != nullptr)) )
return;
if( mxPolyPoly != mpPathObj->GetPathPoly() )
diff --git a/sd/source/ui/app/sdxfer.cxx b/sd/source/ui/app/sdxfer.cxx
index 327bfd8e731f..86c7a2b7b19b 100644
--- a/sd/source/ui/app/sdxfer.cxx
+++ b/sd/source/ui/app/sdxfer.cxx
@@ -763,9 +763,9 @@ SdTransferable* SdTransferable::getImplementation( const Reference< XInterface >
void SdTransferable::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
{
- const SdrHint* pSdrHint = dynamic_cast< const SdrHint* >( &rHint );
- if( pSdrHint )
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast< const SdrHint* >( &rHint );
if( SdrHintKind::ModelCleared == pSdrHint->GetKind() )
{
EndListening(*mpSourceDoc);
diff --git a/sd/source/ui/dlg/SpellDialogChildWindow.cxx b/sd/source/ui/dlg/SpellDialogChildWindow.cxx
index febfef0df28d..c87919346322 100644
--- a/sd/source/ui/dlg/SpellDialogChildWindow.cxx
+++ b/sd/source/ui/dlg/SpellDialogChildWindow.cxx
@@ -110,12 +110,12 @@ void SpellDialogChildWindow::EndSpellingAndClearOutliner()
void SpellDialogChildWindow::Notify(SfxBroadcaster&, const SfxHint& rHint)
{
- if (const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint))
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
+ return;
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
+ if (SdrHintKind::ModelCleared == pSdrHint->GetKind())
{
- if (SdrHintKind::ModelCleared == pSdrHint->GetKind())
- {
- EndSpellingAndClearOutliner();
- }
+ EndSpellingAndClearOutliner();
}
}
diff --git a/sd/source/ui/sidebar/MasterPageObserver.cxx b/sd/source/ui/sidebar/MasterPageObserver.cxx
index eee288d021c3..232ea0e3c73e 100644
--- a/sd/source/ui/sidebar/MasterPageObserver.cxx
+++ b/sd/source/ui/sidebar/MasterPageObserver.cxx
@@ -222,9 +222,9 @@ void MasterPageObserver::Implementation::Notify(
SfxBroadcaster& rBroadcaster,
const SfxHint& rHint)
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (!pSdrHint)
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
return;
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
switch (pSdrHint->GetKind())
{
diff --git a/sd/source/ui/slidesorter/controller/SlsListener.cxx b/sd/source/ui/slidesorter/controller/SlsListener.cxx
index 0971c8ffe60e..0a25ae07c71b 100644
--- a/sd/source/ui/slidesorter/controller/SlsListener.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsListener.cxx
@@ -267,9 +267,9 @@ void Listener::Notify (
SfxBroadcaster& rBroadcaster,
const SfxHint& rHint)
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (pSdrHint)
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
switch (pSdrHint->GetKind())
{
case SdrHintKind::ModelCleared:
diff --git a/sd/source/ui/tools/EventMultiplexer.cxx b/sd/source/ui/tools/EventMultiplexer.cxx
index 4184f3ed8dd5..8e44502e341a 100644
--- a/sd/source/ui/tools/EventMultiplexer.cxx
+++ b/sd/source/ui/tools/EventMultiplexer.cxx
@@ -588,9 +588,9 @@ void EventMultiplexer::Implementation::Notify (
SfxBroadcaster&,
const SfxHint& rHint)
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (pSdrHint)
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
switch (pSdrHint->GetKind())
{
case SdrHintKind::ModelCleared:
diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx
index 5dbde18870a3..91590534edf3 100644
--- a/sd/source/ui/unoidl/unomodel.cxx
+++ b/sd/source/ui/unoidl/unomodel.cxx
@@ -175,14 +175,12 @@ SdUnoForbiddenCharsTable::~SdUnoForbiddenCharsTable()
void SdUnoForbiddenCharsTable::Notify( SfxBroadcaster&, const SfxHint& rHint ) throw()
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>( &rHint );
-
- if( pSdrHint )
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
+ return;
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>( &rHint );
+ if( SdrHintKind::ModelCleared == pSdrHint->GetKind() )
{
- if( SdrHintKind::ModelCleared == pSdrHint->GetKind() )
- {
- mpModel = nullptr;
- }
+ mpModel = nullptr;
}
}
@@ -419,10 +417,9 @@ void SdXImpressDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
{
if( mpDoc )
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>( &rHint );
-
- if( pSdrHint )
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>( &rHint );
if( hasEventListeners() )
{
document::EventObject aEvent;
diff --git a/sd/source/ui/unoidl/unopback.cxx b/sd/source/ui/unoidl/unopback.cxx
index e60b495b2855..88c2c6fb5554 100644
--- a/sd/source/ui/unoidl/unopback.cxx
+++ b/sd/source/ui/unoidl/unopback.cxx
@@ -75,19 +75,17 @@ SdUnoPageBackground::~SdUnoPageBackground() throw()
void SdUnoPageBackground::Notify( SfxBroadcaster&, const SfxHint& rHint )
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>( &rHint );
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
+ return;
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>( &rHint );
- if( pSdrHint )
+ // delete item set if document is dying because then the pool
+ // will also die
+ if( pSdrHint->GetKind() == SdrHintKind::ModelCleared )
{
- // delete item set if document is dying because then the pool
- // will also die
- if( pSdrHint->GetKind() == SdrHintKind::ModelCleared )
- {
- mpSet.reset();
- mpDoc = nullptr;
- }
+ mpSet.reset();
+ mpDoc = nullptr;
}
-
}
void SdUnoPageBackground::fillItemSet( SdDrawDocument* pDoc, SfxItemSet& rSet ) throw()
diff --git a/sd/source/ui/view/drawview.cxx b/sd/source/ui/view/drawview.cxx
index a86f49a010e3..eb5613c1742b 100644
--- a/sd/source/ui/view/drawview.cxx
+++ b/sd/source/ui/view/drawview.cxx
@@ -376,7 +376,7 @@ bool DrawView::SetAttributes(const SfxItemSet& rSet,
void DrawView::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
{
- if ( mpDrawViewShell && dynamic_cast<const SdrHint*>(&rHint) )
+ if ( mpDrawViewShell && rHint.GetId() == SfxHintId::ThisIsAnSdrHint )
{
SdrHintKind eHintKind = static_cast<const SdrHint&>(rHint).GetKind();
diff --git a/svx/source/accessibility/GraphCtlAccessibleContext.cxx b/svx/source/accessibility/GraphCtlAccessibleContext.cxx
index 7dad181c7d87..23584422480f 100644
--- a/svx/source/accessibility/GraphCtlAccessibleContext.cxx
+++ b/svx/source/accessibility/GraphCtlAccessibleContext.cxx
@@ -694,10 +694,9 @@ tools::Rectangle SvxGraphCtrlAccessibleContext::GetBoundingBox()
void SvxGraphCtrlAccessibleContext::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>( &rHint );
-
- if( pSdrHint )
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>( &rHint );
switch( pSdrHint->GetKind() )
{
case SdrHintKind::ObjectChange:
diff --git a/svx/source/core/extedit.cxx b/svx/source/core/extedit.cxx
index 492ce525509a..0c95811e744c 100644
--- a/svx/source/core/extedit.cxx
+++ b/svx/source/core/extedit.cxx
@@ -167,11 +167,12 @@ SdrExternalToolEdit::SdrExternalToolEdit(
void SdrExternalToolEdit::Notify(SfxBroadcaster & rBC, SfxHint const& rHint)
{
- SdrHint const*const pSdrHint(dynamic_cast<SdrHint const*>(&rHint));
- if (pSdrHint
- && (SdrHintKind::ModelCleared == pSdrHint->GetKind()
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
+ return;
+ SdrHint const*const pSdrHint(static_cast<SdrHint const*>(&rHint));
+ if (SdrHintKind::ModelCleared == pSdrHint->GetKind()
|| (pSdrHint->GetObject() == m_pObj
- && SdrHintKind::ObjectRemoved == pSdrHint->GetKind())))
+ && SdrHintKind::ObjectRemoved == pSdrHint->GetKind()))
{
m_pView = nullptr;
m_pObj = nullptr;
diff --git a/svx/source/form/fmundo.cxx b/svx/source/form/fmundo.cxx
index d89243c6da9e..ee980860b830 100644
--- a/svx/source/form/fmundo.cxx
+++ b/svx/source/form/fmundo.cxx
@@ -288,8 +288,9 @@ void FmXUndoEnvironment::ModeChanged()
void FmXUndoEnvironment::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
- if (const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint))
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
switch (pSdrHint->GetKind())
{
case SdrHintKind::ObjectInserted:
diff --git a/svx/source/form/fmvwimp.cxx b/svx/source/form/fmvwimp.cxx
index 9441bf32fc7d..505efe757f13 100644
--- a/svx/source/form/fmvwimp.cxx
+++ b/svx/source/form/fmvwimp.cxx
@@ -1693,8 +1693,10 @@ FmXFormView::ObjectRemoveListener::ObjectRemoveListener( FmXFormView* pParent )
void FmXFormView::ObjectRemoveListener::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (pSdrHint && pSdrHint->GetKind() == SdrHintKind::ObjectRemoved)
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
+ return;
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
+ if (pSdrHint->GetKind() == SdrHintKind::ObjectRemoved)
m_pParent->ObjectRemovedInAliveMode(pSdrHint->GetObject());
}
diff --git a/svx/source/form/navigatortreemodel.cxx b/svx/source/form/navigatortreemodel.cxx
index 91526fa70238..cdbdeaac4e6b 100644
--- a/svx/source/form/navigatortreemodel.cxx
+++ b/svx/source/form/navigatortreemodel.cxx
@@ -657,9 +657,9 @@ namespace svxform
void NavigatorTreeModel::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (pSdrHint)
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
switch( pSdrHint->GetKind() )
{
case SdrHintKind::ObjectInserted:
diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx
index c6106ad321fa..938a8fce0fae 100644
--- a/svx/source/svdraw/svdedxv.cxx
+++ b/svx/source/svdraw/svdedxv.cxx
@@ -227,8 +227,9 @@ void SdrObjEditView::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
SdrGlueEditView::Notify(rBC,rHint);
if (pTextEditOutliner!=nullptr) {
// change of printer while editing
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (pSdrHint!=nullptr) {
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
+ {
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
SdrHintKind eKind=pSdrHint->GetKind();
if (eKind==SdrHintKind::RefDeviceChange) {
pTextEditOutliner->SetRefDevice(mpModel->GetRefDevice());
diff --git a/svx/source/svdraw/svdmodel.cxx b/svx/source/svdraw/svdmodel.cxx
index da81ce1923f6..d41df0885c57 100644
--- a/svx/source/svdraw/svdmodel.cxx
+++ b/svx/source/svdraw/svdmodel.cxx
@@ -2011,28 +2011,32 @@ const css::uno::Sequence< sal_Int8 >& SdrModel::getUnoTunnelImplementationId()
SdrHint::SdrHint(SdrHintKind eNewHint)
-: meHint(eNewHint),
+: SfxHint(SfxHintId::ThisIsAnSdrHint),
+ meHint(eNewHint),
mpObj(nullptr),
mpPage(nullptr)
{
}
SdrHint::SdrHint(SdrHintKind eNewHint, const SdrObject& rNewObj)
-: meHint(eNewHint),
+: SfxHint(SfxHintId::ThisIsAnSdrHint),
+ meHint(eNewHint),
mpObj(&rNewObj),
mpPage(rNewObj.getSdrPageFromSdrObject())
{
}
SdrHint::SdrHint(SdrHintKind eNewHint, const SdrPage* pPage)
-: meHint(eNewHint),
+: SfxHint(SfxHintId::ThisIsAnSdrHint),
+ meHint(eNewHint),
mpObj(nullptr),
mpPage(pPage)
{
}
SdrHint::SdrHint(SdrHintKind eNewHint, const SdrObject& rNewObj, const SdrPage* pPage)
-: meHint(eNewHint),
+: SfxHint(SfxHintId::ThisIsAnSdrHint),
+ meHint(eNewHint),
mpObj(&rNewObj),
mpPage(pPage)
{
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 078e6ec644c0..5762ccb8eb77 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -169,11 +169,10 @@ SdrMarkView::~SdrMarkView()
void SdrMarkView::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (pSdrHint)
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
SdrHintKind eKind=pSdrHint->GetKind();
-
if (eKind==SdrHintKind::ObjectChange || eKind==SdrHintKind::ObjectInserted || eKind==SdrHintKind::ObjectRemoved)
{
mbMarkedObjRectDirty=true;
diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx
index bcdf677120c6..85b9e79b62b4 100644
--- a/svx/source/svdraw/svdpage.cxx
+++ b/svx/source/svdraw/svdpage.cxx
@@ -320,8 +320,7 @@ void SdrObjList::NbcInsertObject(SdrObject* pObj, size_t nPos)
impChildInserted(*pObj);
if (!mbRectsDirty) {
- maSdrObjListOutRect.Union(pObj->GetCurrentBoundRect());
- maSdrObjListSnapRect.Union(pObj->GetSnapRect());
+ mbRectsDirty = true;
}
pObj->InsertedStateChange(); // calls the UserCall (among others)
}
diff --git a/svx/source/svdraw/svdpntv.cxx b/svx/source/svdraw/svdpntv.cxx
index f799c3b098cf..cbac5517dfab 100644
--- a/svx/source/svdraw/svdpntv.cxx
+++ b/svx/source/svdraw/svdpntv.cxx
@@ -226,10 +226,9 @@ void SdrPaintView::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
return;
}
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (!pSdrHint)
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
return;
-
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
SdrHintKind eKind = pSdrHint->GetKind();
if (eKind==SdrHintKind::ObjectChange || eKind==SdrHintKind::ObjectInserted || eKind==SdrHintKind::ObjectRemoved)
{
diff --git a/svx/source/unodraw/UnoNameItemTable.cxx b/svx/source/unodraw/UnoNameItemTable.cxx
index 64c1a354e982..5a27573e62f2 100644
--- a/svx/source/unodraw/UnoNameItemTable.cxx
+++ b/svx/source/unodraw/UnoNameItemTable.cxx
@@ -65,9 +65,10 @@ void SvxUnoNameItemTable::dispose()
void SvxUnoNameItemTable::Notify( SfxBroadcaster&, const SfxHint& rHint ) throw()
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
-
- if( pSdrHint && SdrHintKind::ModelCleared == pSdrHint->GetKind() )
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
+ return;
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
+ if( SdrHintKind::ModelCleared == pSdrHint->GetKind() )
dispose();
}
diff --git a/svx/source/unodraw/unomtabl.cxx b/svx/source/unodraw/unomtabl.cxx
index 0dc25307cfaa..e9f821dc5a2e 100644
--- a/svx/source/unodraw/unomtabl.cxx
+++ b/svx/source/unodraw/unomtabl.cxx
@@ -116,10 +116,12 @@ void SvxUnoMarkerTable::dispose()
// SfxListener
void SvxUnoMarkerTable::Notify( SfxBroadcaster&, const SfxHint& rHint ) throw()
{
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
-
- if( pSdrHint && SdrHintKind::ModelCleared == pSdrHint->GetKind() )
- dispose();
+ if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
+ {
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
+ if( SdrHintKind::ModelCleared == pSdrHint->GetKind() )
+ dispose();
+ }
}
sal_Bool SAL_CALL SvxUnoMarkerTable::supportsService( const OUString& ServiceName )
diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx
index 315503fa547b..e62262d6db5f 100644
--- a/svx/source/unodraw/unoshape.cxx
+++ b/svx/source/unodraw/unoshape.cxx
@@ -1018,17 +1018,18 @@ void SvxShape::Notify( SfxBroadcaster&, const SfxHint& rHint ) throw()
return;
// #i55919# SdrHintKind::ObjectChange is only interesting if it's for this object
-
- const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint);
- if (!pSdrHint ||
- ((pSdrHint->GetKind() != SdrHintKind::ModelCleared) &&
- (pSdrHint->GetKind() != SdrHintKind::ObjectChange || pSdrHint->GetObject() != GetSdrObject() )))
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
+ return;
+ SdrObject* pSdrObject(GetSdrObject());
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
+ if ((pSdrHint->GetKind() != SdrHintKind::ModelCleared) &&
+ (pSdrHint->GetKind() != SdrHintKind::ObjectChange || pSdrHint->GetObject() != pSdrObject ))
return;
- uno::Reference< uno::XInterface > xSelf( GetSdrObject()->getWeakUnoShape() );
+ uno::Reference< uno::XInterface > xSelf( pSdrObject->getWeakUnoShape() );
if( !xSelf.is() )
{
- EndListening(GetSdrObject()->getSdrModelFromSdrObject());
+ EndListening(pSdrObject->getSdrModelFromSdrObject());
mpSdrObjectWeakReference.reset(nullptr);
return;
}
@@ -1053,8 +1054,6 @@ void SvxShape::Notify( SfxBroadcaster&, const SfxHint& rHint ) throw()
if( bClearMe )
{
- SdrObject* pSdrObject(GetSdrObject());
-
if(!HasSdrObjectOwnership())
{
if(nullptr != pSdrObject)
diff --git a/svx/source/unodraw/unoshtxt.cxx b/svx/source/unodraw/unoshtxt.cxx
index bc8cb9f657e9..dbfb5a544c6c 100644
--- a/svx/source/unodraw/unoshtxt.cxx
+++ b/svx/source/unodraw/unoshtxt.cxx
@@ -269,8 +269,9 @@ void SvxTextEditSourceImpl::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
{
Broadcast( *pViewHint );
}
- else if (const SdrHint* pSdrHint = dynamic_cast<const SdrHint*>(&rHint))
+ else if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
{
+ const SdrHint* pSdrHint = static_cast<const SdrHint*>(&rHint);
switch( pSdrHint->GetKind() )
{
case SdrHintKind::ObjectChange:
diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx
index 24769f8bc837..6b49f1ca5c55 100644
--- a/sw/source/core/access/accmap.cxx
+++ b/sw/source/core/access/accmap.cxx
@@ -168,12 +168,13 @@ void SwDrawModellListener_Impl::Notify( SfxBroadcaster& /*rBC*/,
{
// do not broadcast notifications for writer fly frames, because there
// are no shapes that need to know about them.
- const SdrHint *pSdrHint = dynamic_cast<const SdrHint*>( &rHint );
- if ( !pSdrHint ||
- ( pSdrHint->GetObject() &&
+ if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint)
+ return;
+ const SdrHint *pSdrHint = static_cast<const SdrHint*>( &rHint );
+ if (pSdrHint->GetObject() &&
( dynamic_cast< const SwFlyDrawObj* >(pSdrHint->GetObject()) != nullptr ||
dynamic_cast< const SwVirtFlyDrawObj* >(pSdrHint->GetObject()) != nullptr ||
- typeid(SdrObject) == typeid(pSdrHint->GetObject()) ) ) )
+ typeid(SdrObject) == typeid(pSdrHint->GetObject()) ) )
{
return;
}