From bd6dcb363fc870e5d539308d55cc1b5f2d777d29 Mon Sep 17 00:00:00 2001 From: 0xffea <0xffea@gmail.com> Date: Mon, 22 Aug 2016 14:47:40 -0700 Subject: [PATCH] Deskbar: item sorting is not locale-sensitive Fix using a global BCollator defined in BarApp. Called static CompareByName() method in TTeamMenu instead of duplicating code, made method public. This comes from a patch by 0xffea for GSoC 2014. A locale aware version of NaturalCompare in WindowMenuItem.cpp is still needed. Fixes #7712 Signed-off-by: John Scipione --- src/apps/deskbar/BarApp.cpp | 2 ++ src/apps/deskbar/BarApp.h | 3 +++ src/apps/deskbar/ExpandoMenuBar.cpp | 11 ++--------- src/apps/deskbar/TeamMenu.cpp | 5 +++-- src/apps/deskbar/TeamMenu.h | 1 - 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/apps/deskbar/BarApp.cpp b/src/apps/deskbar/BarApp.cpp index d196bd8e04..8043fb2f3a 100644 --- a/src/apps/deskbar/BarApp.cpp +++ b/src/apps/deskbar/BarApp.cpp @@ -70,6 +70,8 @@ All rights reserved. #include "tracker_private.h" +BCollator gCollator; + BLocker TBarApp::sSubscriberLock; BList TBarApp::sBarTeamInfoList; BList TBarApp::sSubscribers; diff --git a/src/apps/deskbar/BarApp.h b/src/apps/deskbar/BarApp.h index 362b62db0b..080e7af257 100644 --- a/src/apps/deskbar/BarApp.h +++ b/src/apps/deskbar/BarApp.h @@ -36,6 +36,7 @@ All rights reserved. #define BAR_APP_H +#include #include #include "BarSettings.h" @@ -76,6 +77,8 @@ const int32 kIconCacheCount = (kMaximumIconSize - kMinimumIconSize) // update preferences message constant const uint32 kUpdatePreferences = 'Pref'; +extern BCollator gCollator; + /* --------------------------------------------- */ class BBitmap; diff --git a/src/apps/deskbar/ExpandoMenuBar.cpp b/src/apps/deskbar/ExpandoMenuBar.cpp index cebdaa6b83..3e03debf55 100644 --- a/src/apps/deskbar/ExpandoMenuBar.cpp +++ b/src/apps/deskbar/ExpandoMenuBar.cpp @@ -63,6 +63,7 @@ All rights reserved. #include "ResourceSet.h" #include "ShowHideMenuItem.h" #include "StatusView.h" +#include "TeamMenu.h" #include "TeamMenuItem.h" #include "WindowMenu.h" #include "WindowMenuItem.h" @@ -111,14 +112,6 @@ TExpandoMenuBar::TExpandoMenuBar(TBarView* barView, bool vertical) } -int -TExpandoMenuBar::CompareByName(const void* first, const void* second) -{ - return strcasecmp((*(static_cast(first)))->name, - (*(static_cast(second)))->name); -} - - void TExpandoMenuBar::AttachedToWindow() { @@ -489,7 +482,7 @@ TExpandoMenuBar::BuildItems() } if (settings->sortRunningApps) - fTeamList.SortItems(CompareByName); + fTeamList.SortItems(TTeamMenu::CompareByName); int32 teamCount = fTeamList.CountItems(); for (int32 i = 0; i < teamCount; i++) { diff --git a/src/apps/deskbar/TeamMenu.cpp b/src/apps/deskbar/TeamMenu.cpp index 1851d2b265..9017c6535f 100644 --- a/src/apps/deskbar/TeamMenu.cpp +++ b/src/apps/deskbar/TeamMenu.cpp @@ -65,7 +65,8 @@ TTeamMenu::TTeamMenu() int TTeamMenu::CompareByName(const void* first, const void* second) { - return strcasecmp((*(static_cast(first)))->name, + return gCollator.Compare( + (*(static_cast(first)))->name, (*(static_cast(second)))->name); } @@ -88,7 +89,7 @@ TTeamMenu::AttachedToWindow() float width = gMinimumWindowWidth - iconSize - 4; if (settings->sortRunningApps) - teamList.SortItems(CompareByName); + teamList.SortItems(TTeamMenu::CompareByName); int32 count = teamList.CountItems(); for (int32 i = 0; i < count; i++) { diff --git a/src/apps/deskbar/TeamMenu.h b/src/apps/deskbar/TeamMenu.h index ac3d7cf4a1..0c3ff41c9f 100644 --- a/src/apps/deskbar/TeamMenu.h +++ b/src/apps/deskbar/TeamMenu.h @@ -51,7 +51,6 @@ public: void AttachedToWindow(); void DetachedFromWindow(); -private: static int CompareByName(const void* first, const void* second); };