[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