From 11c511b99973771cf5a434cb0e5c34b803f13d4f Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 12 Apr 2009 03:28:39 +0000 Subject: [PATCH] Make BListView's doubleclick handling a bit more sane. Should fix ticket #3724. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30131 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/ListView.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/kits/interface/ListView.cpp b/src/kits/interface/ListView.cpp index 0eecf2a9c3..2a475dca88 100644 --- a/src/kits/interface/ListView.cpp +++ b/src/kits/interface/ListView.cpp @@ -30,6 +30,7 @@ struct track_data { int32 item_index; bool was_selected; bool try_drag; + bigtime_t last_click_time; }; static property_info sProperties[] = { @@ -310,20 +311,28 @@ BListView::MouseDown(BPoint point) // If the user double (or more) clicked within the current selection, // we don't change the selection but invoke the selection. - int32 clicks; - if (message->FindInt32("clicks", &clicks) == B_OK && clicks > 1 - && index >= fFirstSelected && index <= fLastSelected) { + bigtime_t clickSpeed = 0; + get_click_speed(&clickSpeed); + bool multipleClick = system_time() - fTrack->last_click_time < clickSpeed + && point == fTrack->drag_start; + + + if (multipleClick && index >= fFirstSelected && index <= fLastSelected) { + printf("Invoking item %ld\n", index); Invoke(); return; } int32 modifiers; message->FindInt32("modifiers", &modifiers); - - fTrack->drag_start = point; - fTrack->item_index = index; - fTrack->was_selected = index >= 0 ? ItemAt(index)->IsSelected() : false; - fTrack->try_drag = true; + + if (!multipleClick) { + fTrack->drag_start = point; + fTrack->last_click_time = system_time(); + fTrack->item_index = index; + fTrack->was_selected = index >= 0 ? ItemAt(index)->IsSelected() : false; + fTrack->try_drag = true; + } if (index > -1) { if (fListType == B_MULTIPLE_SELECTION_LIST) {