X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5d584acb8824a99b875a90aa48e6e6ccbe88b2ab..6493aacaeb7b22b9fa35c559f7753e9fec0da71f:/src/generic/listctrl.cpp diff --git a/src/generic/listctrl.cpp b/src/generic/listctrl.cpp index 043001015c..50f4ec9c71 100644 --- a/src/generic/listctrl.cpp +++ b/src/generic/listctrl.cpp @@ -412,8 +412,8 @@ class WXDLLEXPORT wxListHeaderWindow : public wxWindow { protected: wxListMainWindow *m_owner; - wxCursor *m_currentCursor; - wxCursor *m_resizeCursor; + const wxCursor *m_currentCursor; + const wxCursor *m_resizeCursor; bool m_isDragging; // column being resized or -1 @@ -2033,6 +2033,8 @@ wxListTextCtrlWrapper::wxListTextCtrlWrapper(wxListMainWindow *owner, m_text->Create(owner, wxID_ANY, m_startValue, wxPoint(rectLabel.x-4,rectLabel.y-4), wxSize(rectLabel.width+11,rectLabel.height+8)); + m_text->SetFocus(); + m_text->PushEventHandler(this); } @@ -2045,7 +2047,7 @@ void wxListTextCtrlWrapper::Finish() m_text->RemoveEventHandler(this); m_owner->FinishEditing(m_text); - delete this; + wxPendingDelete.Append( this ); } } @@ -2087,8 +2089,8 @@ void wxListTextCtrlWrapper::OnChar( wxKeyEvent &event ) break; case WXK_ESCAPE: - Finish(); m_owner->OnRenameCancelled( m_itemEdited ); + Finish(); break; default: @@ -2123,16 +2125,13 @@ void wxListTextCtrlWrapper::OnKillFocus( wxFocusEvent &event ) { if ( !m_finished && !m_aboutToFinish ) { - // We must finish regardless of success, otherwise we'll get - // focus problems: - Finish(); - if ( !AcceptChanges() ) m_owner->OnRenameCancelled( m_itemEdited ); + + Finish(); } - // We must let the native text control handle focus, too, otherwise - // it could have problems with the cursor (e.g., in wxGTK). + // We must let the native text control handle focus event.Skip(); } @@ -2970,7 +2969,7 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event ) // reset the selection and bail out HighlightAll(false); } - + return; } @@ -3260,7 +3259,11 @@ void wxListMainWindow::OnChar( wxKeyEvent &event ) return; } - switch (event.GetKeyCode()) + // don't use m_linesPerPage directly as it might not be computed yet + const int pageSize = GetCountPerPage(); + wxCHECK_RET( pageSize, _T("should have non zero page size") ); + + switch ( event.GetKeyCode() ) { case WXK_UP: if ( m_current > 0 ) @@ -3284,11 +3287,8 @@ void wxListMainWindow::OnChar( wxKeyEvent &event ) case WXK_PAGEUP: { - // we get a floating point exception without this - if (m_linesPerPage == 0) - m_linesPerPage = 1; - - int steps = InReportView() ? m_linesPerPage - 1 : m_current % m_linesPerPage; + int steps = InReportView() ? pageSize - 1 + : m_current % pageSize; int index = m_current - steps; if (index < 0) @@ -3300,13 +3300,9 @@ void wxListMainWindow::OnChar( wxKeyEvent &event ) case WXK_PAGEDOWN: { - // we get a floating point exception without this - if (m_linesPerPage == 0) - m_linesPerPage = 1; - int steps = InReportView() - ? m_linesPerPage - 1 - : m_linesPerPage - (m_current % m_linesPerPage) - 1; + ? pageSize - 1 + : pageSize - (m_current % pageSize) - 1; size_t index = m_current + steps; size_t count = GetItemCount(); @@ -3320,7 +3316,7 @@ void wxListMainWindow::OnChar( wxKeyEvent &event ) case WXK_LEFT: if ( !InReportView() ) { - int index = m_current - m_linesPerPage; + int index = m_current - pageSize; if (index < 0) index = 0; @@ -3331,7 +3327,7 @@ void wxListMainWindow::OnChar( wxKeyEvent &event ) case WXK_RIGHT: if ( !InReportView() ) { - size_t index = m_current + m_linesPerPage; + size_t index = m_current + pageSize; size_t count = GetItemCount(); if ( index >= count ) @@ -4616,13 +4612,7 @@ void wxListMainWindow::SortItems( wxListCtrlCompare fn, long data ) void wxListMainWindow::OnScroll(wxScrollWinEvent& event) { - int cw, ch, vw, vh; - GetVirtualSize(&vw, &vh); - GetClientSize(&cw, &ch); - - if( event.GetOrientation() == wxVERTICAL && ch >= vh) - return; - // update our idea of which lines are shown when we redraw the window the + // update our idea of which lines are shown when we redraw the window the // next time ResetVisibleLinesRange(); @@ -5060,10 +5050,12 @@ wxSize wxGenericListCtrl::GetItemSpacing() const return wxSize(spacing, spacing); } +#if WXWIN_COMPATIBILITY_2_6 int wxGenericListCtrl::GetItemSpacing( bool isSmall ) const { return m_mainWin->GetItemSpacing( isSmall ); } +#endif // WXWIN_COMPATIBILITY_2_6 void wxGenericListCtrl::SetItemTextColour( long item, const wxColour &col ) {