Kaydet (Commit) dba14e6a authored tarafından Mike Kaganski's avatar Mike Kaganski

Ensure itemset ranges are sorted

What used to create sorted range automatically in FID_SEARCH_SEARCHSET
handler in SwView::ExecSearch, over time turned into unsorted. this
prevents using MergeRange on the sets created from the range list; see
https://ci.libreoffice.org/job/gerrit_linux_clang_dbgutil/24448/consoleFull

> svl/source/items/itemset.cxx:641:
> void SfxItemSet::MergeRange(sal_uInt16, sal_uInt16):
> Assertion `!pRange[2] || (pRange[2] > pRange[1] && pRange[2] - pRange[1] > 1)' failed.

So let's just use MergeRange in the SwView::ExecSearch itself, which
would ensure early detection if the initial list gets unsorted.

Change-Id: Id0232190f850e3feb463adfcb3153eafbaad7d9b
Reviewed-on: https://gerrit.libreoffice.org/66607Reviewed-by: 's avatarMike Kaganski <mike.kaganski@collabora.com>
Tested-by: 's avatarMike Kaganski <mike.kaganski@collabora.com>
üst 82913d29
......@@ -1999,23 +1999,14 @@ IMPL_LINK_NOARG(SvxSearchDialog, FormatHdl_Impl, Button*, void)
if ( !pSh || !pImpl->pRanges )
return;
std::vector<sal_uInt16> aWhRanges;
const sal_uInt16* pPtr = pImpl->pRanges.get();
while (*pPtr)
{
aWhRanges.push_back(*pPtr++);
}
SfxItemPool& rPool = pSh->GetPool();
SfxItemSet aSet(rPool, pImpl->pRanges.get());
aWhRanges.push_back(SID_ATTR_PARA_MODEL);
aWhRanges.push_back(SID_ATTR_PARA_MODEL);
aSet.MergeRange(SID_ATTR_PARA_MODEL, SID_ATTR_PARA_MODEL);
sal_uInt16 nBrushWhich = pSh->GetPool().GetWhich(SID_ATTR_BRUSH);
aWhRanges.push_back(nBrushWhich);
aWhRanges.push_back(nBrushWhich);
aWhRanges.push_back(0);
SfxItemPool& rPool = pSh->GetPool();
SfxItemSet aSet(rPool, aWhRanges.data());
aSet.MergeRange(nBrushWhich, nBrushWhich);
OUString aTxt;
aSet.InvalidateAllItems();
......
......@@ -442,7 +442,6 @@ void SwView::ExecSearch(SfxRequest& rReq)
/*10 */ RES_CHRATR_ROTATE, RES_CHRATR_ROTATE,
/*12 */ RES_CHRATR_SCALEW, RES_CHRATR_RELIEF,
/*14 */ RES_CHRATR_OVERLINE, RES_CHRATR_OVERLINE,
// insert position for CJK/CTL attributes!
/*16 */ RES_PARATR_LINESPACING, RES_PARATR_HYPHENZONE,
/*18 */ RES_PARATR_REGISTER, RES_PARATR_REGISTER,
/*20 */ RES_PARATR_VERTALIGN, RES_PARATR_VERTALIGN,
......@@ -451,33 +450,20 @@ void SwView::ExecSearch(SfxRequest& rReq)
/*26 */ 0
};
static const sal_uInt16 aCJKAttr[] =
{
RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_WEIGHT,
RES_CHRATR_EMPHASIS_MARK, RES_CHRATR_TWO_LINES,
RES_PARATR_SCRIPTSPACE, RES_PARATR_FORBIDDEN_RULES
};
static const sal_uInt16 aCTLAttr[] =
{
RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_WEIGHT
};
SfxItemSet aSet(m_pWrtShell->GetAttrPool(), aNormalAttr);
std::vector<sal_uInt16> aArr;
aArr.insert( aArr.begin(), aNormalAttr,
aNormalAttr + SAL_N_ELEMENTS( aNormalAttr ));
if( SW_MOD()->GetCTLOptions().IsCTLFontEnabled() )
{
aArr.insert( aArr.begin() + 16, aCTLAttr,
aCTLAttr + SAL_N_ELEMENTS( aCTLAttr ));
aSet.MergeRange(RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_WEIGHT);
}
SvtCJKOptions aCJKOpt;
if( aCJKOpt.IsAnyEnabled() )
{
aArr.insert( aArr.begin() + 16, aCJKAttr,
aCJKAttr + SAL_N_ELEMENTS( aCJKAttr ));
aSet.MergeRange(RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_WEIGHT);
aSet.MergeRange(RES_CHRATR_EMPHASIS_MARK, RES_CHRATR_TWO_LINES);
aSet.MergeRange(RES_PARATR_SCRIPTSPACE, RES_PARATR_FORBIDDEN_RULES);
}
SfxItemSet aSet( m_pWrtShell->GetAttrPool(), &aArr[0] );
sal_uInt16 nWhich = SID_SEARCH_SEARCHSET;
if ( FID_SEARCH_REPLACESET == nSlot )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment