Author: orw Date: Thu Feb 20 11:01:04 2014 New Revision: 1570146 URL: http://svn.apache.org/r1570146 Log: 123243: allow in-place editing of Input Fields in protected areas (e.g. protected sections)
Modified: openoffice/trunk/main/sw/inc/pam.hxx openoffice/trunk/main/sw/sdi/_basesh.sdi openoffice/trunk/main/sw/sdi/_textsh.sdi openoffice/trunk/main/sw/source/core/crsr/crsrsh.cxx openoffice/trunk/main/sw/source/core/crsr/pam.cxx openoffice/trunk/main/sw/source/core/edit/eddel.cxx openoffice/trunk/main/sw/source/core/edit/edfcol.cxx openoffice/trunk/main/sw/source/core/edit/ednumber.cxx openoffice/trunk/main/sw/source/ui/docvw/edtwin.cxx openoffice/trunk/main/sw/source/ui/shells/basesh.cxx openoffice/trunk/main/sw/source/ui/shells/textsh1.cxx Modified: openoffice/trunk/main/sw/inc/pam.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/inc/pam.hxx?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/inc/pam.hxx (original) +++ openoffice/trunk/main/sw/inc/pam.hxx Thu Feb 20 11:01:04 2014 @@ -253,7 +253,7 @@ public: // steht in etwas geschuetztem oder in die Selektion umspannt // etwas geschuetztes. - sal_Bool HasReadonlySel( bool bFormView ) const; + sal_Bool HasReadonlySel( const bool bFormView ) const; sal_Bool ContainsPosition(const SwPosition & rPos) { return *Start() <= rPos && rPos <= *End(); } Modified: openoffice/trunk/main/sw/sdi/_basesh.sdi URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/sdi/_basesh.sdi?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/sdi/_basesh.sdi (original) +++ openoffice/trunk/main/sw/sdi/_basesh.sdi Thu Feb 20 11:01:04 2014 @@ -37,7 +37,6 @@ interface BaseTextSelection ExecMethod = ExecDelete ; StateMethod = GetState ; FastCall = FALSE ; - DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] FN_BACKSPACE // status(final|play) @@ -45,7 +44,6 @@ interface BaseTextSelection ExecMethod = ExecDelete ; StateMethod = GetState ; FastCall = FALSE ; - DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] FN_SHIFT_BACKSPACE // status() Modified: openoffice/trunk/main/sw/sdi/_textsh.sdi URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/sdi/_textsh.sdi?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/sdi/_textsh.sdi (original) +++ openoffice/trunk/main/sw/sdi/_textsh.sdi Thu Feb 20 11:01:04 2014 @@ -240,12 +240,13 @@ interface BaseText StateMethod = GetState ; DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; ] + FN_INSERT_BREAK // status(final|play) - [ - ExecMethod = ExecInsert ; - StateMethod = GetState ; - DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR"; - ] + [ + ExecMethod = ExecInsert ; + StateMethod = GetState ; + ] + FN_INSERT_PAGEBREAK // status(final|play) [ ExecMethod = ExecInsert ; Modified: openoffice/trunk/main/sw/source/core/crsr/crsrsh.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/crsr/crsrsh.cxx?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/core/crsr/crsrsh.cxx (original) +++ openoffice/trunk/main/sw/source/core/crsr/crsrsh.cxx Thu Feb 20 11:01:04 2014 @@ -2429,9 +2429,7 @@ sal_Bool SwCrsrShell::IsOverReadOnlyPos( Point aPt( rPt ); SwPaM aPam( *pCurCrsr->GetPoint() ); GetLayout()->GetCrsrOfst( aPam.GetPoint(), aPt ); - // --> FME 2004-06-29 #114856# Formular view return aPam.HasReadonlySel( GetViewOptions()->IsFormView() ); - // <-- } @@ -3058,32 +3056,30 @@ void SwCrsrShell::SetReadOnlyAvailable( sal_Bool SwCrsrShell::HasReadonlySel() const { - sal_Bool bRet = sal_False; - if( IsReadOnlyAvailable() || - // --> FME 2004-06-29 #114856# Formular view - GetViewOptions()->IsFormView() ) - // <-- - { - if( pTblCrsr ) - bRet = pTblCrsr->HasReadOnlyBoxSel() || - pTblCrsr->HasReadonlySel( - // --> FME 2004-06-29 #114856# Formular view - GetViewOptions()->IsFormView() ); - // <-- + sal_Bool bRet = sal_False; + if ( IsReadOnlyAvailable() || GetViewOptions()->IsFormView() ) + { + if ( pTblCrsr != NULL ) + { + bRet = pTblCrsr->HasReadOnlyBoxSel() + || pTblCrsr->HasReadonlySel( GetViewOptions()->IsFormView() ); + } else - { - const SwPaM* pCrsr = pCurCrsr; + { + const SwPaM* pCrsr = pCurCrsr; - do { - if( pCrsr->HasReadonlySel( - // --> FME 2004-06-29 #114856# Formular view - GetViewOptions()->IsFormView() ) ) - // <-- - bRet = sal_True; - } while( !bRet && pCurCrsr != ( pCrsr = (SwPaM*)pCrsr->GetNext() )); - } - } - return bRet; + do + { + if ( pCrsr->HasReadonlySel( GetViewOptions()->IsFormView() ) ) + { + bRet = sal_True; + } + + pCrsr = (SwPaM*)pCrsr->GetNext(); + } while ( !bRet && pCrsr != pCurCrsr ); + } + } + return bRet; } sal_Bool SwCrsrShell::IsSelFullPara() const Modified: openoffice/trunk/main/sw/source/core/crsr/pam.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/crsr/pam.cxx?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/core/crsr/pam.cxx (original) +++ openoffice/trunk/main/sw/source/core/crsr/pam.cxx Thu Feb 20 11:01:04 2014 @@ -671,74 +671,80 @@ const SwFrm* lcl_FindEditInReadonlyFrm( // steht in etwas geschuetztem oder in die Selektion umspannt // etwas geschuetztes. -sal_Bool SwPaM::HasReadonlySel( bool bFormView ) const +sal_Bool SwPaM::HasReadonlySel( const bool bFormView ) const { sal_Bool bRet = sal_False; - Point aTmpPt; - const SwCntntNode *pNd; - const SwCntntFrm *pFrm; - if( 0 != ( pNd = GetPoint()->nNode.GetNode().GetCntntNode() )) + const SwCntntNode* pNd = GetPoint()->nNode.GetNode().GetCntntNode(); + const SwCntntFrm *pFrm = NULL; + if ( pNd != NULL ) + { + Point aTmpPt; pFrm = pNd->getLayoutFrm( pNd->GetDoc()->GetCurrentLayout(), &aTmpPt, GetPoint(), sal_False ); - else - pFrm = 0; + } - // --> FME 2004-06-29 #114856# Formular view - // Will be set if point/mark are inside edit-in-readonly environment - const SwFrm* pSttEIRFrm = 0; - const SwFrm* pEndEIRFrm = 0; - - if( pFrm && ( pFrm->IsProtected() || - // --> FME 2004-06-29 #114856# Formular view - ( bFormView && - 0 == ( pSttEIRFrm = lcl_FindEditInReadonlyFrm( *pFrm ) ) ) ) ) - // <-- + // Will be set if point are inside edit-in-readonly environment + const SwFrm* pPointEditInReadonlyFrm = NULL; + if ( pFrm != NULL + && ( pFrm->IsProtected() + || ( bFormView + && 0 == ( pPointEditInReadonlyFrm = lcl_FindEditInReadonlyFrm( *pFrm ) ) ) ) ) + { bRet = sal_True; - else if( pNd ) + } + else if( pNd != NULL ) { const SwSectionNode* pSNd = pNd->GetSectionNode(); - if( pSNd && ( pSNd->GetSection().IsProtectFlag() || - // --> FME 2004-06-29 #114856# Formular view - (bFormView && !pSNd->GetSection().IsEditInReadonlyFlag()) ) ) - // <-- + if ( pSNd != NULL + && ( pSNd->GetSection().IsProtectFlag() + || ( bFormView + && !pSNd->GetSection().IsEditInReadonlyFlag()) ) ) + { bRet = sal_True; + } } - if( !bRet && HasMark() && GetPoint()->nNode != GetMark()->nNode ) - { - if( 0 != ( pNd = GetMark()->nNode.GetNode().GetCntntNode() )) + if ( !bRet + && HasMark() + && GetPoint()->nNode != GetMark()->nNode ) + { + pNd = GetMark()->nNode.GetNode().GetCntntNode(); + pFrm = NULL; + if ( pNd != NULL ) + { + Point aTmpPt; pFrm = pNd->getLayoutFrm( pNd->GetDoc()->GetCurrentLayout(), &aTmpPt, GetMark(), sal_False ); - else - pFrm = 0; + } - if( pFrm && ( pFrm->IsProtected() || - // --> FME 2004-06-29 #114856# Formular view - ( bFormView && - 0 == ( pEndEIRFrm = lcl_FindEditInReadonlyFrm( *pFrm ) ) ) ) ) - // <-- + const SwFrm* pMarkEditInReadonlyFrm = NULL; + if ( pFrm != NULL + && ( pFrm->IsProtected() + || ( bFormView + && 0 == ( pMarkEditInReadonlyFrm = lcl_FindEditInReadonlyFrm( *pFrm ) ) ) ) ) + { bRet = sal_True; - else if( pNd ) + } + else if( pNd != NULL ) { const SwSectionNode* pSNd = pNd->GetSectionNode(); - if( pSNd && ( pSNd->GetSection().IsProtectFlag() || - // --> FME 2004-06-29 #114856# Formular view - (bFormView && !pSNd->GetSection().IsEditInReadonlyFlag()) ) ) - // <-- + if ( pSNd != NULL + && ( pSNd->GetSection().IsProtectFlag() + || ( bFormView + && !pSNd->GetSection().IsEditInReadonlyFlag()) ) ) + { bRet = sal_True; + } } - // --> FME 2004-06-29 #114856# Formular view if ( !bRet && bFormView ) { // Check if start and end frame are inside the _same_ // edit-in-readonly-environment. Otherwise we better return 'true' - if ( pSttEIRFrm != pEndEIRFrm ) + if ( pPointEditInReadonlyFrm != pMarkEditInReadonlyFrm ) bRet = sal_True; } - // <-- - // oder sollte eine geschuetzte Section innerhalb der - // Selektion liegen? + // check for protected section inside the selection if( !bRet ) { sal_uLong nSttIdx = GetMark()->nNode.GetIndex(), @@ -767,15 +773,6 @@ sal_Bool SwPaM::HasReadonlySel( bool bFo if( nSttIdx <= nIdx && nEndIdx >= nIdx && rCntnt.GetCntntIdx()->GetNode().GetNodes().IsDocNodes() ) { -/* // ist es keine gelinkte Section, dann kann sie auch - // nicht mitselektiert werden - const SwSection& rSect = *pFmt->GetSection(); - if( CONTENT_SECTION == rSect.GetType() ) - { - RestoreSavePos(); - return sal_True; - } -*/ bRet = sal_True; break; } @@ -819,9 +816,11 @@ sal_Bool SwPaM::HasReadonlySel( bool bFo } } } + //FIXME FieldBk // TODO: Form Protection when Enhanced Fields are enabled - if (!bRet) { + if (!bRet) + { const SwDoc *pDoc = GetDoc(); sw::mark::IMark* pA = NULL; sw::mark::IMark* pB = NULL; @@ -836,6 +835,7 @@ sal_Bool SwPaM::HasReadonlySel( bool bFo if ( bProtectForm ) bRet |= ( pA == NULL || pB == NULL ); } + return bRet; } Modified: openoffice/trunk/main/sw/source/core/edit/eddel.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/edit/eddel.cxx?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/core/edit/eddel.cxx (original) +++ openoffice/trunk/main/sw/source/core/edit/eddel.cxx Thu Feb 20 11:01:04 2014 @@ -118,7 +118,7 @@ long SwEditShell::Delete() { SET_CURR_SHELL( this ); long nRet = 0; - if( !HasReadonlySel() ) + if ( !HasReadonlySel() || CrsrInsideInputFld() ) { StartAllAction(); Modified: openoffice/trunk/main/sw/source/core/edit/edfcol.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/edit/edfcol.cxx?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/core/edit/edfcol.cxx (original) +++ openoffice/trunk/main/sw/source/core/edit/edfcol.cxx Thu Feb 20 11:01:04 2014 @@ -77,11 +77,10 @@ void SwEditShell::SetTxtFmtColl( SwTxtFm GetDoc()->GetIDocumentUndoRedo().StartUndo(UNDO_SETFMTCOLL, &aRewriter); FOREACHPAM_START(this) - if( !PCURCRSR->HasReadonlySel( - // --> FME 2004-06-29 #114856# Formular view - GetViewOptions()->IsFormView() ) ) - // <-- + if ( !PCURCRSR->HasReadonlySel( GetViewOptions()->IsFormView() ) ) + { GetDoc()->SetTxtFmtColl( *PCURCRSR, pLocal, true, bResetListAttrs ); + } FOREACHPAM_END() GetDoc()->GetIDocumentUndoRedo().EndUndo(UNDO_SETFMTCOLL, &aRewriter); Modified: openoffice/trunk/main/sw/source/core/edit/ednumber.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/edit/ednumber.cxx?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/core/edit/ednumber.cxx (original) +++ openoffice/trunk/main/sw/source/core/edit/ednumber.cxx Thu Feb 20 11:01:04 2014 @@ -696,35 +696,36 @@ sal_Bool SwEditShell::IsOutlineCopyable( } -sal_Bool SwEditShell::NumOrNoNum( sal_Bool bNumOn, sal_Bool bChkStart ) // #115901# +sal_Bool SwEditShell::NumOrNoNum( + sal_Bool bNumOn, + sal_Bool bChkStart ) { - sal_Bool bRet = sal_False; - SwPaM* pCrsr = GetCrsr(); - if( pCrsr->GetNext() == pCrsr && !pCrsr->HasMark() && - ( !bChkStart || !pCrsr->GetPoint()->nContent.GetIndex()) ) - { - StartAllAction(); // Klammern fuers Updaten !! - // #115901# - bRet = GetDoc()->NumOrNoNum( pCrsr->GetPoint()->nNode, !bNumOn ); // #i29560# - EndAllAction(); - } - return bRet; + sal_Bool bRet = sal_False; + + if ( !IsMultiSelection() + && !HasSelection() + && ( !bChkStart || IsSttPara() ) ) + { + StartAllAction(); + bRet = GetDoc()->NumOrNoNum( GetCrsr()->GetPoint()->nNode, !bNumOn ); + EndAllAction(); + } + return bRet; } + sal_Bool SwEditShell::IsNoNum( sal_Bool bChkStart ) const { - // ein Backspace im Absatz ohne Nummer wird zum Delete sal_Bool bResult = sal_False; - SwPaM* pCrsr = GetCrsr(); - if (pCrsr->GetNext() == pCrsr && !pCrsr->HasMark() && - (!bChkStart || !pCrsr->GetPoint()->nContent.GetIndex())) + if ( !IsMultiSelection() + && !HasSelection() + && ( !bChkStart || IsSttPara() ) ) { - const SwTxtNode* pTxtNd = pCrsr->GetNode()->GetTxtNode(); - - if (pTxtNd) + const SwTxtNode* pTxtNd = GetCrsr()->GetNode()->GetTxtNode(); + if ( pTxtNd != NULL ) { - bResult = ! pTxtNd->IsCountedInList(); + bResult = !pTxtNd->IsCountedInList(); } } @@ -740,12 +741,12 @@ sal_uInt8 SwEditShell::GetNumLevel() con SwPaM* pCrsr = GetCrsr(); const SwTxtNode* pTxtNd = pCrsr->GetNode()->GetTxtNode(); - ASSERT( pTxtNd, "GetNumLevel() without text node" ) - if ( !pTxtNd ) + ASSERT( pTxtNd != NULL, "GetNumLevel() without text node" ) + if ( pTxtNd == NULL ) return nLevel; const SwNumRule* pRule = pTxtNd->GetNumRule(); - if(pRule) + if ( pRule != NULL ) { const int nListLevelOfTxtNode( pTxtNd->GetActualListLevel() ); if ( nListLevelOfTxtNode >= 0 ) @@ -774,7 +775,7 @@ void SwEditShell::SetCurNumRule( const S GetDoc()->GetIDocumentUndoRedo().StartUndo( UNDO_START, NULL ); SwPaM* pCrsr = GetCrsr(); - if( pCrsr->GetNext() != pCrsr ) // Mehrfachselektion ? + if( IsMultiSelection() ) { SwPamRanges aRangeArr( *pCrsr ); SwPaM aPam( *pCrsr->GetPoint() ); Modified: openoffice/trunk/main/sw/source/ui/docvw/edtwin.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/ui/docvw/edtwin.cxx?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/ui/docvw/edtwin.cxx (original) +++ openoffice/trunk/main/sw/source/ui/docvw/edtwin.cxx Thu Feb 20 11:01:04 2014 @@ -301,7 +301,7 @@ void SwEditWin::UpdatePointer(const Poin if( pApplyTempl ) { PointerStyle eStyle = POINTER_FILL; - if( rSh.IsOverReadOnlyPos( rLPt )) + if ( rSh.IsOverReadOnlyPos( rLPt ) ) { if( pUserMarker ) { @@ -1851,7 +1851,8 @@ KEYINPUT_CHECKTABLE_INSDEL: case KEY_BACKSPACE: case KEY_BACKSPACE | KEY_SHIFT: - if( !rSh.HasReadonlySel() ) + if ( !rSh.HasReadonlySel() + && !rSh.CrsrInsideInputFld() ) { sal_Bool bDone = sal_False; // Remove the paragraph indent, if the cursor is at the @@ -1860,12 +1861,11 @@ KEYINPUT_CHECKTABLE_INSDEL: // Also try to remove indent, if current paragraph // has numbering rule, but isn't counted and only // key <backspace> is hit. - const bool bOnlyBackspaceKey( - KEY_BACKSPACE == rKeyCode.GetFullCode() ); - if ( rSh.IsSttPara() && - !rSh.HasSelection() && // i40834 - ( NULL == rSh.GetCurNumRule() || - ( rSh.IsNoNum() && bOnlyBackspaceKey ) ) ) + const bool bOnlyBackspaceKey( KEY_BACKSPACE == rKeyCode.GetFullCode() ); + if ( rSh.IsSttPara() + && !rSh.HasSelection() + && ( rSh.GetCurNumRule() == NULL + || ( rSh.IsNoNum() && bOnlyBackspaceKey ) ) ) { bDone = rSh.TryRemoveIndent(); } @@ -1874,11 +1874,10 @@ KEYINPUT_CHECKTABLE_INSDEL: eKeyState = KS_Ende; else { - if (rSh.IsSttPara() && - ! rSh.IsNoNum()) + if ( rSh.IsSttPara() && !rSh.IsNoNum() ) { - if (nKS_NUMDOWN_Count > 0 && - 0 < rSh.GetNumLevel()) + if (nKS_NUMDOWN_Count > 0 + && rSh.GetNumLevel() > 0) { eKeyState = KS_NumUp; nKS_NUMDOWN_Count = 2; @@ -1892,7 +1891,7 @@ KEYINPUT_CHECKTABLE_INSDEL: } } // If the cursor is in an empty paragraph, which has - // a numbering, but not the oultine numbering, and + // a numbering, but not the outline numbering, and // there is no selection, the numbering has to be // deleted on key <Backspace>. // Otherwise method <SwEditShell::NumOrNoNum(..)> @@ -1902,37 +1901,35 @@ KEYINPUT_CHECKTABLE_INSDEL: // on <shift-backspace> it is set to <true>. // Thus, assure that method <SwEditShell::NumOrNum(..)> // is only called for the intended purpose. - bool bCallNumOrNoNum( false ); + if ( !bDone && rSh.IsSttPara() ) { - if ( !bDone ) + bool bCallNumOrNoNum( false ); + if ( bOnlyBackspaceKey && !rSh.IsNoNum() ) { - if ( bOnlyBackspaceKey && !rSh.IsNoNum() ) - { - bCallNumOrNoNum = true; - } - else if ( !bOnlyBackspaceKey && rSh.IsNoNum() ) + bCallNumOrNoNum = true; + } + else if ( !bOnlyBackspaceKey && rSh.IsNoNum() ) + { + bCallNumOrNoNum = true; + } + else if ( bOnlyBackspaceKey + && rSh.IsSttPara() + && rSh.IsEndPara() + && !rSh.HasSelection() ) + { + const SwNumRule* pCurrNumRule( rSh.GetCurNumRule() ); + if ( pCurrNumRule != NULL + && pCurrNumRule != rSh.GetOutlineNumRule() ) { bCallNumOrNoNum = true; } - else if ( bOnlyBackspaceKey && - rSh.IsSttPara() && rSh.IsEndPara() && - !rSh.HasSelection() ) - { - const SwNumRule* pCurrNumRule( rSh.GetCurNumRule() ); - if ( pCurrNumRule && - pCurrNumRule != rSh.GetOutlineNumRule() ) - { - bCallNumOrNoNum = true; - } - } + } + if ( bCallNumOrNoNum + && rSh.NumOrNoNum( !bOnlyBackspaceKey, sal_True ) ) + { + eKeyState = KS_NumOrNoNum; } } - if ( bCallNumOrNoNum && - rSh.NumOrNoNum( !bOnlyBackspaceKey, sal_True ) ) - { - eKeyState = KS_NumOrNoNum; - } - // <-- } } break; @@ -1960,9 +1957,9 @@ KEYINPUT_CHECKTABLE_INSDEL: GetView().GetViewFrame()->GetDispatcher()->Execute( FN_GOTO_NEXT_INPUTFLD ); eKeyState = KS_Ende; } - else - if( rSh.GetCurNumRule() && rSh.IsSttOfPara() && - !rSh.HasReadonlySel() ) + else if( rSh.GetCurNumRule() + && rSh.IsSttOfPara() + && !rSh.HasReadonlySel() ) { if ( rSh.IsFirstOfNumRule() && numfunc::ChangeIndentOnTabAtFirstPosOfFirstListItem() ) @@ -2019,8 +2016,9 @@ KEYINPUT_CHECKTABLE_INSDEL: GetView().GetViewFrame()->GetDispatcher()->Execute( FN_GOTO_PREV_INPUTFLD ); eKeyState = KS_Ende; } - else if( rSh.GetCurNumRule() && rSh.IsSttOfPara() && - !rSh.HasReadonlySel() ) + else if( rSh.GetCurNumRule() + && rSh.IsSttOfPara() + && !rSh.HasReadonlySel() ) { if ( rSh.IsFirstOfNumRule() && numfunc::ChangeIndentOnTabAtFirstPosOfFirstListItem() ) @@ -2308,10 +2306,11 @@ KEYINPUT_CHECKTABLE_INSDEL: } eKeyState = KS_Ende; } - else if(!rSh.HasReadonlySel()) + else if ( !rSh.HasReadonlySel() + || rSh.CrsrInsideInputFld() ) { - sal_Bool bIsNormalChar = GetAppCharClass().isLetterNumeric( - String( aCh ), 0 ); + const sal_Bool bIsNormalChar = + GetAppCharClass().isLetterNumeric( String( aCh ), 0 ); if( bChkInsBlank && bIsNormalChar && (aInBuffer.Len() || !rSh.IsSttPara() || !rSh.IsEndPara() )) { @@ -2321,9 +2320,8 @@ KEYINPUT_CHECKTABLE_INSDEL: aInBuffer.Expand( aInBuffer.Len() + 1, ' ' ); } - - sal_Bool bIsAutoCorrectChar = SvxAutoCorrect::IsAutoCorrectChar( aCh ); - sal_Bool bRunNext = pACorr && pACorr->HasRunNext(); + const sal_Bool bIsAutoCorrectChar = SvxAutoCorrect::IsAutoCorrectChar( aCh ); + const sal_Bool bRunNext = pACorr != NULL && pACorr->HasRunNext(); if( !aKeyEvent.GetRepeat() && pACorr && ( bIsAutoCorrectChar || bRunNext ) && pACfg->IsAutoFmtByInput() && (( pACorr->IsAutoCorrFlag( ChgWeightUnderl ) && @@ -3399,9 +3397,9 @@ void SwEditWin::MouseButtonDown(const Mo const int nSelType = rSh.GetSelectionType(); // Check in general, if an object is selectable at given position. // Thus, also text fly frames in background become selectable via Ctrl-Click. - if ( nSelType & nsSelectionType::SEL_OLE || - nSelType & nsSelectionType::SEL_GRF || - rSh.IsObjSelectable( aDocPos ) ) + if ( ( nSelType & nsSelectionType::SEL_OLE ) + || ( nSelType & nsSelectionType::SEL_GRF ) + || rSh.IsObjSelectable( aDocPos ) ) { MV_KONTEXT( &rSh ); if( !rSh.IsFrmSelected() ) Modified: openoffice/trunk/main/sw/source/ui/shells/basesh.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/ui/shells/basesh.cxx?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/ui/shells/basesh.cxx (original) +++ openoffice/trunk/main/sw/source/ui/shells/basesh.cxx Thu Feb 20 11:01:04 2014 @@ -1541,11 +1541,16 @@ void SwBaseShell::GetState( SfxItemSet & rSet.Put(SfxBoolItem(nWhich, bDisable)); } break; - case FN_BACKSPACE: - case SID_DELETE: - if (rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0) - rSet.DisableItem( nWhich ); - break; + + case FN_BACKSPACE: + case SID_DELETE: + if ( ( rSh.HasReadonlySel() && !rSh.CrsrInsideInputFld() ) + || rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT ) != 0 ) + { + rSet.DisableItem( nWhich ); + } + break; + case SID_CONTOUR_DLG: { sal_Bool bParentCntProt = 0 != rSh.IsSelObjProtected(FLYPROTECT_CONTENT|FLYPROTECT_PARENT ); Modified: openoffice/trunk/main/sw/source/ui/shells/textsh1.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/ui/shells/textsh1.cxx?rev=1570146&r1=1570145&r2=1570146&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/ui/shells/textsh1.cxx (original) +++ openoffice/trunk/main/sw/source/ui/shells/textsh1.cxx Thu Feb 20 11:01:04 2014 @@ -1629,6 +1629,16 @@ void SwTextShell::GetState( SfxItemSet & } break; + + case FN_INSERT_BREAK: + if ( rSh.HasReadonlySel() + && !rSh.CrsrInsideInputFld() ) + { + rSet.DisableItem( nWhich ); + } + break; + + case FN_INSERT_BREAK_DLG: case FN_INSERT_COLUMN_BREAK: case FN_INSERT_PAGEBREAK: