OSDN Git Service

Fix a bug where the choice of the default setting for an application
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Wed, 8 Jun 2011 03:28:32 +0000 (12:28 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Sat, 11 Jun 2011 03:23:12 +0000 (12:23 +0900)
can't be saved once you choose the setting specific to it.

xkeymacs/profile.cpp

index e48a0cd..c71efa1 100644 (file)
@@ -582,6 +582,8 @@ void CProfile::UpdateRegistryData(const BOOL bSaveAndValidate)
                        AfxGetApp()->WriteProfileString(szApplicationName, szEntry, szWindowTextType);\r
                }\r
 \r
+               CString regApp(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA));\r
+               regApp += _T("\\") + szApplicationName;\r
                // on/off\r
                if (bSaveAndValidate) { // retrieve\r
                        for (int nCommandID = 1; nCommandID < MAX_COMMAND; ++nCommandID) {\r
@@ -589,11 +591,9 @@ void CProfile::UpdateRegistryData(const BOOL bSaveAndValidate)
                                if (szEntry.IsEmpty()) {\r
                                        break;\r
                                }\r
-\r
                                HKEY hKey = NULL;\r
-                               CString szSubKey(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA));\r
-                               szSubKey += _T("\\") + szApplicationName + _T("\\") + szEntry;\r
-                               if (RegOpenKeyEx(HKEY_CURRENT_USER, szSubKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {\r
+                               CString regKey = regApp + _T("\\") + szEntry;\r
+                               if (RegOpenKeyEx(HKEY_CURRENT_USER, regKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {\r
                                        // Use registry data\r
                                        TCHAR szKeyBind[128] = {'\0'};\r
                                        DWORD dwKeyBind = sizeof(szKeyBind);\r
@@ -627,9 +627,8 @@ void CProfile::UpdateRegistryData(const BOOL bSaveAndValidate)
                        }\r
                        for (int nFunctionID = 0; nFunctionID < CDotXkeymacs::GetFunctionNumber(); ++nFunctionID) {\r
                                HKEY hKey = NULL;\r
-                               CString szSubKey(MAKEINTRESOURCE(IDS_REGSUBKEY_DATA));\r
-                               szSubKey += _T("\\") + szApplicationName + _T("\\") + CDotXkeymacs::GetFunctionSymbol(nFunctionID);\r
-                               if (RegOpenKeyEx(HKEY_CURRENT_USER, szSubKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {\r
+                               CString regKey = regApp + _T("\\") + CDotXkeymacs::GetFunctionSymbol(nFunctionID);\r
+                               if (RegOpenKeyEx(HKEY_CURRENT_USER, regKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {\r
                                        // Use registry data\r
                                        CDotXkeymacs::ClearKey(nFunctionID, nApplicationID);\r
                                        TCHAR szKeyBind[128] = {'\0'};\r
@@ -696,9 +695,13 @@ void CProfile::UpdateRegistryData(const BOOL bSaveAndValidate)
                // Setting Style\r
                szEntry.LoadString(IDS_REG_ENTRY_DISABLE_XKEYMACS);\r
                if (bSaveAndValidate) { // retrieve\r
-                       int nSettingStyle = SETTING_SPECIFIC;\r
+                       int nSettingStyle = SETTING_DEFAULT;\r
+                       HKEY hKey;\r
                        if (AfxGetApp()->GetProfileInt(szApplicationName, szEntry, 0) != 0) {\r
                                nSettingStyle = SETTING_DISABLE;\r
+                       } else if (RegOpenKeyEx(HKEY_CURRENT_USER, regApp, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {\r
+                               RegCloseKey(hKey);\r
+                               nSettingStyle = SETTING_SPECIFIC;\r
                        }\r
                        m_XkeymacsData[nApplicationID].SetSettingStyle(nSettingStyle);\r
                } else {                                // initialize\r