From 7b333a26f220ab5d5957cd23c2bf03145c7fbffa Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Thu, 25 Sep 2008 15:07:43 +0000 Subject: [PATCH] TODO: [ 1460517 ] Use default settings from HKLM in registry Fixed the following problems: 1) After installing WinMerge, WinMerge's interface language is not Japanese but English. 2) WinMerge icon is not shown on Quick Launch bar. 3) After uninstalling WinMerge, the registry key 'HKEY_CURRENT_USER/Software/Thingamahoochie/WinMerge' is not deleted. 4) and I also noticed that TortoiseCVS and TortoiseSVN integrations have not been worked now. --- Docs/Users/ChangeLog.txt | 2 ++ Installer/InnoSetup/WinMerge.iss | 23 +++++++++++++---------- Src/OptionsInit.cpp | 35 ++++++++++++++++++++++++----------- 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/Docs/Users/ChangeLog.txt b/Docs/Users/ChangeLog.txt index f8babcd49..3f9f82120 100644 --- a/Docs/Users/ChangeLog.txt +++ b/Docs/Users/ChangeLog.txt @@ -18,6 +18,8 @@ WinMerge 2.11.1.5 BugFix: Customized colors weren't used in some areas (#2110218) BugFix: Zip files were extracted into wrong folder (#2110350) BugFix: Case-sensitive regexp search didn't work (#1991259) + BugFix: There were some installer regressions + (eg. Installer didn't create Quick Launch icon) (#1460517) Translation updates: - German (r5934) - Russian (#2067785) diff --git a/Installer/InnoSetup/WinMerge.iss b/Installer/InnoSetup/WinMerge.iss index 53e1e6a3d..5927fbe5f 100755 --- a/Installer/InnoSetup/WinMerge.iss +++ b/Installer/InnoSetup/WinMerge.iss @@ -300,6 +300,7 @@ Name: {app}\MergePlugins\list.txt; Type: files; Check: not IsComponentSelected(' Name: {group}\{cm:UsersGuide}.lnk; Type: files; Check: not IsComponentSelected('Docs') ;This removes the quick launch icon in case the user chooses not to install it after previously having it installed +Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon') Name: {commonappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon') ;This removes the desktop icon in case the user chooses not to install it after previously having it installed @@ -445,9 +446,11 @@ Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Ukrainian.txt; IconFileNa Name: {commondesktop}\WinMerge; Filename: {app}\{code:ExeName}; Tasks: desktopicon ;Quick Launch Icon -Name: {commonappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge; Filename: {app}\{code:ExeName}; Tasks: quicklaunchicon +Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge; Filename: {app}\{code:ExeName}; Tasks: quicklaunchicon [Registry] +Root: HKCU; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty +Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey Root: HKLM; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty Root: HKLM; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey @@ -491,20 +494,20 @@ Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueNa Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 1; Tasks: ShellExtension; Check: not ShellMenuEnabled() ;If WinMerge.exe is installed then we'll automatically configure WinMerge as the differencing application -Root: HKLM; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Diff Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS -Root: HKLM; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: DiffAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS -Root: HKLM; SubKey: Software\TortoiseCVS\Prefs\External Diff Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS -Root: HKLM; SubKey: Software\TortoiseCVS\Prefs\External Diff2 Params; ValueType: string; ValueName: _; ValueData: """%1"" ""%2"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS +Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Diff Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS +Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: DiffAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS +Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS +Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff2 Params; ValueType: string; ValueName: _; ValueData: """%1"" ""%2"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS ;Tells TortoiseCVS to use WinMerge as its differencing application (this happens whether or not Tortoise is current installed, that way ;if it is installed at a later date this will automatically support it) -Root: HKLM; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Merge Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS -Root: HKLM; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: MergeAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS -Root: HKLM; SubKey: Software\TortoiseCVS\Prefs\External Merge Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS -Root: HKLM; SubKey: Software\TortoiseCVS\Prefs\External Merge2 Params; ValueType: string; ValueName: _; ValueData: """%mine"" ""%yours"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS +Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Merge Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS +Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: MergeAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS +Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS +Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge2 Params; ValueType: string; ValueName: _; ValueData: """%mine"" ""%yours"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS ;Set WinMerge as TortoiseSVN diff tool -Root: HKLM; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Diff; ValueData: {app}\{code:ExeName} -e -x -u -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseSVN +Root: HKCU; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Diff; ValueData: {app}\{code:ExeName} -e -x -ub -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseSVN ;Whatever the user chooses at the [Select Setup Language] dialog should also determine what language WinMerge will start up in ;(unless the user already has a startup language specified) diff --git a/Src/OptionsInit.cpp b/Src/OptionsInit.cpp index 616f000c6..8023360c1 100644 --- a/Src/OptionsInit.cpp +++ b/Src/OptionsInit.cpp @@ -16,8 +16,8 @@ // Functions to copy values set by installer from HKLM to HKCU. static void CopyHKLMValues(); -static bool OpenHKLM(HKEY *key); -static bool OpenHKCU(HKEY *key); +static bool OpenHKLM(HKEY *key, LPCTSTR relpath = NULL); +static bool OpenHKCU(HKEY *key, LPCTSTR relpath = NULL); static bool IsFirstRun(HKEY key); static void CopyFromLMtoCU(HKEY lmKey, HKEY cuKey, LPCTSTR valname); static void ResetFirstRun(HKEY key); @@ -235,7 +235,15 @@ static void CopyHKLMValues() { CopyFromLMtoCU(LMKey, CUKey, _T("ContextMenuEnabled")); CopyFromLMtoCU(LMKey, CUKey, _T("Executable")); - CopyFromLMtoCU(LMKey, CUKey, _T("Locale\\LanguageId")); + RegCloseKey(CUKey); + } + RegCloseKey(LMKey); + } + if (OpenHKLM(&LMKey, _T("Locale"))) + { + if (OpenHKCU(&CUKey, _T("Locale"))) + { + CopyFromLMtoCU(LMKey, CUKey, _T("LanguageId")); RegCloseKey(CUKey); } RegCloseKey(LMKey); @@ -245,13 +253,16 @@ static void CopyHKLMValues() /** * @brief Open HKLM registry key. * @param [out] key Pointer to open HKLM key. + * @param [in] relative registry path to open. * @return true if opening succeeded. */ -static bool OpenHKLM(HKEY *key) +static bool OpenHKLM(HKEY *key, LPCTSTR relpath) { + TCHAR valuename[256] = _T("Software\\Thingamahoochie\\WinMerge\\"); + if (relpath) + lstrcat(valuename, relpath); LONG retval = RegOpenKeyEx(HKEY_LOCAL_MACHINE, - _T("Software\\Thingamahoochie\\WinMerge\\"), - 0, KEY_READ, key); + valuename, 0, KEY_READ, key); if (retval == ERROR_SUCCESS) { return true; @@ -263,13 +274,16 @@ static bool OpenHKLM(HKEY *key) * @brief Open HKCU registry key. * Opens the HKCU key for WinMerge. If the key does not exist, creates one. * @param [out] key Pointer to open HKCU key. + * @param [in] relative registry path to open. * @return true if opening succeeded. */ -static bool OpenHKCU(HKEY *key) +static bool OpenHKCU(HKEY *key, LPCTSTR relpath) { + TCHAR valuename[256] = _T("Software\\Thingamahoochie\\WinMerge\\"); + if (relpath) + lstrcat(valuename, relpath); LONG retval = RegOpenKeyEx(HKEY_CURRENT_USER, - _T("Software\\Thingamahoochie\\WinMerge\\"), - 0, KEY_ALL_ACCESS, key); + valuename, 0, KEY_ALL_ACCESS, key); if (retval == ERROR_SUCCESS) { return true; @@ -277,8 +291,7 @@ static bool OpenHKCU(HKEY *key) else if (retval == ERROR_FILE_NOT_FOUND) { retval = RegCreateKeyEx(HKEY_CURRENT_USER, - _T("Software\\Thingamahoochie\\WinMerge\\"), - 0, NULL, 0, KEY_ALL_ACCESS, NULL, key, NULL); + valuename, 0, NULL, 0, KEY_ALL_ACCESS, NULL, key, NULL); if (retval == ERROR_SUCCESS) return true; } -- 2.11.0