diff options
author | Cédric Bosdonnat <cedricbosdo@openoffice.org> | 2011-03-23 18:05:38 +0100 |
---|---|---|
committer | Cédric Bosdonnat <cedricbosdo@openoffice.org> | 2011-03-23 18:06:53 +0100 |
commit | 4e035a1932446c8805c75841ea1db08f863254e6 (patch) | |
tree | 47afdb8ed46abd785af3d18a122cf5b5ff3b2976 /sw/source | |
parent | 57962868b038149e85b04160eec881eaf1f31f95 (diff) |
Right click and clic-drag on a text over background image is weird n#676858
When there an image is wrapped as background under some text, the right
click select the image and the click and drag doesn't do anything. This
is fixed by matching the position with the fly frames after the text.
Diffstat (limited to 'sw/source')
-rw-r--r-- | sw/source/core/layout/trvlfrm.cxx | 92 |
1 files changed, 46 insertions, 46 deletions
diff --git a/sw/source/core/layout/trvlfrm.cxx b/sw/source/core/layout/trvlfrm.cxx index daea08bdef..48cff951ec 100644 --- a/sw/source/core/layout/trvlfrm.cxx +++ b/sw/source/core/layout/trvlfrm.cxx @@ -162,63 +162,63 @@ sal_Bool SwPageFrm::GetCrsrOfst( SwPosition *pPos, Point &rPoint, aPoint.Y() = Min( aPoint.Y(), Frm().Bottom() ); } - //Koennte ein Freifliegender gemeint sein? - //Wenn sein Inhalt geschuetzt werden soll, so ist nix mit Crsr - //hineinsetzen, dadurch sollten alle Aenderungen unmoeglich sein. - if ( GetSortedObjs() ) + //Wenn kein Cntnt unterhalb der Seite 'antwortet', so korrigieren + //wir den StartPoint und fangen nochmal eine Seite vor der + //aktuellen an. Mit Flys ist es dann allerdings vorbei. + if ( SwLayoutFrm::GetCrsrOfst( pPos, aPoint, pCMS ) ) + bRet = sal_True; + else { - SwOrderIter aIter( this ); - aIter.Top(); - while ( aIter() ) + if ( pCMS && (pCMS->bStop || pCMS->bExactOnly) ) { - const SwVirtFlyDrawObj* pObj = - static_cast<const SwVirtFlyDrawObj*>(aIter()); - const SwFlyFrm* pFly = pObj ? pObj->GetFlyFrm() : 0; - if ( pFly && - ( ( pCMS ? pCMS->bSetInReadOnly : sal_False ) || - !pFly->IsProtected() ) && - pFly->GetCrsrOfst( pPos, aPoint, pCMS ) ) - { - bRet = sal_True; - break; - } + ((SwCrsrMoveState*)pCMS)->bStop = sal_True; + return sal_False; + } + const SwCntntFrm *pCnt = GetCntntPos( aPoint, sal_False, sal_False, sal_False, pCMS, sal_False ); + if ( pCMS && pCMS->bStop ) + return sal_False; - if ( pCMS && pCMS->bStop ) - return sal_False; - aIter.Prev(); + OSL_ENSURE( pCnt, "Crsr is gone to a Black hole" ); + if( pCMS && pCMS->pFill && pCnt->IsTxtFrm() ) + bRet = pCnt->GetCrsrOfst( pPos, rPoint, pCMS ); + else + bRet = pCnt->GetCrsrOfst( pPos, aPoint, pCMS ); + + if ( !bRet ) + { + // Set point to pCnt, delete mark + // this may happen, if pCnt is hidden + *pPos = SwPosition( *pCnt->GetNode(), SwIndex( (SwTxtNode*)pCnt->GetNode(), 0 ) ); + bRet = sal_True; } } if ( !bRet ) { - //Wenn kein Cntnt unterhalb der Seite 'antwortet', so korrigieren - //wir den StartPoint und fangen nochmal eine Seite vor der - //aktuellen an. Mit Flys ist es dann allerdings vorbei. - if ( SwLayoutFrm::GetCrsrOfst( pPos, aPoint, pCMS ) ) - bRet = sal_True; - else + //Koennte ein Freifliegender gemeint sein? + //Wenn sein Inhalt geschuetzt werden soll, so ist nix mit Crsr + //hineinsetzen, dadurch sollten alle Aenderungen unmoeglich sein. + if ( GetSortedObjs() ) { - if ( pCMS && (pCMS->bStop || pCMS->bExactOnly) ) + SwOrderIter aIter( this ); + aIter.Top(); + while ( aIter() ) { - ((SwCrsrMoveState*)pCMS)->bStop = sal_True; - return sal_False; - } - const SwCntntFrm *pCnt = GetCntntPos( aPoint, sal_False, sal_False, sal_False, pCMS, sal_False ); - if ( pCMS && pCMS->bStop ) - return sal_False; - - OSL_ENSURE( pCnt, "Crsr is gone to a Black hole" ); - if( pCMS && pCMS->pFill && pCnt->IsTxtFrm() ) - bRet = pCnt->GetCrsrOfst( pPos, rPoint, pCMS ); - else - bRet = pCnt->GetCrsrOfst( pPos, aPoint, pCMS ); + const SwVirtFlyDrawObj* pObj = + static_cast<const SwVirtFlyDrawObj*>(aIter()); + const SwFlyFrm* pFly = pObj ? pObj->GetFlyFrm() : 0; + if ( pFly && + ( ( pCMS ? pCMS->bSetInReadOnly : sal_False ) || + !pFly->IsProtected() ) && + pFly->GetCrsrOfst( pPos, aPoint, pCMS ) ) + { + bRet = sal_True; + break; + } - if ( !bRet ) - { - // Set point to pCnt, delete mark - // this may happen, if pCnt is hidden - *pPos = SwPosition( *pCnt->GetNode(), SwIndex( (SwTxtNode*)pCnt->GetNode(), 0 ) ); - bRet = sal_True; + if ( pCMS && pCMS->bStop ) + return sal_False; + aIter.Prev(); } } } |