accessibility/source/extended/textwindowaccessibility.cxx |    8 -
 basctl/source/accessibility/accessibledialogwindow.cxx    |    3 
 basctl/source/basicide/baside2b.cxx                       |   24 ++---
 basctl/source/basicide/basidesh.cxx                       |    6 -
 basic/source/sbx/sbxcoll.cxx                              |   67 ++++++--------
 basic/source/sbx/sbxobj.cxx                               |   10 --
 sc/source/ui/docshell/servobj.cxx                         |   19 +--
 sfx2/source/doc/printhelper.cxx                           |    8 +
 sfx2/source/doc/sfxbasemodel.cxx                          |    4 
 sw/source/core/layout/sectfrm.cxx                         |    3 
 sw/source/uibase/docvw/srcedtw.cxx                        |    7 -
 vcl/source/edit/vclmedit.cxx                              |    6 -
 12 files changed, 72 insertions(+), 93 deletions(-)

New commits:
commit ac9eaf5d11e5f44d7faa628233438a3b1bb89d6f
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Sep 4 11:11:57 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu Sep 5 08:10:26 2024 +0200

    use less dynamic_cast when broadcasting SfxHint
    
    Change-Id: If4d33cbbf36a9ad495b80a7347b39d0f4bc0405e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172857
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/accessibility/source/extended/textwindowaccessibility.cxx 
b/accessibility/source/extended/textwindowaccessibility.cxx
index 375c2900beb5..9021f85af610 100644
--- a/accessibility/source/extended/textwindowaccessibility.cxx
+++ b/accessibility/source/extended/textwindowaccessibility.cxx
@@ -1391,12 +1391,7 @@ void SAL_CALL Document::disposing()
 // virtual
 void Document::Notify(::SfxBroadcaster &, ::SfxHint const & rHint)
 {
-    const TextHint* pTextHint = dynamic_cast<const TextHint*>(&rHint);
-    if (!pTextHint)
-        return;
-
-    ::TextHint const & rTextHint = *pTextHint;
-    switch (rTextHint.GetId())
+    switch (rHint.GetId())
     {
     case SfxHintId::TextParaInserted:
     case SfxHintId::TextParaRemoved:
@@ -1420,6 +1415,7 @@ void Document::Notify(::SfxBroadcaster &, ::SfxHint const 
& rHint)
             if (!isAlive())
                 break;
 
+            const TextHint& rTextHint = static_cast<const TextHint&>(rHint);
             m_aParagraphNotifications.push(rTextHint);
             break;
         }
diff --git a/basctl/source/accessibility/accessibledialogwindow.cxx 
b/basctl/source/accessibility/accessibledialogwindow.cxx
index 8f43fa4b2556..b7740a6484b5 100644
--- a/basctl/source/accessibility/accessibledialogwindow.cxx
+++ b/basctl/source/accessibility/accessibledialogwindow.cxx
@@ -421,8 +421,9 @@ awt::Rectangle AccessibleDialogWindow::implGetBounds()
 
 void AccessibleDialogWindow::Notify( SfxBroadcaster&, const SfxHint& rHint )
 {
-    if (SdrHint const* pSdrHint = dynamic_cast<SdrHint const*>(&rHint))
+    if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
     {
+        SdrHint const* pSdrHint = static_cast<SdrHint const*>(&rHint);
         switch ( pSdrHint->GetKind() )
         {
             case SdrHintKind::ObjectInserted:
diff --git a/basctl/source/basicide/baside2b.cxx 
b/basctl/source/basicide/baside2b.cxx
index 8bf97a6c09a6..2e6ebc14349e 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -1138,12 +1138,7 @@ void EditorWindow::CreateEditEngine()
 
 void EditorWindow::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
 {
-    TextHint const* pTextHint = dynamic_cast<TextHint const*>(&rHint);
-    if (!pTextHint)
-        return;
-
-    TextHint const& rTextHint = *pTextHint;
-    if( rTextHint.GetId() == SfxHintId::TextViewScrolled )
+    if( rHint.GetId() == SfxHintId::TextViewScrolled )
     {
         rModulWindow.GetEditVScrollBar().SetThumbPos( 
pEditView->GetStartDocPos().Y() );
         rModulWindow.GetEditHScrollBar().SetThumbPos( 
pEditView->GetStartDocPos().X() );
@@ -1152,7 +1147,7 @@ void EditorWindow::Notify( SfxBroadcaster& /*rBC*/, const 
SfxHint& rHint )
         rModulWindow.GetLineNumberWindow().DoScroll
             ( rModulWindow.GetLineNumberWindow().GetCurYOffset() - 
pEditView->GetStartDocPos().Y() );
     }
-    else if( rTextHint.GetId() == SfxHintId::TextHeightChanged )
+    else if( rHint.GetId() == SfxHintId::TextHeightChanged )
     {
         if ( pEditView->GetStartDocPos().Y() )
         {
@@ -1166,7 +1161,7 @@ void EditorWindow::Notify( SfxBroadcaster& /*rBC*/, const 
SfxHint& rHint )
 
         SetScrollBarRanges();
     }
-    else if( rTextHint.GetId() == SfxHintId::TextFormatted )
+    else if( rHint.GetId() == SfxHintId::TextFormatted )
     {
 
         const tools::Long nWidth = pEditEngine->CalcTextWidth();
@@ -1181,20 +1176,23 @@ void EditorWindow::Notify( SfxBroadcaster& /*rBC*/, 
const SfxHint& rHint )
         if ( nCurTextWidth != nPrevTextWidth )
             SetScrollBarRanges();
     }
-    else if( rTextHint.GetId() == SfxHintId::TextParaInserted )
+    else if( rHint.GetId() == SfxHintId::TextParaInserted )
     {
+        TextHint const & rTextHint = static_cast<TextHint const&>(rHint);
         ParagraphInsertedDeleted( rTextHint.GetValue(), true );
         DoDelayedSyntaxHighlight( rTextHint.GetValue() );
     }
-    else if( rTextHint.GetId() == SfxHintId::TextParaRemoved )
+    else if( rHint.GetId() == SfxHintId::TextParaRemoved )
     {
+        TextHint const & rTextHint = static_cast<TextHint const&>(rHint);
         ParagraphInsertedDeleted( rTextHint.GetValue(), false );
     }
-    else if( rTextHint.GetId() == SfxHintId::TextParaContentChanged )
+    else if( rHint.GetId() == SfxHintId::TextParaContentChanged )
     {
+        TextHint const & rTextHint = static_cast<TextHint const&>(rHint);
         DoDelayedSyntaxHighlight( rTextHint.GetValue() );
     }
-    else if( rTextHint.GetId() == SfxHintId::TextViewSelectionChanged )
+    else if( rHint.GetId() == SfxHintId::TextViewSelectionChanged )
     {
         if (SfxBindings* pBindings = GetBindingsPtr())
         {
@@ -1202,7 +1200,7 @@ void EditorWindow::Notify( SfxBroadcaster& /*rBC*/, const 
SfxHint& rHint )
             pBindings->Invalidate( SID_COPY );
         }
     }
-    else if( rTextHint.GetId() == SfxHintId::TextViewCaretChanged )
+    else if( rHint.GetId() == SfxHintId::TextViewCaretChanged )
     {
         // Check whether the line number where the caret is has changed and the
         // highlight needs to be redrawn
diff --git a/basctl/source/basicide/basidesh.cxx 
b/basctl/source/basicide/basidesh.cxx
index 3638ef566a64..4cff365345f7 100644
--- a/basctl/source/basicide/basidesh.cxx
+++ b/basctl/source/basicide/basidesh.cxx
@@ -532,11 +532,7 @@ void Shell::Notify( SfxBroadcaster& rBC, const SfxHint& 
rHint )
         aObjectCatalog->UpdateEntries();
     }
 
-    SbxHint const* pSbxHint = dynamic_cast<SbxHint const*>(&rHint);
-    if (!pSbxHint)
-        return;
-
-    const SfxHintId nHintId = pSbxHint->GetId();
+    const SfxHintId nHintId = rHint.GetId();
     if ( ( nHintId != SfxHintId::BasicStart ) &&
          ( nHintId != SfxHintId::BasicStop ) )
         return;
diff --git a/basic/source/sbx/sbxcoll.cxx b/basic/source/sbx/sbxcoll.cxx
index 0aeffc6ecefc..0bb315c496a8 100644
--- a/basic/source/sbx/sbxcoll.cxx
+++ b/basic/source/sbx/sbxcoll.cxx
@@ -103,47 +103,42 @@ SbxVariable* SbxCollection::Find( const OUString& rName, 
SbxClassType t )
 
 void SbxCollection::Notify( SfxBroadcaster& rCst, const SfxHint& rHint )
 {
-    const SbxHint* p = dynamic_cast<const SbxHint*>(&rHint);
-    if( p )
+    const SfxHintId nId = rHint.GetId();
+    if( nId == SfxHintId::BasicDataWanted || nId == 
SfxHintId::BasicDataChanged )
     {
-        const SfxHintId nId = p->GetId();
-        bool bRead  = ( nId == SfxHintId::BasicDataWanted );
-        bool bWrite = ( nId == SfxHintId::BasicDataChanged );
+        const SbxHint* p = static_cast<const SbxHint*>(&rHint);
         SbxVariable* pVar = p->GetVar();
         SbxArray* pArg = pVar->GetParameters();
-        if( bRead || bWrite )
+        OUString aVarName( pVar->GetName() );
+        if( pVar == this )
         {
-            OUString aVarName( pVar->GetName() );
-            if( pVar == this )
-            {
-                CollItem( pArg );
-            }
-            else if( pVar->GetHashCode() == nCountHash
-                  && aVarName.equalsIgnoreAsciiCase( pCount ) )
-            {
-                pVar->PutLong(sal::static_int_cast<sal_Int32>(pObjs->Count()));
-            }
-            else if( pVar->GetHashCode() == nAddHash
-                  && aVarName.equalsIgnoreAsciiCase( pAdd ) )
-            {
-                CollAdd( pArg );
-            }
-            else if( pVar->GetHashCode() == nItemHash
-                  && aVarName.equalsIgnoreAsciiCase( pItem ) )
-            {
-                CollItem( pArg );
-            }
-            else if( pVar->GetHashCode() == nRemoveHash
-                  && aVarName.equalsIgnoreAsciiCase( pRemove ) )
-            {
-                CollRemove( pArg );
-            }
-            else
-            {
-                SbxObject::Notify( rCst, rHint );
-            }
-            return;
+            CollItem( pArg );
+        }
+        else if( pVar->GetHashCode() == nCountHash
+              && aVarName.equalsIgnoreAsciiCase( pCount ) )
+        {
+            pVar->PutLong(sal::static_int_cast<sal_Int32>(pObjs->Count()));
+        }
+        else if( pVar->GetHashCode() == nAddHash
+              && aVarName.equalsIgnoreAsciiCase( pAdd ) )
+        {
+            CollAdd( pArg );
+        }
+        else if( pVar->GetHashCode() == nItemHash
+              && aVarName.equalsIgnoreAsciiCase( pItem ) )
+        {
+            CollItem( pArg );
+        }
+        else if( pVar->GetHashCode() == nRemoveHash
+              && aVarName.equalsIgnoreAsciiCase( pRemove ) )
+        {
+            CollRemove( pArg );
+        }
+        else
+        {
+            SbxObject::Notify( rCst, rHint );
         }
+        return;
     }
     SbxObject::Notify( rCst, rHint );
 }
diff --git a/basic/source/sbx/sbxobj.cxx b/basic/source/sbx/sbxobj.cxx
index 66933a6d4cbf..0217d03ab520 100644
--- a/basic/source/sbx/sbxobj.cxx
+++ b/basic/source/sbx/sbxobj.cxx
@@ -139,16 +139,14 @@ void SbxObject::Clear()
 
 void SbxObject::Notify( SfxBroadcaster&, const SfxHint& rHint )
 {
-    const SbxHint* p = dynamic_cast<const SbxHint*>(&rHint);
-    if( !p )
-        return;
-
-    const SfxHintId nId = p->GetId();
+    const SfxHintId nId = rHint.GetId();
     bool bRead  = ( nId == SfxHintId::BasicDataWanted );
     bool bWrite = ( nId == SfxHintId::BasicDataChanged );
-    SbxVariable* pVar = p->GetVar();
     if( !(bRead || bWrite) )
         return;
+    const SbxHint* p = static_cast<const SbxHint*>(&rHint);
+
+    SbxVariable* pVar = p->GetVar();
 
     OUString aVarName( pVar->GetName() );
     sal_uInt16 nHash_ = MakeHashCode( aVarName );
diff --git a/sc/source/ui/docshell/servobj.cxx 
b/sc/source/ui/docshell/servobj.cxx
index 4367c7140cc9..78b83a00179a 100644
--- a/sc/source/ui/docshell/servobj.cxx
+++ b/sc/source/ui/docshell/servobj.cxx
@@ -227,11 +227,11 @@ void ScServerObject::Notify( SfxBroadcaster& rBC, const 
SfxHint& rHint )
     {
         //  must be from Area broadcasters
 
-        const ScHint* pScHint = dynamic_cast<const ScHint*>( &rHint );
-        if (pScHint && (pScHint->GetId() == SfxHintId::ScDataChanged))
+        if (rHint.GetId() == SfxHintId::ScDataChanged)
             bDataChanged = true;
-        else if (const ScAreaChangedHint *pChgHint = dynamic_cast<const 
ScAreaChangedHint*>(&rHint))      // position of broadcaster changed
+        else if (rHint.GetId() == SfxHintId::ScAreaChanged)  // position of 
broadcaster changed
         {
+            const ScAreaChangedHint *pChgHint = static_cast<const 
ScAreaChangedHint*>(&rHint);
             const ScRange& aNewRange = pChgHint->GetRange();
             if ( aRange != aNewRange )
             {
@@ -239,15 +239,12 @@ void ScServerObject::Notify( SfxBroadcaster& rBC, const 
SfxHint& rHint )
                 bDataChanged = true;
             }
         }
-        else
+        else if (rHint.GetId() == SfxHintId::Dying)
         {
-            if (rHint.GetId() == SfxHintId::Dying)
-            {
-                //  If the range is being deleted, listening must be restarted
-                //  after the deletion is complete (done in GetData)
-                bRefreshListener = true;
-                bDataChanged = true;
-            }
+            //  If the range is being deleted, listening must be restarted
+            //  after the deletion is complete (done in GetData)
+            bRefreshListener = true;
+            bDataChanged = true;
         }
     }
 
diff --git a/sfx2/source/doc/printhelper.cxx b/sfx2/source/doc/printhelper.cxx
index 8ef4d4eb1e4d..ddb766e72225 100644
--- a/sfx2/source/doc/printhelper.cxx
+++ b/sfx2/source/doc/printhelper.cxx
@@ -756,9 +756,13 @@ void SAL_CALL SfxPrintHelper::print(const uno::Sequence< 
beans::PropertyValue >&
 
 void IMPL_PrintListener_DataContainer::Notify( SfxBroadcaster& rBC, const 
SfxHint& rHint )
 {
-    const SfxPrintingHint* pPrintHint = dynamic_cast<const 
SfxPrintingHint*>(&rHint);
+    if (rHint.GetId() != SfxHintId::ThisIsAnSfxEventHint)
+        return;
+    const SfxEventHint& rEventHint = static_cast<const SfxEventHint&>(rHint);
+    if (rEventHint.GetEventId() != SfxEventHintId::PrintDoc)
+        return;
+    const SfxPrintingHint* pPrintHint = static_cast<const 
SfxPrintingHint*>(&rHint);
     if ( &rBC != m_pObjectShell.get()
-        || !pPrintHint
         || pPrintHint->GetWhich() == SFX_PRINTABLESTATE_CANCELJOB )
         return;
 
diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index a217dc252a85..2db0f2b857a3 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -2983,8 +2983,8 @@ void SfxBaseModel::Notify(          SfxBroadcaster& rBC   
  ,
         }
 
         Any aSupplement;
-        if (const SfxPrintingHint* pPrintingHint = dynamic_cast<const 
SfxPrintingHint*>(&rHint))
-            aSupplement <<= pPrintingHint->GetWhich();
+        if (rNamedHint.GetEventId() == SfxEventHintId::PrintDoc)
+            aSupplement <<= static_cast<const 
SfxPrintingHint*>(&rHint)->GetWhich();
         const SfxViewEventHint* pViewHint = dynamic_cast<const 
SfxViewEventHint*>(&rHint);
         postEvent_Impl( rNamedHint.GetEventName(), pViewHint ? 
pViewHint->GetController() : Reference< frame::XController2 >(), aSupplement );
     }
diff --git a/sw/source/core/layout/sectfrm.cxx 
b/sw/source/core/layout/sectfrm.cxx
index 2d05992e6b50..4b307c4c4f9b 100644
--- a/sw/source/core/layout/sectfrm.cxx
+++ b/sw/source/core/layout/sectfrm.cxx
@@ -2723,8 +2723,9 @@ void SwSectionFrame::SwClientNotify(const SwModify& rMod, 
const SfxHint& rHint)
                 SetCompletePaint();
         }
     }
-    else if(const auto pHint = dynamic_cast<const 
SwSectionFrameMoveAndDeleteHint*>(&rHint))
+    else if(rHint.GetId() == SfxHintId::SwSectionFrameMoveAndDelete)
     {
+        const auto pHint = static_cast<const 
SwSectionFrameMoveAndDeleteHint*>(&rHint);
         // #i117863#
         if(&rMod != GetDep())
             return;
diff --git a/sw/source/uibase/docvw/srcedtw.cxx 
b/sw/source/uibase/docvw/srcedtw.cxx
index 8fd5e2f3b797..1fdc55838f29 100644
--- a/sw/source/uibase/docvw/srcedtw.cxx
+++ b/sw/source/uibase/docvw/srcedtw.cxx
@@ -707,11 +707,7 @@ void SwSrcEditWindow::ImpDoHighlight( std::u16string_view 
aSource, sal_uInt16 nL
 
 void SwSrcEditWindow::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
 {
-    const TextHint* pTextHint = dynamic_cast<const TextHint*>(&rHint);
-    if (!pTextHint)
-        return;
-
-    switch (pTextHint->GetId())
+    switch (rHint.GetId())
     {
         case SfxHintId::TextViewScrolled:
             m_pHScrollbar->SetThumbPos( m_pTextView->GetStartDocPos().X() );
@@ -729,6 +725,7 @@ void SwSrcEditWindow::Notify( SfxBroadcaster& /*rBC*/, 
const SfxHint& rHint )
         case SfxHintId::TextParaContentChanged:
             if ( !m_bHighlighting )
             {
+                auto pTextHint = static_cast<const TextHint*>(&rHint);
                 m_aSyntaxLineTable.insert( 
o3tl::narrowing<sal_uInt16>(pTextHint->GetValue()) );
                 m_aSyntaxIdle.Start();
             }
diff --git a/vcl/source/edit/vclmedit.cxx b/vcl/source/edit/vclmedit.cxx
index d5197358591d..8bb18818e6cb 100644
--- a/vcl/source/edit/vclmedit.cxx
+++ b/vcl/source/edit/vclmedit.cxx
@@ -441,11 +441,7 @@ OUString ImpVclMEdit::GetTextLines( LineEnd aSeparator ) 
const
 
 void ImpVclMEdit::Notify( SfxBroadcaster&, const SfxHint& rHint )
 {
-    const TextHint* pTextHint = dynamic_cast<const TextHint*>(&rHint);
-    if ( !pTextHint )
-        return;
-
-    switch (pTextHint->GetId())
+    switch (rHint.GetId())
     {
         case SfxHintId::TextViewScrolled:
             if (mpHScrollBar->IsVisible())

Reply via email to