From 9577ce899f372b092db4f1e1f62f94827daff67a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Fri, 28 Jan 2011 21:26:05 +0000 Subject: [PATCH] Resolves: fdo#33509/ooo#62414 fix CTL spelling popup --- ...09-i62414-out-by-one-breaks-CTL-spel.patch | 104 ++++++++++++++++++ libreoffice.spec | 3 + 2 files changed, 107 insertions(+) create mode 100644 0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch diff --git a/0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch b/0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch new file mode 100644 index 0000000..0e37637 --- /dev/null +++ b/0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch @@ -0,0 +1,104 @@ +From ec7ff475f480619787131d0a193d7786c30dac10 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Fri, 28 Jan 2011 21:16:36 +0000 +Subject: [PATCH] Resolves: fdo#33509, #i62414# out-by-one breaks CTL spell-checking popup + +ABCD +0123 + ^ + +Currently calls GetCharRect for position "0" and position "4". It should be +"3". We were placing the cursor *after* the final character. We really need to +place it *before* the final character and get the bounding box of the last char +to union it with the first char's bounding box. It works out ok for western +text, but you get a far different value for CTL text. +--- + sw/source/core/crsr/crsrsh.cxx | 4 ++-- + sw/source/core/edit/edlingu.cxx | 14 +++++--------- + 2 files changed, 7 insertions(+), 11 deletions(-) + +diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx +index ed8d37b..a6db747 100644 +--- a/sw/source/core/crsr/crsrsh.cxx ++++ b/sw/source/core/crsr/crsrsh.cxx +@@ -3419,7 +3419,7 @@ void SwCrsrShell::GetSmartTagTerm( const Point& rPt, SwRect& rSelectRect, + //no determine the rectangle in the current line + xub_StrLen nWordStart = (nBegin + nLeft) < nLineStart ? nLineStart : nBegin + nLeft; + //take one less than the line end - otherwise the next line would be calculated +- xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd - 1: (nBegin + nLen - nLeft - nRight); ++ xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd : (nBegin + nLen - nLeft - nRight); + Push(); + pCrsr->DeleteMark(); + SwIndex& rContent = GetCrsr()->GetPoint()->nContent; +@@ -3431,7 +3431,7 @@ void SwCrsrShell::GetSmartTagTerm( const Point& rPt, SwRect& rSelectRect, + SwCntntFrm *pCntntFrame = pCntntNode->GetFrm( &rPt, pCrsr->GetPoint(), FALSE); + + pCntntFrame->GetCharRect( aStartRect, *pCrsr->GetPoint(), &aState ); +- rContent = nWordEnd; ++ rContent = nWordEnd - 1; + SwRect aEndRect; + pCntntFrame->GetCharRect( aEndRect, *pCrsr->GetPoint(),&aState ); + rSelectRect = aStartRect.Union( aEndRect ); +diff --git a/sw/source/core/edit/edlingu.cxx b/sw/source/core/edit/edlingu.cxx +index 7e186f9..a3d1572 100644 +--- a/sw/source/core/edit/edlingu.cxx ++++ b/sw/source/core/edit/edlingu.cxx +@@ -550,7 +550,6 @@ uno::Any SwHyphIter::Continue( sal_uInt16* pPageCnt, sal_uInt16* pPageSt ) + + const sal_Bool bAuto = IsAuto(); + uno::Reference< XHyphenatedWord > xHyphWord; +- sal_uInt16 nRet; + sal_Bool bGoOn = sal_False; + do { + SwPaM *pCrsr; +@@ -565,10 +564,7 @@ uno::Any SwHyphIter::Continue( sal_uInt16* pPageCnt, sal_uInt16* pPageSt ) + pCrsr->SetMark(); + } + +- // geraten BUG: +- if ( *pCrsr->End() > *GetEnd() ) +- nRet = 0; +- else ++ if ( *pCrsr->End() <= *GetEnd() ) + { + *pCrsr->GetMark() = *GetEnd(); + +@@ -1076,7 +1072,7 @@ uno::Reference< XSpellAlternatives > + //no determine the rectangle in the current line + xub_StrLen nWordStart = (nBegin + nLeft) < nLineStart ? nLineStart : nBegin + nLeft; + //take one less than the line end - otherwise the next line would be calculated +- xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd - 1: (nBegin + nLen - nLeft - nRight); ++ xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd: (nBegin + nLen - nLeft - nRight); + Push(); + pCrsr->DeleteMark(); + SwIndex& rContent = GetCrsr()->GetPoint()->nContent; +@@ -1088,7 +1084,7 @@ uno::Reference< XSpellAlternatives > + SwCntntFrm *pCntntFrame = pCntntNode->GetFrm(pPt, pCrsr->GetPoint(), FALSE); + + pCntntFrame->GetCharRect( aStartRect, *pCrsr->GetPoint(), &aState ); +- rContent = nWordEnd; ++ rContent = nWordEnd - 1; + SwRect aEndRect; + pCntntFrame->GetCharRect( aEndRect, *pCrsr->GetPoint(),&aState ); + rSelectRect = aStartRect.Union( aEndRect ); +@@ -1210,7 +1206,7 @@ bool SwEditShell::GetGrammarCorrection( + //no determine the rectangle in the current line + xub_StrLen nWordStart = (nBegin + nLeft) < nLineStart ? nLineStart : nBegin + nLeft; + //take one less than the line end - otherwise the next line would be calculated +- xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd - 1: (nBegin + nLen - nLeft - nRight); ++ xub_StrLen nWordEnd = (nBegin + nLen - nLeft - nRight) > nLineEnd ? nLineEnd: (nBegin + nLen - nLeft - nRight); + Push(); + pCrsr->DeleteMark(); + SwIndex& rContent = GetCrsr()->GetPoint()->nContent; +@@ -1222,7 +1218,7 @@ bool SwEditShell::GetGrammarCorrection( + SwCntntFrm *pCntntFrame = pCntntNode->GetFrm(pPt, pCrsr->GetPoint(), FALSE); + + pCntntFrame->GetCharRect( aStartRect, *pCrsr->GetPoint(), &aState ); +- rContent = nWordEnd; ++ rContent = nWordEnd - 1; + SwRect aEndRect; + pCntntFrame->GetCharRect( aEndRect, *pCrsr->GetPoint(),&aState ); + rSelectRect = aStartRect.Union( aEndRect ); +-- +1.7.3.5 + diff --git a/libreoffice.spec b/libreoffice.spec index 4896df1..bb8baf3 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -110,6 +110,7 @@ Patch22: 0001-Related-rhbz-610103-more-woes-on-rpm-upgrade-vs-rpm-.patch Patch23: 0001-fexceptions-fexceptions.patch Patch24: 0001-Related-rhbz-672872-cancel-gtk-file-dialog-on-deskto.patch Patch25: vbahelper.visibility.patch +Patch26: 0001-Resolves-fdo-33509-i62414-out-by-one-breaks-CTL-spel.patch %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} %define instdir %{_libdir} @@ -738,6 +739,7 @@ mv -f redhat.soc extras/source/palettes/standard.soc %patch23 -p1 -b .fexceptions-fexceptions.patch %patch24 -p1 -b .rhbz672872-cancel-gtk-file-dialog-on-deskto.patch %patch25 -p0 -b .vbahelper.visibility.patch +%patch26 -p1 -b .fdo33509-i62414-out-by-one-breaks-CTL-spel.patch touch scripting/source/pyprov/delzip touch scripting/util/provider/beanshell/delzip touch scripting/util/provider/javascript/delzip @@ -2083,6 +2085,7 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : * Thu Jan 27 2011 Caolán McNamara 3.3.0.4-3 - Related: rhbz#610103 make this even more robust - Related: rhbz#672872 cancel gtk file dialog on terminate +- Resolves: fdo#33509/ooo#62414 fix CTL spelling popup * Mon Jan 24 2011 Caolán McNamara 3.3.0.4-2 - Resolves: rhbz#671540 fix lonely )