OSDN Git Service

Squashed commit of the following:
authorHirami <tomohisa.hirami@nifty.com>
Mon, 19 Mar 2012 11:02:44 +0000 (20:02 +0900)
committerHirami <tomohisa.hirami@nifty.com>
Mon, 19 Mar 2012 11:02:44 +0000 (20:02 +0900)
FIX: On Windows7 and use setup, saving properties are fail

Src/Property.cpp

index 8f29ca2..904873e 100644 (file)
@@ -3,6 +3,7 @@
 #include <tchar.h>\r
 #if defined(PLATFORM_WIN32)\r
 #include <stdio.h>\r
+#include <ShlObj.h>\r
 #endif\r
 #if defined(PLATFORM_BE500)\r
 #include <GetDisk.h>\r
@@ -190,6 +191,12 @@ Property::Property() : pCmdlineAssignedTopDir(NULL), pBookMark(NULL), pSearchHis
        bLoad = FALSE;\r
        bNeedAsk = TRUE;\r
 \r
+       PropListNum *p = propListNum;\r
+       while(p->nPropId != 0xFFFFFFFF) {\r
+               nPropsNum[p->nPropId] = p->nDefault;\r
+               p++;\r
+       }\r
+\r
        for (DWORD i = 0; i < NUM_PROPS_STR; i++) {\r
                pPropsStr[i] = NULL;\r
        }\r
@@ -548,7 +555,6 @@ BOOL Property::LoadDefaultProperties()
 \r
 BOOL Property::Load()\r
 {\r
-       LoadDefaultProperties();\r
        BOOL bResult = LoadProperties();\r
 \r
        // Convert topdir value to repository value\r
@@ -558,8 +564,6 @@ BOOL Property::Load()
                nNumRepos = 2;\r
 \r
                LocalFileRepository *pLocalImpl = new LocalFileRepository();\r
-//             if (!pLocalImpl->Init(TEXT("default"), , pTopDir, bKeepTitle, bKeepCaret, bSafeFileName)) {\r
-               // XXXX : \r
                if (!pLocalImpl->Init(TEXT("default"), MSG_MEMO, pTopDir, FALSE, FALSE, FALSE)) {\r
                        return FALSE;\r
                }\r
@@ -581,12 +585,43 @@ BOOL Property::Load()
        return TRUE;\r
 }\r
 \r
-BOOL Property::LoadProperties()\r
-{\r
+static BOOL GetPropPath(LPTSTR pPath) {\r
        TCHAR pathbuf[MAX_PATH + 1];\r
        TCHAR pathbuf2[MAX_PATH + 1];\r
        GetModuleFileName(NULL, pathbuf, MAX_PATH);\r
        GetFilePath(pathbuf2, pathbuf);\r
+       _tcscpy(pPath, pathbuf2);\r
+\r
+       // check can prop file write?\r
+       _tcscat(pathbuf2, PROP_TMP_FILE_NAME);\r
+       File f;\r
+       if (f.Open(pathbuf2, GENERIC_WRITE, FILE_SHARE_WRITE, CREATE_ALWAYS)) {\r
+               f.Close();\r
+               return TRUE;\r
+       }\r
+\r
+       // It seems be win7 and Tombo.exe's place is "Program Files". Use AppData folder.\r
+       TCHAR appDataPath[MAX_PATH + 1];\r
+       SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, appDataPath);\r
+       _tcscpy(pathbuf2, appDataPath);\r
+\r
+       _tcscat(appDataPath, TEXT("\\Tombo"));\r
+       DWORD attr = GetFileAttributes(appDataPath);\r
+       _tcscpy(pPath, appDataPath);\r
+       _tcscat(pPath, TEXT("\\"));\r
+       if (attr != -1 && (attr & FILE_ATTRIBUTE_DIRECTORY) != 0) return TRUE;\r
+\r
+       // create one\r
+       if (!CreateDirectory(appDataPath, NULL)) return FALSE;\r
+       // OK. use AppData/Tombo\r
+       return TRUE;\r
+}\r
+\r
+BOOL Property::LoadProperties()\r
+{\r
+       TCHAR pathbuf2[MAX_PATH + 1];\r
+       GetPropPath(pathbuf2);\r
+\r
        TString sPropFile;\r
        if (!sPropFile.Join(pathbuf2, PROP_FILE_NAME)) return FALSE;\r
 \r
@@ -902,11 +937,9 @@ BOOL Property::SaveToFile(File *pFile)
 \r
 BOOL Property::Save()\r
 {\r
-\r
-       TCHAR pathbuf[MAX_PATH + 1];\r
        TCHAR pathbuf2[MAX_PATH + 1];\r
-       GetModuleFileName(NULL, pathbuf, MAX_PATH);\r
-       GetFilePath(pathbuf2, pathbuf);\r
+       if (!GetPropPath(pathbuf2)) return FALSE;\r
+\r
        TString sPropFile, sPropFileTmp;\r
        if (!sPropFile.Join(pathbuf2, PROP_FILE_NAME)) return FALSE;\r
        if (!sPropFileTmp.Join(pathbuf2, PROP_TMP_FILE_NAME)) return FALSE;\r