[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - sw/inc sw/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Wed Jan 23 11:55:55 UTC 2019
sw/inc/hints.hxx | 7 +++++++
sw/source/core/attr/hints.cxx | 5 +++++
sw/source/core/text/txtfrm.cxx | 27 ++++++++++++++++++++++++---
sw/source/core/txtnode/thints.cxx | 2 +-
4 files changed, 37 insertions(+), 4 deletions(-)
New commits:
commit 39d6804454f60fb9ba442f85a0487898dfe68e69
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Tue Jan 22 11:09:20 2019 +0200
Commit: Michael Stahl <Michael.Stahl at cib.de>
CommitDate: Wed Jan 23 12:55:28 2019 +0100
tdf#117935 Accessible text-attributes-changed signals...
... should only be emitted when the text attributes have changed [a11y]
second attempt.
This appears to have begin at
commit 7d9bb549d498d6beed2c4050c402d09643febdfa
Date: Mon Jun 2 15:00:50 2014 +0000
Related: #i124638# Second step of DrawingLayer FillAttributes...
Which accidentally removed the aWhichSublist param from the SwUpdateAttr
constructor in SwpHints::TryInsertHint.
Change-Id: If435ea71e8d84e0d8497cd7106cfdbebcc6af7a0
Reviewed-on: https://gerrit.libreoffice.org/66719
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
(cherry picked from commit f9fe988b7f463bc221dd3b67dcf0ed39309f921a)
Reviewed-on: https://gerrit.libreoffice.org/66780
Reviewed-by: Michael Stahl <Michael.Stahl at cib.de>
Tested-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/sw/inc/hints.hxx b/sw/inc/hints.hxx
index 2519cf4700a9..984747dcf368 100644
--- a/sw/inc/hints.hxx
+++ b/sw/inc/hints.hxx
@@ -136,9 +136,11 @@ private:
sal_Int32 const m_nStart;
sal_Int32 const m_nEnd;
sal_uInt16 const m_nWhichAttr;
+ std::vector<sal_uInt16> m_aWhichFmtAttrs; // attributes changed inside RES_TXTATR_AUTOFMT
public:
SwUpdateAttr( sal_Int32 nS, sal_Int32 nE, sal_uInt16 nW );
+ SwUpdateAttr( sal_Int32 nS, sal_Int32 nE, sal_uInt16 nW, std::vector<sal_uInt16> aW );
sal_Int32 getStart() const
{
@@ -154,6 +156,11 @@ public:
{
return m_nWhichAttr;
}
+
+ const std::vector<sal_uInt16>& getFmtAttrs() const
+ {
+ return m_aWhichFmtAttrs;
+ }
};
/** SwRefMarkFieldUpdate is sent when the referencemarks should be updated.
diff --git a/sw/source/core/attr/hints.cxx b/sw/source/core/attr/hints.cxx
index 7746058a7e1e..ccca96a09eac 100644
--- a/sw/source/core/attr/hints.cxx
+++ b/sw/source/core/attr/hints.cxx
@@ -70,6 +70,11 @@ SwUpdateAttr::SwUpdateAttr( sal_Int32 nS, sal_Int32 nE, sal_uInt16 nW )
{
}
+SwUpdateAttr::SwUpdateAttr( sal_Int32 nS, sal_Int32 nE, sal_uInt16 nW, std::vector<sal_uInt16> aW )
+ : SwMsgPoolItem( RES_UPDATE_ATTR ), m_nStart( nS ), m_nEnd( nE ), m_nWhichAttr( nW ), m_aWhichFmtAttrs( aW )
+{
+}
+
SwRefMarkFieldUpdate::SwRefMarkFieldUpdate( OutputDevice* pOutput )
: SwMsgPoolItem( RES_REFMARKFLD_UPDATE ),
pOut( pOutput )
diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx
index c8618d424601..64e6749b09d1 100644
--- a/sw/source/core/text/txtfrm.cxx
+++ b/sw/source/core/text/txtfrm.cxx
@@ -1875,6 +1875,15 @@ static bool isA11yRelevantAttribute(sal_uInt16 nWhich)
return nWhich != RES_CHRATR_RSID;
}
+static bool hasA11yRelevantAttribute( const std::vector<sal_uInt16>& rWhichFmtAttr )
+{
+ for( sal_uInt16 nWhich : rWhichFmtAttr )
+ if ( isA11yRelevantAttribute( nWhich ) )
+ return true;
+
+ return false;
+}
+
// Note: for now this overrides SwClient::SwClientNotify; the intermediary
// classes still override SwClient::Modify, which should continue to work
// as their implementation of SwClientNotify is SwClient's which calls Modify.
@@ -2132,8 +2141,10 @@ void SwTextFrame::SwClientNotify(SwModify const& rModify, SfxHint const& rHint)
break;
case RES_UPDATE_ATTR:
{
- sal_Int32 const nNPos = static_cast<const SwUpdateAttr*>(pNew)->getStart();
- sal_Int32 const nNLen = static_cast<const SwUpdateAttr*>(pNew)->getEnd() - nNPos;
+ const SwUpdateAttr* pNewUpdate = static_cast<const SwUpdateAttr*>(pNew);
+
+ sal_Int32 const nNPos = pNewUpdate->getStart();
+ sal_Int32 const nNLen = pNewUpdate->getEnd() - nNPos;
nPos = MapModelToView(&rNode, nNPos);
nLen = MapModelToView(&rNode, nNPos + nNLen) - nPos;
if( IsIdxInside( nPos, nLen ) )
@@ -2147,7 +2158,7 @@ void SwTextFrame::SwClientNotify(SwModify const& rModify, SfxHint const& rHint)
nLen = TextFrameIndex(1);
InvalidateRange_( SwCharRange( nPos, nLen) );
- const sal_uInt16 nTmp = static_cast<const SwUpdateAttr*>(pNew)->getWhichAttr();
+ const sal_uInt16 nTmp = pNewUpdate->getWhichAttr();
if( ! nTmp || RES_TXTATR_CHARFMT == nTmp || RES_TXTATR_INETFMT == nTmp || RES_TXTATR_AUTOFMT == nTmp ||
RES_FMT_CHG == nTmp || RES_ATTRSET_CHG == nTmp )
@@ -2156,6 +2167,16 @@ void SwTextFrame::SwClientNotify(SwModify const& rModify, SfxHint const& rHint)
lcl_SetScriptInval( *this, nPos );
}
}
+
+ if( isA11yRelevantAttribute( pNewUpdate->getWhichAttr() ) &&
+ hasA11yRelevantAttribute( pNewUpdate->getFmtAttrs() ) )
+ {
+ SwViewShell* pViewSh = getRootFrame() ? getRootFrame()->GetCurrShell() : nullptr;
+ if ( pViewSh )
+ {
+ pViewSh->InvalidateAccessibleParaAttrs( *this );
+ }
+ }
}
break;
case RES_OBJECTDYING:
diff --git a/sw/source/core/txtnode/thints.cxx b/sw/source/core/txtnode/thints.cxx
index 1d6860f4d959..2fe6bf53c462 100644
--- a/sw/source/core/txtnode/thints.cxx
+++ b/sw/source/core/txtnode/thints.cxx
@@ -3253,7 +3253,7 @@ bool SwpHints::TryInsertHint(
// ... and notify listeners
if ( rNode.HasWriterListeners() )
{
- SwUpdateAttr aHint(nHtStart, nHintEnd, nWhich);
+ SwUpdateAttr aHint(nHtStart, nHintEnd, nWhich, aWhichSublist);
rNode.ModifyNotification( nullptr, &aHint );
}
More information about the Libreoffice-commits
mailing list