This should really fix #3393. Apparently I'm more sleep-deprived than I thought.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29096 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rene Gollent
2009-01-31 03:21:23 +00:00
parent fee5fc34ff
commit b8d65a49d8
+13 -12
View File
@@ -4360,7 +4360,7 @@ BPoseView::MoveSelectionInto(Model *destFolder, BContainerWindow *srcWindow,
void void
BPoseView::MoveSelectionInto(Model *destFolder, BContainerWindow *srcWindow, BPoseView::MoveSelectionInto(Model *destFolder, BContainerWindow *srcWindow,
BContainerWindow *destWindow, uint32 buttons, BPoint loc, bool forceCopy, BContainerWindow *destWindow, uint32 buttons, BPoint loc, bool forceCopy,
bool forceMove, bool createLink, bool relativeLink) bool forceMove, bool createLink, bool relativeLink, BPoint clickPt, bool dropOnGrid)
{ {
AutoLock<BWindow> lock(srcWindow); AutoLock<BWindow> lock(srcWindow);
if (!lock) if (!lock)
@@ -4404,8 +4404,7 @@ BPoseView::MoveSelectionInto(Model *destFolder, BContainerWindow *srcWindow,
if (targetView->ViewMode() == kListMode) // can't move in list view if (targetView->ViewMode() == kListMode) // can't move in list view
return; return;
BPoint delta = loc - clickPt;
bool dropOnGrid = (modifiers() & B_COMMAND_KEY) != 0;
int32 count = targetView->fSelectionList->CountItems(); int32 count = targetView->fSelectionList->CountItems();
for (int32 index = 0; index < count; index++) { for (int32 index = 0; index < count; index++) {
BPose *pose = targetView->fSelectionList->ItemAt(index); BPose *pose = targetView->fSelectionList->ItemAt(index);
@@ -4415,19 +4414,19 @@ BPoseView::MoveSelectionInto(Model *destFolder, BContainerWindow *srcWindow,
// need to do this because bsearch uses top of pose // need to do this because bsearch uses top of pose
// to locate pose to remove // to locate pose to remove
targetView->RemoveFromVSList(pose); targetView->RemoveFromVSList(pose);
BPoint location (pose->Location() + delta);
BRect oldBounds(pose->CalcRect(targetView)); BRect oldBounds(pose->CalcRect(targetView));
if (dropOnGrid) if (dropOnGrid)
loc = targetView->PinToGrid(loc, targetView->fGrid, targetView->fOffset); location = targetView->PinToGrid(location, targetView->fGrid, targetView->fOffset);
pose->MoveTo(loc, targetView); pose->MoveTo(location, targetView);
targetView->RemoveFromExtent(oldBounds); targetView->RemoveFromExtent(oldBounds);
targetView->AddToExtent(pose->CalcRect(targetView)); targetView->AddToExtent(pose->CalcRect(targetView));
// remove and reinsert pose to keep VSlist sorted // remove and reinsert pose to keep VSlist sorted
targetView->AddToVSList(pose); targetView->AddToVSList(pose);
} }
return; return;
} }
@@ -4521,7 +4520,9 @@ BPoseView::MoveSelectionTo(BPoint dropPt, BPoint clickPt,
return; return;
uint32 buttons = (uint32)window->CurrentMessage()->FindInt32("buttons"); uint32 buttons = (uint32)window->CurrentMessage()->FindInt32("buttons");
MoveSelectionInto(TargetModel(), srcWindow, window, buttons, dropPt, false); bool pinToGrid = (modifiers() & B_COMMAND_KEY) != 0;
MoveSelectionInto(TargetModel(), srcWindow, window, buttons, dropPt,
false, false, false, false, clickPt, pinToGrid);
} }