[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: [PATCH, 2nd try] fixing sort order in KServiceGroup
From: Oliver Bausinger <bausi () everest ! mathematik ! uni-tuebingen ! de>
Date: 2002-11-19 17:28:58
[Download RAW message or body]
the attached patch changes the key on which the sort occurs to caption() for
KServiceGroups instead of name(). This fixes wrongly sorted lists, e.g.
Kcontrols icon view.
Please review / comment.
Greetings
Bausi
["kservicegroup.cpp.diff" (text/x-diff)]
Index: kservicegroup.cpp
===================================================================
RCS file: /home/kde/kdelibs/kio/kio/kservicegroup.cpp,v
retrieving revision 1.24
diff -u -3 -p -r1.24 kservicegroup.cpp
--- kservicegroup.cpp 2002/07/10 00:54:31 1.24
+++ kservicegroup.cpp 2002/11/19 17:24:28
@@ -225,28 +225,43 @@ KServiceGroup::entries(bool sort, bool e
KSortableValueList<SPtr,QCString> slist;
KSortableValueList<SPtr,QCString> glist;
+ QString sortField;
for (List::ConstIterator it(group->m_serviceList.begin()); it != group->m_serviceList.end(); ++it)
{
// Choose the right list
KSortableValueList<SPtr,QCString> & list = (*it)->isType(KST_KServiceGroup) ? glist : slist;
- QCString key( (*it)->name().length() * 4 + 1 );
+
+ // service are sorted by name(), groups by caption(), because for groups
+ // name is the entryPath
+ if( (*it)->isType(KST_KServiceGroup) )
+ {
+ KSycocaEntry *e = (*it);
+ KServiceGroup *p = static_cast<KServiceGroup *>(e);
+ sortField = p->caption();
+ }
+ else
+ {
+ sortField = (*it)->name();
+ }
+
+ QCString key( sortField.length() * 4 + 1 );
// strxfrm() crashes on Solaris
#ifndef USE_SOLARIS
// maybe it'd be better to use wcsxfrm() where available
- size_t ln = strxfrm( key.data(), (*it)->name().local8Bit().data(), key.size());
+ size_t ln = strxfrm( key.data(), sortField.local8Bit().data(), key.size());
if( ln != size_t( -1 ))
{
if( ln >= key.size())
{ // didn't fit?
key.resize( ln + 1 );
- if( strxfrm( key.data(), (*it)->name().local8Bit().data(), key.size()) == size_t( -1 ))
- key = (*it)->name().local8Bit();
+ if( strxfrm( key.data(), sortField.local8Bit().data(), key.size()) == size_t( -1 ))
+ key = sortField.local8Bit();
}
}
else
#endif
{
- key = (*it)->name().local8Bit();
+ key = sortField.local8Bit();
}
list.insert(key,SPtr(*it));
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic