X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ff38281aa1a7576df9e67ac756e7e1087681305e..f3e28ade43cf9d6bd1c158280939870249cc9d2a:/src/generic/treectlg.cpp diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index f2134ffc89..2a4fb555b5 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -716,7 +716,6 @@ BEGIN_EVENT_TABLE(wxGenericTreeCtrl,wxScrolledWindow) EVT_CHAR (wxGenericTreeCtrl::OnChar) EVT_SET_FOCUS (wxGenericTreeCtrl::OnSetFocus) EVT_KILL_FOCUS (wxGenericTreeCtrl::OnKillFocus) - EVT_IDLE (wxGenericTreeCtrl::OnIdle) END_EVENT_TABLE() #if !defined(__WXMSW__) || defined(__WIN16__) || defined(__WXUNIVERSAL__) @@ -2928,7 +2927,7 @@ void wxGenericTreeCtrl::OnRenameCancelled(wxGenericTreeItem *item) le.m_item = (long) item; le.SetEventObject( this ); le.m_label = wxEmptyString; - le.m_editCancelled = FALSE; + le.m_editCancelled = TRUE; GetEventHandler()->ProcessEvent( le ); } @@ -3077,6 +3076,21 @@ void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event ) } else if ( event.LeftUp() ) { + // this facilitates multiple-item drag-and-drop + + if (item && HasFlag(wxTR_MULTIPLE)) + { + wxArrayTreeItemIds selections; + size_t count = GetSelections(selections); + + if (count > 1 && + !event.ControlDown() && + !event.ShiftDown()) + { + SelectItem(item, true, false); + } + } + if ( m_lastOnSame ) { if ( (item == m_current) && @@ -3119,14 +3133,24 @@ void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event ) return; } - // how should the selection work for this event? - bool is_multiple, extended_select, unselect_others; - EventFlagsToSelType(GetWindowStyleFlag(), - event.ShiftDown(), - event.ControlDown(), - is_multiple, extended_select, unselect_others); - SelectItem(item, unselect_others, extended_select); + // clear the previously selected items, if the + // user clicked outside of the present selection. + // otherwise, perform the deselection on mouse-up. + // this allows multiple drag and drop to work. + + if (!IsSelected(item)) + { + // how should the selection work for this event? + bool is_multiple, extended_select, unselect_others; + EventFlagsToSelType(GetWindowStyleFlag(), + event.ShiftDown(), + event.ControlDown(), + is_multiple, extended_select, unselect_others); + + SelectItem(item, unselect_others, extended_select); + } + // For some reason, Windows isn't recognizing a left double-click, // so we need to simulate it here. Allow 200 milliseconds for now. @@ -3158,8 +3182,10 @@ void wxGenericTreeCtrl::OnMouse( wxMouseEvent &event ) } } -void wxGenericTreeCtrl::OnIdle( wxIdleEvent &WXUNUSED(event) ) +void wxGenericTreeCtrl::OnInternalIdle() { + wxWindow::OnInternalIdle(); + // Check if we need to select the root item // because nothing else has been selected. // Delaying it means that we can invoke event handlers