[haiku-commits] r36587 - haiku/trunk/src/preferences/locale

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 2 May 2010 20:00:20 +0200 (CEST)

Author: axeld
Date: 2010-05-02 20:00:20 +0200 (Sun, 02 May 2010)
New Revision: 36587
Changeset: http://dev.haiku-os.org/changeset/36587/haiku
Ticket: http://dev.haiku-os.org/ticket/5883

Modified:
   haiku/trunk/src/preferences/locale/LocaleWindow.cpp
Log:
* BOutlineListView::SortItemsUnder() and FullListSortItems() does not behave
  as described in the BeBook when oneLevelOnly is false - only
  BListView::SortItems() does ignore the hierarchy. So the work-arounds for
  this are completely unnecessary. Removed now unused compare_list_items().
* The BOutlineListView sorting methods have a different comparison signature
  as the other comparison functions: they point to the items directly. The
  compare_typed_list_items() function did not take this into account, and
  dereferenced them anyway, leading to #5883.


Modified: haiku/trunk/src/preferences/locale/LocaleWindow.cpp
===================================================================
--- haiku/trunk/src/preferences/locale/LocaleWindow.cpp 2010-05-02 17:38:11 UTC 
(rev 36586)
+++ haiku/trunk/src/preferences/locale/LocaleWindow.cpp 2010-05-02 18:00:20 UTC 
(rev 36587)
@@ -36,19 +36,11 @@
 
 
 static int
-compare_list_items(const void* _a, const void* _b)
-{
-       LanguageListItem* a = *(LanguageListItem**)_a;
-       LanguageListItem* b = *(LanguageListItem**)_b;
-       return strcasecmp(a->Text(), b->Text());
-}
-
-
-static int
 compare_typed_list_items(const BListItem* _a, const BListItem* _b)
 {
-       LanguageListItem* a = *(LanguageListItem**)_a;
-       LanguageListItem* b = *(LanguageListItem**)_b;
+       // TODO: sort them using collators.
+       LanguageListItem* a = (LanguageListItem*)_a;
+       LanguageListItem* b = (LanguageListItem*)_b;
        return strcasecmp(a->Text(), b->Text());
 }
 
@@ -87,16 +79,14 @@
 
        // Fill the language list from the LocaleRoster data
        BMessage installedLanguages;
-       if (be_locale_roster->GetInstalledLanguages(&installedLanguages)
-                       == B_OK) {
+       if (be_locale_roster->GetInstalledLanguages(&installedLanguages) == 
B_OK) {
                BString currentLanguageCode;
                BString currentLanguageName;
-               LanguageListItem* lastAddedItem = NULL;
+               LanguageListItem* lastAddedCountryItem = NULL;
 
                for (int i = 0; installedLanguages.FindString("langs",
                                i, &currentLanguageCode) == B_OK; i++) {
                        // Now get an human-readable, localized name for each 
language
-                       // TODO: sort them using collators.
                        BLanguage* currentLanguage;
                        be_locale_roster->GetLanguage(&currentLanguage,
                                currentLanguageCode.String());
@@ -107,26 +97,18 @@
                        LanguageListItem* item = new 
LanguageListItem(currentLanguageName,
                                currentLanguageCode.String());
                        if (currentLanguage->IsCountry()) {
-                               fLanguageListView->AddUnder(item, 
lastAddedItem);
+                               fLanguageListView->AddUnder(item, 
lastAddedCountryItem);
                        } else {
                                // This is a language without country, add it 
at top-level
                                fLanguageListView->AddItem(item);
                                item->SetExpanded(false);
-                               if (lastAddedItem != NULL) {
-                                       
fLanguageListView->SortItemsUnder(lastAddedItem, true,
-                                               compare_typed_list_items);
-                               }
-                               lastAddedItem = item;
+                               lastAddedCountryItem = item;
                        }
 
                        delete currentLanguage;
                }
-               fLanguageListView->SortItemsUnder(lastAddedItem, true,
-                       compare_typed_list_items);
 
-               fLanguageListView->SortItems(compare_list_items);
-                       // see previous comment on sort using collators
-
+               fLanguageListView->FullListSortItems(compare_typed_list_items);
        } else {
                BAlert* myAlert = new BAlert("Error",
                        TR("Unable to find the available languages! You can't 
use this "
@@ -271,7 +253,7 @@
                                }
                                index++;
                        }
-                       fLanguageListView->SortItems(compare_list_items);
+                       
fLanguageListView->FullListSortItems(compare_typed_list_items);
                        be_app_messenger.SendMessage(&update);
                        break;
                }
@@ -320,8 +302,7 @@
                                LanguageListItem* listItem = 
static_cast<LanguageListItem*>
                                        (fPreferredListView->RemoveItem(index));
                                fLanguageListView->AddItem(listItem);
-                               
fLanguageListView->SortItems(compare_list_items);
-                                       // see previous comment on sort using 
collators
+                               
fLanguageListView->FullListSortItems(compare_typed_list_items);
                                
fPreferredListView->Invoke(fMsgPrefLanguagesChanged);
                        }
                        break;


Other related posts:

  • » [haiku-commits] r36587 - haiku/trunk/src/preferences/locale - axeld