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 Thu Oct 11 11:46:22 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,173 ---- 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 ; 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/futext.cxx new/sc/source/ui/drawfunc/futext.cxx *** old/sc/source/ui/drawfunc/futext.cxx Tue Feb 27 21:13:54 2007 --- new/sc/source/ui/drawfunc/futext.cxx Wed Oct 10 17:32:26 2007 *************** *** 503,536 **** { pView->EndAction(); } ! ! /* aNewPointer = Pointer(POINTER_TEXT); ! pViewShell->SetActivePointer(aNewPointer); ! */ ! ForcePointer(&rMEvt); ! pWindow->ReleaseMouse(); ! ! if ( !pView->AreObjectsMarked() ) ! { ! SdrObject* pObj; ! SdrPageView* pPV; ! ! if ( pView->PickObj(aPnt, pObj, pPV) ) ! { ! if ( pView->MarkObj(aPnt, -2, FALSE, rMEvt.IsMod1()) ) ! { ! UINT16 nSdrObjKind = pObj->GetObjIdentifier(); ! ! if (nSdrObjKind != OBJ_TEXT && ! nSdrObjKind != OBJ_TITLETEXT && ! nSdrObjKind != OBJ_OUTLINETEXT && ! ! pObj->ISA(SdrTextObj) ) ! { ! // pViewShell->GetViewData()->GetDispatcher().Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD); ! } ! } ! } ! } return (bReturn); } --- 503,523 ---- { pView->EndAction(); } ! else if( !pView->IsAction() ) ! { ! pWindow->ReleaseMouse(); ! ! if ( !pView->AreObjectsMarked() && rMEvt.GetClicks() < 2 ) ! { ! pView->MarkObj(aPnt, -2, FALSE, rMEvt.IsMod1()); ! ! SfxDispatcher& rDisp = pViewShell->GetViewData()->GetDispatcher(); ! if ( pView->AreObjectsMarked() ) ! rDisp.Execute(SID_OBJECT_SELECT, SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); ! else ! rDisp.Execute(aSfxRequest.GetSlot(), SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); ! } ! } return (bReturn); } 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 Oct 10 17:31:48 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,377 ---- { ScPostIt aNote(pDoc); BOOL bWas = pDoc->GetNote( aTabPos.Col(), aTabPos.Row(), aTabPos.Tab(), aNote ); + if( bWas ) + { + SdrLayer* pLockLayer = pDrDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); + if (pLockLayer && !pView->IsLayerLocked(pLockLayer->GetName())) + pView->SetLayerLocked( pLockLayer->GetName(), TRUE ); + } // 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 Sep 5 15:19:34 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 }