diff -uNr sw.old/source/core/crsr/trvltbl.cxx sw.new/source/core/crsr/trvltbl.cxx --- sw.old/source/core/crsr/trvltbl.cxx 2007-10-19 14:58:14.000000000 +0800 +++ sw.new/source/core/crsr/trvltbl.cxx 2007-10-19 14:57:04.000000000 +0800 @@ -443,31 +443,39 @@ // ueberpruefe geschuetzte Zellen SwCntntFrm* pFrm; SwNodeIndex aTmp( rIdx, 2 ); // TableNode + StartNode + SwTableNode *pTblNd = rIdx.GetNode().FindTableNode(); SwNodes& rNds = aTmp.GetNode().GetNodes(); SwCntntNode* pCNd = aTmp.GetNode().GetCntntNode(); if( !pCNd ) pCNd = rNds.GoNext( &aTmp ); - if( 0 == ( pFrm = pCNd->GetFrm()) || - (!bInReadOnly && pFrm->IsProtected() )) + if( 0 == ( pFrm = pCNd->GetFrm()) || pCNd->FindTableNode() != pTblNd || + (!bInReadOnly && pFrm->IsProtected() || !pFrm->GetUpper()->IsCellFrm() )) { SwNode* pNd; for( ;; ) { - aTmp.Assign( *pCNd->EndOfSectionNode(), 1 ); - if( !( pNd = &aTmp.GetNode())->IsStartNode() ) + if ( pFrm->GetUpper()->IsCellFrm() ) + aTmp.Assign( *pCNd->EndOfSectionNode(), 1 ); + else + aTmp.Assign( *pCNd->EndOfSectionNode() ); + if( !( pNd = &aTmp.GetNode())->IsStartNode() && pNd->FindTableNode() == pTblNd && + pFrm->GetUpper()->IsCellFrm() ) return pNd; aTmp++; if( 0 == (pCNd = aTmp.GetNode().GetCntntNode()) ) pCNd = rNds.GoNext( &aTmp ); - if( 0 != ( pFrm = pCNd->GetFrm()) && + if( 0 != ( pFrm = pCNd->GetFrm()) && pCNd->FindTableNode() == pTblNd && (bInReadOnly || !pFrm->IsProtected() )) { rIdx = *pNd; return 0; // Ok, nicht geschuetzt } - aTmp.Assign( *pCNd->EndOfSectionNode(), +1 ); + if ( pFrm->GetUpper()->IsCellFrm() ) + aTmp.Assign( *pCNd->EndOfSectionNode(), 1 ); + else + aTmp.Assign( *pCNd->EndOfSectionNode() ); } } return 0;