Skip to content

Commit 6520263

Browse files
Adrienogoffart
Adrien
authored andcommittedApr 24, 2018
Fix #6394
1 parent 9555f8d commit 6520263

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed
 

‎src/gui/navigationpanehelper.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ void NavigationPaneHelper::updateCloudStorageRegistry()
8484

8585
QString clsidStr = folder->navigationPaneClsid().toString();
8686
QString clsidPath = QString() % "Software\\Classes\\CLSID\\" % clsidStr;
87+
QString clsidPathWow64 = QString() % "Software\\Classes\\Wow6432Node\\CLSID\\" % clsidStr;
8788
QString namespacePath = QString() % "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\" % clsidStr;
8889

8990
QString title = folder->shortGuiRemotePathOrAppName();
@@ -98,25 +99,35 @@ void NavigationPaneHelper::updateCloudStorageRegistry()
9899
// Steps taken from: https://msdn.microsoft.com/en-us/library/windows/desktop/dn889934%28v=vs.85%29.aspx
99100
// Step 1: Add your CLSID and name your extension
100101
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPath, QString(), REG_SZ, title);
102+
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPathWow64, QString(), REG_SZ, title);
101103
// Step 2: Set the image for your icon
102104
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPath + QStringLiteral("\\DefaultIcon"), QString(), REG_SZ, iconPath);
105+
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPathWow64 + QStringLiteral("\\DefaultIcon"), QString(), REG_SZ, iconPath);
103106
// Step 3: Add your extension to the Navigation Pane and make it visible
104107
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPath, QStringLiteral("System.IsPinnedToNameSpaceTree"), REG_DWORD, 0x1);
108+
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPathWow64, QStringLiteral("System.IsPinnedToNameSpaceTree"), REG_DWORD, 0x1);
105109
// Step 4: Set the location for your extension in the Navigation Pane
106110
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPath, QStringLiteral("SortOrderIndex"), REG_DWORD, 0x41);
111+
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPathWow64, QStringLiteral("SortOrderIndex"), REG_DWORD, 0x41);
107112
// Step 5: Provide the dll that hosts your extension.
108113
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPath + QStringLiteral("\\InProcServer32"), QString(), REG_EXPAND_SZ, QStringLiteral("%systemroot%\\system32\\shell32.dll"));
114+
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPathWow64 + QStringLiteral("\\InProcServer32"), QString(), REG_EXPAND_SZ, QStringLiteral("%systemroot%\\system32\\shell32.dll"));
109115
// Step 6: Define the instance object
110116
// Indicate that your namespace extension should function like other file folder structures in File Explorer.
111117
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPath + QStringLiteral("\\Instance"), QStringLiteral("CLSID"), REG_SZ, QStringLiteral("{0E5AAE11-A475-4c5b-AB00-C66DE400274E}"));
118+
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPathWow64 + QStringLiteral("\\Instance"), QStringLiteral("CLSID"), REG_SZ, QStringLiteral("{0E5AAE11-A475-4c5b-AB00-C66DE400274E}"));
112119
// Step 7: Provide the file system attributes of the target folder
113120
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPath + QStringLiteral("\\Instance\\InitPropertyBag"), QStringLiteral("Attributes"), REG_DWORD, 0x11);
121+
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPathWow64 + QStringLiteral("\\Instance\\InitPropertyBag"), QStringLiteral("Attributes"), REG_DWORD, 0x11);
114122
// Step 8: Set the path for the sync root
115123
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPath + QStringLiteral("\\Instance\\InitPropertyBag"), QStringLiteral("TargetFolderPath"), REG_SZ, targetFolderPath);
124+
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPathWow64 + QStringLiteral("\\Instance\\InitPropertyBag"), QStringLiteral("TargetFolderPath"), REG_SZ, targetFolderPath);
116125
// Step 9: Set appropriate shell flags
117126
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPath + QStringLiteral("\\ShellFolder"), QStringLiteral("FolderValueFlags"), REG_DWORD, 0x28);
127+
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPathWow64 + QStringLiteral("\\ShellFolder"), QStringLiteral("FolderValueFlags"), REG_DWORD, 0x28);
118128
// Step 10: Set the appropriate flags to control your shell behavior
119129
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPath + QStringLiteral("\\ShellFolder"), QStringLiteral("Attributes"), REG_DWORD, 0xF080004D);
130+
Utility::registrySetKeyValue(HKEY_CURRENT_USER, clsidPathWow64 + QStringLiteral("\\ShellFolder"), QStringLiteral("Attributes"), REG_DWORD, 0xF080004D);
120131
// Step 11: Register your extension in the namespace root
121132
Utility::registrySetKeyValue(HKEY_CURRENT_USER, namespacePath, QString(), REG_SZ, title);
122133
// Step 12: Hide your extension from the Desktop
@@ -137,11 +148,13 @@ void NavigationPaneHelper::updateCloudStorageRegistry()
137148
foreach (auto &clsid, entriesToRemove) {
138149
QString clsidStr = clsid.toString();
139150
QString clsidPath = QString() % "Software\\Classes\\CLSID\\" % clsidStr;
151+
QString clsidPathWow64 = QString() % "Software\\Classes\\Wow6432Node\\CLSID\\" % clsidStr;
140152
QString namespacePath = QString() % "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Desktop\\NameSpace\\" % clsidStr;
141153

142154
qCInfo(lcNavPane) << "Explorer Cloud storage provider: now unused, removing own CLSID" << clsidStr;
143155
#ifdef Q_OS_WIN
144156
Utility::registryDeleteKeyTree(HKEY_CURRENT_USER, clsidPath);
157+
Utility::registryDeleteKeyTree(HKEY_CURRENT_USER, clsidPathWow64);
145158
Utility::registryDeleteKeyTree(HKEY_CURRENT_USER, namespacePath);
146159
Utility::registryDeleteKeyValue(HKEY_CURRENT_USER, QStringLiteral("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel"), clsidStr);
147160
#endif

0 commit comments

Comments
 (0)
Please sign in to comment.