From 732a176cf3cd4e9c1ff2383b097895dabb427749 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 21 Apr 2013 17:18:44 +0000 Subject: [PATCH] Reset sorting column in generic wxDataViewCtrl properly. We could keep using the column previously used for sorting even after UnsetAsSortKey() was called on it. Ensure that this doesn't happen by resetting the owner wxDataViewCtrl sort column index too. Closes #15160. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73834 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/dataview.h | 2 +- src/generic/datavgen.cpp | 37 +++++++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/include/wx/generic/dataview.h b/include/wx/generic/dataview.h index 70ae97ca0a..fa8ad417c2 100644 --- a/include/wx/generic/dataview.h +++ b/include/wx/generic/dataview.h @@ -70,7 +70,7 @@ public: virtual bool IsSortKey() const { return m_sort; } - virtual void UnsetAsSortKey() { m_sort = false; UpdateDisplay(); } + virtual void UnsetAsSortKey(); virtual void SetSortOrder(bool ascending); diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index def4fb5877..2334084bcd 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -161,6 +161,16 @@ void wxDataViewColumn::UpdateDisplay() } } +void wxDataViewColumn::UnsetAsSortKey() +{ + m_sort = false; + + if ( m_owner ) + m_owner->SetSortingColumnIndex(wxNOT_FOUND); + + UpdateDisplay(); +} + void wxDataViewColumn::SetSortOrder(bool ascending) { if ( !m_owner ) @@ -613,26 +623,33 @@ public: { g_model = GetModel(); - // Avoid sorting while the window is frozen, this allows to quickly add - // many items without resorting after each addition and only resort - // them all at once when the window is finally thawed, see above. - if ( IsFrozen() ) - { - g_column = SortColumn_OnThaw; - return; - } - wxDataViewColumn* col = GetOwner()->GetSortingColumn(); if( !col ) { if (g_model->HasDefaultCompare()) - g_column = SortColumn_Default; + { + // See below for the explanation of IsFrozen() test. + if ( IsFrozen() ) + g_column = SortColumn_OnThaw; + else + g_column = SortColumn_Default; + } else g_column = SortColumn_None; g_asending = true; return; } + + // Avoid sorting while the window is frozen, this allows to quickly add + // many items without resorting after each addition and only resort + // them all at once when the window is finally thawed, see above. + if ( IsFrozen() ) + { + g_column = SortColumn_OnThaw; + return; + } + g_column = col->GetModelColumn(); g_asending = col->IsSortOrderAscending(); } -- 2.45.2