summaryrefslogtreecommitdiff
path: root/sc/source/ui/view
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-06-20 12:13:02 +0100
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2016-06-20 23:30:52 +0000
commitf9b46bbd2446a6c9a0aaab31016536bda4a77294 (patch)
tree7c2f22072ead0ef8272392684fcb4f206fff044f /sc/source/ui/view
parented5dd24cbc5d81ae20a497d02fa968fd7fc7431a (diff)
tdf#96540 dragging between sheets can change the current cursor position
so the at position at time of drop may not be that at the start of the drag. So set the current cursor position to ScTransferObj when the drag starts and retrieve it later Related to: commit ac3b66057ba677903b6de354317417b267be0fa0 Author: Kohei Yoshida <kyoshida@novell.com> Date: Thu Sep 16 11:09:29 2010 +0200 calc-selection-fixed-cursor.diff: Migrated n#502717, i#21869, i#97093, when making selection, don't move the cursor position and commit c433fa0639ccf5caeb0c128c8a3794322e2a1c81 Author: Markus Mohrhard <markus.mohrhard@googlemail.com> Date: Fri Jul 6 02:04:44 2012 +0200 adjust the calculation of the cursor pos if ALT is used, fdo#48869 Change-Id: I6316717c860d999270aa7f0fb50af5f6dfc7efd7 I haven't used SetSourceCursorPos everywhere a ScTransferObj is created, just where its created through a drag event Change-Id: I50c36b4a2ba45426edebc1f1dfa5e262db3c5d03 Reviewed-on: https://gerrit.libreoffice.org/26512 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Diffstat (limited to 'sc/source/ui/view')
-rw-r--r--sc/source/ui/view/gridwin.cxx14
-rw-r--r--sc/source/ui/view/select.cxx1
-rw-r--r--sc/source/ui/view/tabcont.cxx2
3 files changed, 15 insertions, 2 deletions
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 5e46be7fa1cb..6fb3966e55d3 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -4210,8 +4210,18 @@ sal_Int8 ScGridWindow::DropTransferObj( ScTransferObj* pTransObj, SCCOL nDestPos
{
pView->MarkRange( aDest, false );
- SCCOL nDCol = pViewData->GetCurX() - aSource.aStart.Col() + nCorrectCursorPosCol;
- SCROW nDRow = pViewData->GetCurY() - aSource.aStart.Row() + nCorrectCursorPosRow;
+ SCCOL nDCol;
+ SCROW nDRow;
+ if (pTransObj->WasSourceCursorInSelection())
+ {
+ nDCol = pTransObj->GetSourceCursorX() - aSource.aStart.Col() + nCorrectCursorPosCol;
+ nDRow = pTransObj->GetSourceCursorY() - aSource.aStart.Row() + nCorrectCursorPosRow;
+ }
+ else
+ {
+ nDCol = 0;
+ nDRow = 0;
+ }
pView->SetCursor( aDest.aStart.Col() + nDCol, aDest.aStart.Row() + nDRow );
}
diff --git a/sc/source/ui/view/select.cxx b/sc/source/ui/view/select.cxx
index bcceb4a5a4d0..221bfb024d74 100644
--- a/sc/source/ui/view/select.cxx
+++ b/sc/source/ui/view/select.cxx
@@ -196,6 +196,7 @@ void ScViewFunctionSet::BeginDrag()
SCCOL nHandleX = (nPosX >= (SCsCOL) nStartX) ? nPosX - nStartX : 0;
SCROW nHandleY = (nPosY >= (SCsROW) nStartY) ? nPosY - nStartY : 0;
pTransferObj->SetDragHandlePos( nHandleX, nHandleY );
+ pTransferObj->SetSourceCursorPos( pViewData->GetCurX(), pViewData->GetCurY() );
pTransferObj->SetVisibleTab( nTab );
pTransferObj->SetDragSource( pDocSh, rMark );
diff --git a/sc/source/ui/view/tabcont.cxx b/sc/source/ui/view/tabcont.cxx
index 139a4ff7ab8d..6fa034c80165 100644
--- a/sc/source/ui/view/tabcont.cxx
+++ b/sc/source/ui/view/tabcont.cxx
@@ -492,6 +492,8 @@ void ScTabControl::DoDrag( const vcl::Region& /* rRegion */ )
pTransferObj->SetDragSource( pDocSh, aTabMark );
+ pTransferObj->SetSourceCursorPos( pViewData->GetCurX(), pViewData->GetCurY() );
+
vcl::Window* pWindow = pViewData->GetActiveWin();
SC_MOD()->SetDragObject( pTransferObj, nullptr ); // for internal D&D
pTransferObj->StartDrag( pWindow, DND_ACTION_COPYMOVE | DND_ACTION_LINK );