mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-12 16:23:07 -07:00
Fix a bug with highlighting selected file on Windows. Closes #3185.
This commit is contained in:
parent
f3c3912923
commit
e937344761
1 changed files with 27 additions and 1 deletions
|
@ -553,7 +553,33 @@ void Utils::Misc::openFolderSelect(const QString& absolutePath)
|
||||||
if (QFileInfo(path).exists()) {
|
if (QFileInfo(path).exists()) {
|
||||||
// Syntax is: explorer /select, "C:\Folder1\Folder2\file_to_select"
|
// Syntax is: explorer /select, "C:\Folder1\Folder2\file_to_select"
|
||||||
// Dir separators MUST be win-style slashes
|
// Dir separators MUST be win-style slashes
|
||||||
QProcess::startDetached("explorer.exe", QStringList() << "/select," << Utils::Fs::toNativePath(absolutePath));
|
|
||||||
|
// QProcess::startDetached() has an obscure bug. If the path has
|
||||||
|
// no spaces and a comma(and maybe other special characters) it doesn't
|
||||||
|
// get wrapped in quotes. So explorer.exe can't find the correct path and
|
||||||
|
// displays the default one. If we wrap the path in quotes and pass it to
|
||||||
|
// QProcess::startDetached() explorer.exe still shows the default path. In
|
||||||
|
// this case QProcess::startDetached() probably puts its own quotes around ours.
|
||||||
|
|
||||||
|
STARTUPINFO startupInfo;
|
||||||
|
::ZeroMemory(&startupInfo, sizeof(startupInfo));
|
||||||
|
startupInfo.cb = sizeof(startupInfo);
|
||||||
|
|
||||||
|
PROCESS_INFORMATION processInfo;
|
||||||
|
::ZeroMemory(&processInfo, sizeof(processInfo));
|
||||||
|
|
||||||
|
QString cmd = QString("explorer.exe /select,\"%1\"").arg(Utils::Fs::toNativePath(absolutePath));
|
||||||
|
LPWSTR lpCmd = new WCHAR[cmd.size() + 1];
|
||||||
|
cmd.toWCharArray(lpCmd);
|
||||||
|
lpCmd[cmd.size()] = 0;
|
||||||
|
|
||||||
|
bool ret = ::CreateProcessW(NULL, lpCmd, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo);
|
||||||
|
delete [] lpCmd;
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
::CloseHandle(processInfo.hProcess);
|
||||||
|
::CloseHandle(processInfo.hThread);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// If the item to select doesn't exist, try to open its parent
|
// If the item to select doesn't exist, try to open its parent
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue