Author: kirilla Date: 2011-03-12 01:53:30 +0100 (Sat, 12 Mar 2011) New Revision: 40922 Changeset: http://dev.haiku-os.org/changeset/40922 Modified: haiku/trunk/headers/private/locale/MutableLocaleRoster.h haiku/trunk/src/apps/deskbar/BarApp.cpp haiku/trunk/src/kits/locale/MutableLocaleRoster.cpp haiku/trunk/src/kits/tracker/Model.cpp haiku/trunk/src/kits/tracker/Model.h haiku/trunk/src/kits/tracker/Tracker.cpp haiku/trunk/src/kits/tracker/Utilities.cpp haiku/trunk/src/kits/tracker/Utilities.h Log: Localization support for filesystem entries in Tracker and Deskbar (leaf menu). (It appears to work, but is likely incomplete and quite possibly incorrect.) Fix issue with RosterData::Refresh() resulting in a B_LOCALE_CHANGED broadcast, and Deskbar looping. Add a global boolean gLocalizedNamePreferred to avoid calling BLocaleRoster::Default()->IsFilesystemTranslationPreferred() too often from Model instances. Following Tracker code style in libtracker, so as to not mix in too much clean-up. Modified: haiku/trunk/headers/private/locale/MutableLocaleRoster.h =================================================================== --- haiku/trunk/headers/private/locale/MutableLocaleRoster.h 2011-03-11 23:31:11 UTC (rev 40921) +++ haiku/trunk/headers/private/locale/MutableLocaleRoster.h 2011-03-12 00:53:30 UTC (rev 40922) @@ -154,6 +154,8 @@ const BFormattingConventions& conventions); status_t _SetDefaultTimeZone(const BTimeZone& zone); status_t _SetPreferredLanguages(const BMessage* msg); + void _SetFilesystemTranslationPreferred( + bool preferred); status_t _AddDefaultFormattingConventionsToMessage( BMessage* message) const; Modified: haiku/trunk/src/apps/deskbar/BarApp.cpp =================================================================== --- haiku/trunk/src/apps/deskbar/BarApp.cpp 2011-03-11 23:31:11 UTC (rev 40921) +++ haiku/trunk/src/apps/deskbar/BarApp.cpp 2011-03-12 00:53:30 UTC (rev 40922) @@ -61,6 +61,7 @@ #include "PublicCommands.h" #include "ResourceSet.h" #include "Switcher.h" +#include "Utilities.h" BLocker TBarApp::sSubscriberLock; @@ -96,6 +97,9 @@ be_roster->StartWatching(this); + gLocalizedNamePreferred + = BLocaleRoster::Default()->IsFilesystemTranslationPreferred(); + sBarTeamInfoList.MakeEmpty(); BList teamList; @@ -496,6 +500,10 @@ { BLocaleRoster::Default()->Refresh(); + bool localize; + if (message->FindBool("filesys", &localize) == B_OK) + gLocalizedNamePreferred = localize; + BMessenger(fBarWindow->FindView("_deskbar_tv_")).SendMessage( message); // Notify the TimeView that the format has changed and it should @@ -611,8 +619,7 @@ BAppFileInfo appMime(&file); BString name; - if (!BLocaleRoster::Default()->IsFilesystemTranslationPreferred() - || GetLocalizedFileName(*ref, name) != B_OK) + if (!gLocalizedNamePreferred || GetLocalizedFileName(*ref, name) != B_OK) name = ref->name; BarTeamInfo* barInfo = new BarTeamInfo(new BList(), flags, strdup(sig), Modified: haiku/trunk/src/kits/locale/MutableLocaleRoster.cpp =================================================================== --- haiku/trunk/src/kits/locale/MutableLocaleRoster.cpp 2011-03-11 23:31:11 UTC (rev 40921) +++ haiku/trunk/src/kits/locale/MutableLocaleRoster.cpp 2011-03-12 00:53:30 UTC (rev 40922) @@ -306,7 +306,7 @@ if (!lock.IsLocked()) return B_ERROR; - fIsFilesystemTranslationPreferred = preferred; + _SetFilesystemTranslationPreferred(preferred); status_t status = _SaveLocaleSettings(); @@ -510,7 +510,7 @@ bool preferred; if (settings.FindBool(kTranslateFilesystemField, &preferred) == B_OK) - SetFilesystemTranslationPreferred(preferred); + _SetFilesystemTranslationPreferred(preferred); return B_OK; } @@ -672,6 +672,13 @@ } +void +RosterData::_SetFilesystemTranslationPreferred(bool preferred) +{ + fIsFilesystemTranslationPreferred = preferred; +} + + status_t RosterData::_AddDefaultFormattingConventionsToMessage(BMessage* message) const { Modified: haiku/trunk/src/kits/tracker/Model.cpp =================================================================== --- haiku/trunk/src/kits/tracker/Model.cpp 2011-03-11 23:31:11 UTC (rev 40921) +++ haiku/trunk/src/kits/tracker/Model.cpp 2011-03-12 00:53:30 UTC (rev 40922) @@ -95,7 +95,8 @@ fIconFrom(kUnknownSource), fWritable(false), fNode(NULL), - fStatus(B_NO_INIT) + fStatus(B_NO_INIT), + fHasLocalizedName(false) { } @@ -108,7 +109,9 @@ fBaseType(cloneThis.fBaseType), fIconFrom(cloneThis.fIconFrom), fWritable(false), - fNode(NULL) + fNode(NULL), + fLocalizedName(cloneThis.fLocalizedName), + fHasLocalizedName(cloneThis.fHasLocalizedName) { fStatBuf.st_dev = cloneThis.NodeRef()->device; fStatBuf.st_ino = cloneThis.NodeRef()->node; @@ -133,7 +136,8 @@ : fPreferredAppName(NULL), fWritable(false), - fNode(NULL) + fNode(NULL), + fHasLocalizedName(false) { SetTo(dirNode, node, name, open, writable); } @@ -143,7 +147,8 @@ : fPreferredAppName(NULL), fWritable(false), - fNode(NULL) + fNode(NULL), + fHasLocalizedName(false) { SetTo(entry, open, writable); } @@ -155,7 +160,8 @@ fBaseType(kUnknownNode), fIconFrom(kUnknownSource), fWritable(false), - fNode(NULL) + fNode(NULL), + fHasLocalizedName(false) { BEntry entry(ref, traverse); fStatus = entry.InitCheck(); @@ -355,7 +361,11 @@ break; } - return fEntryRef.name; + + if (fHasLocalizedName && gLocalizedNamePreferred) + return fLocalizedName.String(); + else + return fEntryRef.name; } @@ -482,6 +492,9 @@ } #endif + if (gLocalizedNamePreferred) + CacheLocalizedName(); + return fStatus; } @@ -551,6 +564,16 @@ } +void +Model::CacheLocalizedName() +{ + if (GetLocalizedFileName(fEntryRef, fLocalizedName, true) == B_OK) + fHasLocalizedName = true; + else + fHasLocalizedName = false; +} + + static bool HasVectorIconHint(BNode *node) { Modified: haiku/trunk/src/kits/tracker/Model.h =================================================================== --- haiku/trunk/src/kits/tracker/Model.h 2011-03-11 23:31:11 UTC (rev 40921) +++ haiku/trunk/src/kits/tracker/Model.h 2011-03-12 00:53:30 UTC (rev 40922) @@ -209,6 +209,7 @@ void SetupBaseType(); void FinishSettingUpType(); void DeletePreferredAppVolumeNameLinkTo(); + void CacheLocalizedName(); status_t FetchOneQuery(const BQuery *, BHandler *target, BObjectList<BQuery>*, BVolume *); @@ -251,6 +252,8 @@ bool fWritable; BNode *fNode; status_t fStatus; + BString fLocalizedName; + bool fHasLocalizedName; }; Modified: haiku/trunk/src/kits/tracker/Tracker.cpp =================================================================== --- haiku/trunk/src/kits/tracker/Tracker.cpp 2011-03-11 23:31:11 UTC (rev 40921) +++ haiku/trunk/src/kits/tracker/Tracker.cpp 2011-03-12 00:53:30 UTC (rev 40922) @@ -226,6 +226,9 @@ setrlimit(RLIMIT_NOFILE, &rl); fNodeMonitorCount = DEFAULT_MON_NUM; + + gLocalizedNamePreferred + = BLocaleRoster::Default()->IsFilesystemTranslationPreferred(); #ifdef CHECK_OPEN_MODEL_LEAKS InitOpenModelDumping(); @@ -505,6 +508,15 @@ gPeriodicUpdatePoses.DoPeriodicUpdate(true); break; + case B_LOCALE_CHANGED: + { + BLocaleRoster::Default()->Refresh(); + bool localize; + if (message->FindBool("filesys", &localize) == B_OK) + gLocalizedNamePreferred = localize; + break; + } + default: _inherited::MessageReceived(message); break; Modified: haiku/trunk/src/kits/tracker/Utilities.cpp =================================================================== --- haiku/trunk/src/kits/tracker/Utilities.cpp 2011-03-11 23:31:11 UTC (rev 40921) +++ haiku/trunk/src/kits/tracker/Utilities.cpp 2011-03-12 00:53:30 UTC (rev 40922) @@ -1470,6 +1470,9 @@ } +bool gLocalizedNamePreferred; + + /*! \brief Looks up a localized filename in a catalog, using attribute data on the entry. \param ref An entry_ref with an attribute holding data for catalog lookup. Modified: haiku/trunk/src/kits/tracker/Utilities.h =================================================================== --- haiku/trunk/src/kits/tracker/Utilities.h 2011-03-11 23:31:11 UTC (rev 40921) +++ haiku/trunk/src/kits/tracker/Utilities.h 2011-03-12 00:53:30 UTC (rev 40922) @@ -523,6 +523,8 @@ status_t GetAppIconFromAttr(BFile *, BBitmap *, icon_size); status_t GetFileIconFromAttr(BNode *, BBitmap *, icon_size); +extern bool gLocalizedNamePreferred; + status_t GetLocalizedFileName(entry_ref& ref, BString& localizedFileName, bool traverse = false);