[haiku-commits] r40922 - in haiku/trunk: headers/private/locale src/apps/deskbar src/kits/locale src/kits/tracker

  • From: jonas@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 12 Mar 2011 01:53:30 +0100 (CET)

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);
 


Other related posts: