a first and really naive implementation of drag&drop support, no visuals yet... Axel, no worries I'm going to clean this up and remove stuff from EventDispatcher again...

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15417 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2005-12-08 12:13:22 +00:00
parent 3f0aa1427c
commit af43bb3c94
2 changed files with 61 additions and 26 deletions
+27 -3
View File
@@ -868,11 +868,21 @@ BWindow::DispatchMessage(BMessage *msg, BHandler *target)
msg->FindPoint("be:view_where", &where);
msg->FindInt32("buttons", (int32 *)&buttons);
msg->FindInt32("be:transit", (int32 *)&transit);
BMessage* dragMessage = NULL;
if (msg->HasMessage("be:drag_message")) {
dragMessage = new BMessage();
if (msg->FindMessage("be:drag_message", dragMessage) != B_OK) {
delete dragMessage;
dragMessage = NULL;
}
}
if (BView *view = dynamic_cast<BView *>(target))
view->MouseMoved(where, transit, NULL);
view->MouseMoved(where, transit, dragMessage);
else
target->MessageReceived(msg);
delete dragMessage;
break;
}
@@ -976,6 +986,20 @@ BWindow::DispatchMessage(BMessage *msg, BHandler *target)
msg->SendReply(B_MESSAGE_NOT_UNDERSTOOD);
break;
}
case _MESSAGE_DROPPED_:
{
if (fLastMouseMovedView)
target = fLastMouseMovedView;
uint32 originalWhat;
if (msg->FindInt32("_original_what", (int32*)&originalWhat) == B_OK) {
msg->what = originalWhat;
msg->RemoveName("_original_what");
}
BLooper::DispatchMessage(msg, target);
break;
}
default:
BLooper::DispatchMessage(msg, target);
@@ -2387,8 +2411,8 @@ BWindow::_AdoptResize()
// saves us some server communication, as the server
// does the same with our views on its side.
int32 deltaWidth = fFrame.Width() - fTopView->Bounds().Width();
int32 deltaHeight = fFrame.Height() - fTopView->Bounds().Height();
int32 deltaWidth = (int32)(fFrame.Width() - fTopView->Bounds().Width());
int32 deltaHeight = (int32)(fFrame.Height() - fTopView->Bounds().Height());
if (deltaWidth == 0 && deltaHeight == 0)
return;