fixed mouse tracking to not initiate a drag after mouse up

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16512 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2006-02-26 17:47:02 +00:00
parent fb39ecb534
commit 10443b3306
+32 -27
View File
@@ -161,10 +161,10 @@ void
BListView::Draw(BRect updateRect) BListView::Draw(BRect updateRect)
{ {
for (int i = 0; i < CountItems(); i++) { for (int i = 0; i < CountItems(); i++) {
BRect item_frame = ItemFrame(i); BRect itemFrame = ItemFrame(i);
if (item_frame.Intersects(updateRect)) if (itemFrame.Intersects(updateRect))
DrawItem(((BListItem*)ItemAt(i)), item_frame); DrawItem(((BListItem*)ItemAt(i)), itemFrame);
} }
} }
@@ -326,6 +326,33 @@ BListView::MouseDown(BPoint point)
} }
} }
// MouseUp
void
BListView::MouseUp(BPoint pt)
{
if (fWidth == 0)
return;
DoMouseMoved(pt);
DoMouseUp(pt);
fTrack->item_index = -1;
fTrack->try_drag = false;
}
// MouseMoved
void
BListView::MouseMoved(BPoint pt, uint32 code, const BMessage *msg)
{
if (fTrack->item_index == -1)
return;
if (_TryInitiateDrag(pt))
return;
DoMouseMoved(pt);
}
// KeyDown // KeyDown
void void
BListView::KeyDown(const char *bytes, int32 numBytes) BListView::KeyDown(const char *bytes, int32 numBytes)
@@ -986,6 +1013,7 @@ BListView::ItemFrame(int32 index)
if (index < 0 || index >= CountItems()) if (index < 0 || index >= CountItems())
return frame; return frame;
// TODO: this is very expensive, the (last) offsets could be cached
for (int32 i = 0; i <= index; i++) { for (int32 i = 0; i <= index; i++) {
frame.top = frame.bottom + 1; frame.top = frame.bottom + 1;
frame.bottom += (float)ceil(ItemAt(i)->Height()); frame.bottom += (float)ceil(ItemAt(i)->Height());
@@ -1040,30 +1068,6 @@ BListView::WindowActivated(bool state)
} }
} }
// MouseUp
void
BListView::MouseUp(BPoint pt)
{
if (fWidth == 0)
return;
DoMouseMoved(pt);
DoMouseUp(pt);
}
// MouseMoved
void
BListView::MouseMoved(BPoint pt, uint32 code, const BMessage *msg)
{
if (fTrack == NULL)
return;
if (_TryInitiateDrag(pt))
return;
DoMouseMoved(pt);
}
// DetachedFromWindow // DetachedFromWindow
void void
BListView::DetachedFromWindow() BListView::DetachedFromWindow()
@@ -1158,6 +1162,7 @@ BListView::_InitObject(list_view_type type)
fScrollView = NULL; fScrollView = NULL;
fTrack = new track_data; fTrack = new track_data;
fTrack->try_drag = false; fTrack->try_drag = false;
fTrack->item_index = -1;
} }
// _FixupScrollBar // _FixupScrollBar