diff -cNr old/sc/source/ui/drawfunc/fusel2.cxx new/sc/source/ui/drawfunc/fusel2.cxx *** old/sc/source/ui/drawfunc/fusel2.cxx Tue Nov 14 23:52:32 2006 --- new/sc/source/ui/drawfunc/fusel2.cxx Wed Jul 25 14:00:10 2007 *************** *** 53,58 **** --- 53,62 ---- #include "detfunc.hxx" #include "futext.hxx" #include "sc.hrc" + #include "attrib.hxx" + #include "scitems.hxx" + #include "userdat.hxx" + #include "drwlayer.hxx" // ----------------------------------------------------------------------- *************** *** 130,135 **** --- 134,140 ---- return FALSE; SdrObject* pFoundObj = NULL; + ScAddress aTabPos; SdrObjListIter aIter( *pPV->GetObjList(), IM_FLAT ); SdrObject* pObject = aIter.Next(); *************** *** 139,144 **** --- 144,154 ---- && pObject->GetLogicRect().IsInside( rPos ) ) { pFoundObj = pObject; + ScDrawObjData* pData = ScDrawLayer::GetObjDataTab( pObject, pViewShell->GetViewData()->GetTabNo() ); + if( pData ) + { + aTabPos = ScAddress( pData->aStt); + } // keep searching - use the last matching object (on top) } pObject = aIter.Next(); *************** *** 148,159 **** if ( pFoundObj ) { SdrLayer* pLockLayer = NULL; ! ! // Leave the internal note object unlocked - re-lock in ScDrawView::MarkListHasChanged() ! pLockLayer = pDrDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); ! if (pLockLayer && pView->IsLayerLocked(pLockLayer->GetName())) ! pView->SetLayerLocked( pLockLayer->GetName(), FALSE ); ! } return (pFoundObj != NULL); } --- 158,174 ---- if ( pFoundObj ) { SdrLayer* pLockLayer = NULL; ! ScDocument* pDoc = pViewShell->GetViewData()->GetDocument(); ! SfxObjectShell* pDocSh = pViewShell->GetViewData()->GetSfxDocShell(); ! const ScProtectionAttr* pProtAttr = static_cast< const ScProtectionAttr* > (pDoc->GetAttr(aTabPos.Col(), aTabPos.Row(), aTabPos.Tab(), ATTR_PROTECTION ) ); ! BOOL bProtectAttr = pProtAttr->GetProtection() || pProtAttr->GetHideCell() ; ! BOOL bProtectDoc = pDoc->IsTabProtected(aTabPos.Tab()) || pDocSh->IsReadOnly() ; ! BOOL bProtect = bProtectDoc && bProtectAttr ; ! // Leave the internal note object unlocked - re-lock in ScDrawView::MarkListHasChanged() ! pLockLayer = pDrDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); ! if (pLockLayer && pView->IsLayerLocked(pLockLayer->GetName())) ! pView->SetLayerLocked( pLockLayer->GetName(), bProtect ); ! } return (pFoundObj != NULL); } diff -cNr old/sc/source/ui/drawfunc/futext3.cxx new/sc/source/ui/drawfunc/futext3.cxx *** old/sc/source/ui/drawfunc/futext3.cxx Tue Nov 14 23:53:16 2006 --- new/sc/source/ui/drawfunc/futext3.cxx Wed Jul 25 14:12:24 2007 *************** *** 303,308 **** --- 303,311 ---- #include "futext.hxx" #include "docsh.hxx" #include "globstr.hrc" + #include "attrib.hxx" + #include "scitems.hxx" + #include "drawview.hxx" //------------------------------------------------------------------------ *************** *** 363,368 **** --- 366,381 ---- { ScPostIt aNote(pDoc); BOOL bWas = pDoc->GetNote( aTabPos.Col(), aTabPos.Row(), aTabPos.Tab(), aNote ); + if( bWas ) + { + const ScProtectionAttr* pProtAttr = static_cast< const ScProtectionAttr* > (pDoc->GetAttr(aTabPos.Col(), aTabPos.Row(), aTabPos.Tab(), ATTR_PROTECTION ) ); + BOOL bProtectAttr = pProtAttr->GetProtection() || pProtAttr->GetHideCell() ; + BOOL bProtectDoc = pDoc->IsTabProtected(aTabPos.Tab()) || pObjSh->IsReadOnly() ; + BOOL bProtect = bProtectDoc || bProtectAttr ; + SdrLayer* pLockLayer = pDrDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); + if (pLockLayer && !pView->IsLayerLocked(pLockLayer->GetName())) + pView->SetLayerLocked( pLockLayer->GetName(), bProtect ); + } // Ignore if text unchanged. If called from a change in // TextDirection mode then always enter as we need to diff -cNr old/sc/source/ui/view/gridwin.cxx new/sc/source/ui/view/gridwin.cxx *** old/sc/source/ui/view/gridwin.cxx Tue Jun 26 19:51:14 2007 --- new/sc/source/ui/view/gridwin.cxx Wed Jul 25 14:04:10 2007 *************** *** 140,145 **** --- 140,149 ---- #include "compiler.hxx" #include "editable.hxx" #include "fillinfo.hxx" + #include "scitems.hxx" + #include "userdat.hxx" + #include "drwlayer.hxx" + #include "attrib.hxx" // #114409# #ifndef _SV_SALBTYPE_HXX *************** *** 421,432 **** } ! void lcl_UnLockComment( SdrView* pView, SdrPageView* pPV, SdrModel* pDoc, const Point& rPos ) { ! if (!pView && !pPV && !pDoc) return ; SdrObject* pFoundObj = NULL; SdrObjListIter aIter( *pPV->GetObjList(), IM_FLAT ); SdrObject* pObject = aIter.Next(); --- 425,437 ---- } ! void lcl_UnLockComment( SdrView* pView, SdrPageView* pPV, SdrModel* pDrDoc, const Point& rPos ,ScViewData* pViewData ) { ! if (!pView && !pPV && !pDrDoc && !pViewData) return ; SdrObject* pFoundObj = NULL; + ScAddress aTabPos; SdrObjListIter aIter( *pPV->GetObjList(), IM_FLAT ); SdrObject* pObject = aIter.Next(); *************** *** 436,441 **** --- 441,451 ---- && pObject->GetLogicRect().IsInside( rPos ) ) { pFoundObj = pObject; + ScDrawObjData* pData = ScDrawLayer::GetObjDataTab( pObject, pViewData->GetTabNo() ); + if( pData ) + { + aTabPos = ScAddress( pData->aStt); + } } pObject = aIter.Next(); } *************** *** 443,453 **** if ( pFoundObj ) { SdrLayer* pLockLayer = NULL; // Leave the internal note object unlocked - re-lock in ScDrawView::MarkListHasChanged() ! pLockLayer = pDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); if (pLockLayer) ! pView->SetLayerLocked( pLockLayer->GetName(), FALSE ); } } --- 453,469 ---- if ( pFoundObj ) { SdrLayer* pLockLayer = NULL; + ScDocument* pDoc = pViewData->GetDocument(); + SfxObjectShell* pDocSh = pViewData->GetSfxDocShell(); + const ScProtectionAttr* pProtAttr = static_cast< const ScProtectionAttr* > (pDoc->GetAttr(aTabPos.Col(), aTabPos.Row(), aTabPos.Tab(), ATTR_PROTECTION ) ); + BOOL bProtectAttr = pProtAttr->GetProtection() || pProtAttr->GetHideCell() ; + BOOL bProtectDoc = pDoc->IsTabProtected(aTabPos.Tab()) || pDocSh->IsReadOnly() ; + BOOL bProtect = bProtectDoc && bProtectAttr ; // Leave the internal note object unlocked - re-lock in ScDrawView::MarkListHasChanged() ! pLockLayer = pDrDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); if (pLockLayer) ! pView->SetLayerLocked( pLockLayer->GetName(), bProtect ); } } *************** *** 3072,3078 **** pDrawView->UnmarkAllObj(); // Unlock the Internal Layer in order to activate the context menu. // re-lock in ScDrawView::MarkListHasChanged() ! lcl_UnLockComment( pDrawView, pDrawView->GetSdrPageView(), pDrawView->GetModel(), aLogicPos ); bHitDraw = pDrawView->MarkObj( aLogicPos ); // draw shell is activated in MarkListHasChanged } --- 3088,3094 ---- pDrawView->UnmarkAllObj(); // Unlock the Internal Layer in order to activate the context menu. // re-lock in ScDrawView::MarkListHasChanged() ! lcl_UnLockComment( pDrawView, pDrawView->GetSdrPageView(), pDrawView->GetModel(), aLogicPos ,pViewData); bHitDraw = pDrawView->MarkObj( aLogicPos ); // draw shell is activated in MarkListHasChanged }