diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-03-10 14:46:05 +0100 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-03-10 14:51:10 +0100 |
commit | e5e2405bbb81fe8700a11b015784649e29f8fe7f (patch) | |
tree | 2397d8dac959d663481d8a984f602e64f7a17527 /sc | |
parent | d718d02c1e9f518c393fd9dd5a5c841dffacc696 (diff) |
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/ui/drawfunc/fusel.cxx | 28 | ||||
-rw-r--r-- | sc/source/ui/drawfunc/futext.cxx | 41 |
2 files changed, 54 insertions, 15 deletions
diff --git a/sc/source/ui/drawfunc/fusel.cxx b/sc/source/ui/drawfunc/fusel.cxx index 4968f15e47c0..a3568b0992fb 100644 --- a/sc/source/ui/drawfunc/fusel.cxx +++ b/sc/source/ui/drawfunc/fusel.cxx @@ -53,6 +53,8 @@ // Maximal erlaubte Mausbewegung um noch Drag&Drop zu starten //! fusel,fuconstr,futext - zusammenfassen! #define SC_MAXDRAGMOVE 3 +// Min necessary mouse motion for normal dragging +#define SC_MINDRAGMOVE 2 // ----------------------------------------------------------------------- @@ -381,11 +383,14 @@ sal_Bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt) sal_Bool bReturn = FuDraw::MouseButtonUp(rMEvt); sal_Bool bOle = pViewShell->GetViewFrame()->GetFrame().IsInPlace(); + SdrObject* pObj = NULL; + SdrPageView* pPV = NULL; if (aDragTimer.IsActive() ) { aDragTimer.Stop(); } + sal_uInt16 nDrgLog = sal_uInt16 ( pWindow->PixelToLogic(Size(SC_MINDRAGMOVE,0)).Width() ); Point aPnt( pWindow->PixelToLogic( rMEvt.GetPosPixel() ) ); bool bCopy = false; @@ -416,7 +421,7 @@ sal_Bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt) for ( sal_uLong i = 0; i < nMarkCount; ++i ) { SdrMark* pMark = rSdrMarkList.GetMark( i ); - SdrObject* pObj = ( pMark ? pMark->GetMarkedSdrObj() : NULL ); + pObj = ( pMark ? pMark->GetMarkedSdrObj() : NULL ); if ( pObj ) { ScChartHelper::AddRangesIfProtectedChart( aProtectedChartRangesVector, pDocument, pObj ); @@ -426,6 +431,21 @@ sal_Bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt) bCopy = true; } + if (!rMEvt.IsShift() && !rMEvt.IsMod1() && !rMEvt.IsMod2() && + Abs(aPnt.X() - aMDPos.X()) < nDrgLog && + Abs(aPnt.Y() - aMDPos.Y()) < nDrgLog) + { + /************************************************************* + * If a user wants to click on an object in front of a marked + * one, he releases the mouse button immediately + **************************************************************/ + if (pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER | SDRSEARCH_BEFOREMARK)) + { + pView->UnmarkAllObj(); + pView->MarkObj(pObj,pPV,false,false); + return (sal_True); + } + } pView->EndDragObj( rMEvt.IsMod1() ); pView->ForceMarkedToAnotherPage(); @@ -433,7 +453,7 @@ sal_Bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt) if (rMarkList.GetMarkCount() == 1) { SdrMark* pMark = rMarkList.GetMark(0); - SdrObject* pObj = pMark->GetMarkedSdrObj(); + pObj = pMark->GetMarkedSdrObj(); FuPoor* pPoor = pViewShell->GetViewData()->GetView()->GetDrawFuncPtr(); FuText* pText = static_cast<FuText*>(pPoor); pText->StopDragMode(pObj ); @@ -458,7 +478,7 @@ sal_Bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt) bool bFound = false; for( sal_uLong nIdx = 0; !bFound && (nIdx < nCount); ++nIdx ) { - SdrObject* pObj = rMarkList.GetMark( nIdx )->GetMarkedSdrObj(); + pObj = rMarkList.GetMark( nIdx )->GetMarkedSdrObj(); bFound = ScDrawLayer::IsNoteCaption( pObj ); if( bFound ) { @@ -494,7 +514,7 @@ sal_Bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt) if (rMarkList.GetMarkCount() == 1) { SdrMark* pMark = rMarkList.GetMark(0); - SdrObject* pObj = pMark->GetMarkedSdrObj(); + pObj = pMark->GetMarkedSdrObj(); // aktivieren nur, wenn die Maus auch (noch) ueber dem // selektierten Objekt steht diff --git a/sc/source/ui/drawfunc/futext.cxx b/sc/source/ui/drawfunc/futext.cxx index 71e4561e2bd6..61fdf0a97df6 100644 --- a/sc/source/ui/drawfunc/futext.cxx +++ b/sc/source/ui/drawfunc/futext.cxx @@ -125,6 +125,7 @@ sal_Bool FuText::MouseButtonDown(const MouseEvent& rMEvt) { // remember button state for creation of own MouseEvents SetMouseButtonCode(rMEvt.GetButtons()); + sal_Bool bStraightEnter = true; if ( pView->MouseButtonDown(rMEvt, pWindow) ) return (sal_True); // Event von der SdrView ausgewertet @@ -132,7 +133,13 @@ sal_Bool FuText::MouseButtonDown(const MouseEvent& rMEvt) if ( pView->IsTextEdit() ) { if( !IsSizingOrMovingNote(rMEvt) ) + { StopEditMode(); // Danebengeklickt, Ende mit Edit + pView->UnmarkAll(); + bStraightEnter = false; + ScViewData& rViewData = *pViewShell->GetViewData(); + rViewData.GetDispatcher().Execute(aSfxRequest.GetSlot(), SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD); + } pView->SetCreateMode(); } @@ -301,18 +308,30 @@ sal_Bool FuText::MouseButtonDown(const MouseEvent& rMEvt) } else { - /********************************************************** - * Objekt erzeugen - **********************************************************/ - // Hack to align object to nearest grid position where object - // would be anchored ( if it were cell anchored ) - // Get grid offset for current position ( note: aPnt is - // also adjusted ) - Point aGridOff = CurrentGridSyncOffsetAndPos( aMDPos ); - - bool bRet = pView->BegCreateObj(aMDPos, (OutputDevice*) NULL); - if ( bRet ) + if (bStraightEnter)//Hack for that silly idea that creating text fields is inside the text routine + { + /********************************************************** + * Objekt erzeugen + **********************************************************/ + // Hack to align object to nearest grid position where object + // would be anchored ( if it were cell anchored ) + // Get grid offset for current position ( note: aPnt is + // also adjusted ) + Point aGridOff = CurrentGridSyncOffsetAndPos( aMDPos ); + + bool bRet = pView->BegCreateObj(aMDPos, (OutputDevice*) NULL); + if ( bRet ) pView->GetCreateObj()->SetGridOffset( aGridOff ); + } + else if (pView->PickObj(aMDPos, pView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER | SDRSEARCH_BEFOREMARK)) + { + pView->UnmarkAllObj(); + pView->MarkObj(pObj,pPV,false,false); + + pHdl=pView->PickHandle(aMDPos); + pView->BegDragObj(aMDPos, (OutputDevice*) NULL, pHdl); + return(sal_True); + } } } } |