summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Reher <tde@4reher.org>2021-03-01 18:56:22 -0800
committerVincent Reher <tde@4reher.org>2021-03-01 19:00:24 -0800
commit2b38691d608f35c1cff8eccb1f5e9601c21c429d (patch)
treead231461be2a149319b242154fba0fb260ef6e8d
parent21d5444633f76704576e09707df2e50a823994a7 (diff)
downloadtdebase-feature/konq_listview++_14.1.tar.gz
tdebase-feature/konq_listview++_14.1.zip
Fixed problem with "Dictionary Order Sort" wherein that feature wasfeature/konq_listview++_14.1
preventing proper sorting of text sort columns other than FileName. Improved consistency of results of "Dictionary Order Sort" while reducing implementation overhead when option is not checked. Signed-off-by: Vincent Reher <tde@4reher.org>
-rw-r--r--konqueror/listview/konq_listviewitems.cpp68
1 files changed, 40 insertions, 28 deletions
diff --git a/konqueror/listview/konq_listviewitems.cpp b/konqueror/listview/konq_listviewitems.cpp
index 0bdc3cd43..61abceed3 100644
--- a/konqueror/listview/konq_listviewitems.cpp
+++ b/konqueror/listview/konq_listviewitems.cpp
@@ -92,32 +92,31 @@ void KonqListViewItem::updateContents()
//--- Retrieve user-set extended sorting options:
- bool Display_Directories_1st =
+ bool Group_Directories_First =
m_pListViewWidget->m_pBrowserView->m_pProps->isDirsFirst() ;
- bool Display_Hidden_1st =
+ bool Group_Hidden_First =
m_pListViewWidget->m_pBrowserView->m_pProps->isHiddenFirst() ;
- bool Sort_Dictionary_Order =
+ bool Dictionary_Order_Sort =
m_pListViewWidget->m_pBrowserView->m_pProps->isDictionaryOrder() ;
- // The original TDE order is: .dir (0), dir (1), .file (2), file (3)
+ // The default TDE order is: .dir (0), dir (1), .file (2), file (3)
- //--- Implement option "Display_Directories_1st"
+ //--- Implement sort option "Group Directories First"
- if ( Display_Directories_1st )
+ if ( Group_Directories_First )
sortChar = S_ISDIR( m_fileitem->mode() ) ? 1 : 3;
else
sortChar = 3; // Effectively disable grouping directories first
- //--- Implement option "Display_Hidden_1st"
+ //--- Implement sort option "Group Hidden First"
- if ( Display_Hidden_1st && m_fileitem->text()[0] == '.' )
+ if ( Group_Hidden_First && m_fileitem->text()[0] == '.' )
--sortChar; // Effectively disable grouping hidden first
- //--- Implement option "Sort_Dictionary_Order"
+ //--- Implement option "Dictionary Order Sort"
- sortString = text(0) ; //-or: sortString = m_fileitem->text() ;
-
- if ( Sort_Dictionary_Order ) {
+ sortString = "" ;
+ if ( Dictionary_Order_Sort && text(0).length() > 1 ) {
/*
* Objective is to ignore non-alphnumeric leading characters
* but append them as trailing characters to ensure that there
@@ -125,16 +124,19 @@ void KonqListViewItem::updateContents()
* being identical strings. Example: a, " a" b, +a, ~a will end
* up sorting to a, +a, " a", ~a, b
*/
- TQChar Our1stChar = sortString[0] ;
- if ( ! Our1stChar.isLetterOrNumber() && sortString.length() > 1 )
- {
+ TQChar Our1stChar = text(0)[0] ;
+ if ( ! Our1stChar.isLetterOrNumber() ) {
+ sortString = text(0).mid(1) ;
sortString.append(Our1stChar) ;
- sortString.remove(0,1) ;
#ifdef DEBUG_SORTFUNCS
kdWarning() << "Stripping non-alphanumeric leading character '" <<
Our1stChar << "' yields sort key '" << sortString << "'" << endl ;
#endif
}
+ else {
+ sortString = text(0).left(-1) ;
+ sortString.append( TQChar(0) ) ;
+ }
}
#ifdef DEBUG_SORTFUNCS
kdWarning() << "Sortkey ='" << sortString << "'" << endl ;
@@ -355,24 +357,33 @@ int KonqBaseListViewItem::compare( TQListViewItem* item, int col, bool ascending
//--- Begin: listview sorting enhancements
//----------------------------------------
- #ifdef DEBUG_SORTFUNCS
- kdWarning() << "Comparing '" << sortString
- << "' with '" << k->sortString << "'" << endl ;
- #endif
-
+ if ( col == 0 && ! sortString.isEmpty() ) {
+ /* We are here because sort column is FileName
+ and "Dictionary Order Sort" is in effect
+ */
+ #ifdef DEBUG_SORTFUNCS
+ kdWarning() << "Comparing '" << sortString
+ << "' with '" << k->sortString << "'" << endl ;
+ #endif
+
+ /* FIXME: The combination of settings "Dictionary Order Sort" = ON
+ and "Case Insensitive Sort" = OFF produces a seemingly odd and
+ potentially undesirable outcome. Consider ignoring the latter
+ setting and always doing the case-insensitive sort.
+ */
+ if ( m_pListViewWidget->caseInsensitiveSort() )
+ return sortString.lower().localeAwareCompare( k->sortString.lower() );
+ else {
+ return m_pListViewWidget->m_pSettings->caseSensitiveCompare( sortString, k->sortString );
+ }
+ }
/* Original code:
+ */
if ( m_pListViewWidget->caseInsensitiveSort() )
return text( col ).lower().localeAwareCompare( k->text( col ).lower() );
else {
return m_pListViewWidget->m_pSettings->caseSensitiveCompare( text( col ), k->text( col ) );
}
- */
-
- if ( m_pListViewWidget->caseInsensitiveSort() )
- return sortString.lower().localeAwareCompare( k->sortString.lower() );
- else {
- return m_pListViewWidget->m_pSettings->caseSensitiveCompare( sortString, k->sortString );
- }
//----------------------------------------
//--- End: listview sorting enhancements
@@ -478,6 +489,7 @@ const char* KonqBaseListViewItem::makeAccessString( const mode_t mode)
KonqBaseListViewItem::KonqBaseListViewItem(KonqBaseListViewWidget *_listViewWidget, KFileItem* _fileitem)
:TDEListViewItem(_listViewWidget)
,sortChar(0)
+,sortString() // listview sorting enhancement
,m_bDisabled(false)
,m_bActive(false)
,m_fileitem(_fileitem)