-
-
Notifications
You must be signed in to change notification settings - Fork 224
Open
Labels
bugSomething isn't workingSomething isn't working
Description
When a device is not available in windows, for example a network drive is offline, it still shows up in filedialog places. But when the user tries to open the non-existing drive weird things happen. The path reverts to the default, but the files shown are likely from the first bookmark. I think the way to avoid this all together is by modifying the following function:
std::vector<IGFD::PathDisplayedName> GetDevicesList() override {
std::vector<IGFD::PathDisplayedName> res;
#ifdef _IGFD_WIN_
const DWORD mydrives = 2048;
char lpBuffer[2048];
#define mini(a, b) (((a) < (b)) ? (a) : (b))
const DWORD countChars = mini(GetLogicalDriveStringsA(mydrives, lpBuffer), 2047);
#undef mini
if (countChars > 0U && countChars < 2049U) {
std::string var = std::string(lpBuffer, (size_t)countChars);
IGFD::Utils::ReplaceString(var, "\\", "");
auto arr = IGFD::Utils::SplitStringToVector(var, '\0', false);
wchar_t szVolumeName[2048];
IGFD::PathDisplayedName path_name;
for (auto& a : arr) {
path_name.first = a;
path_name.second.clear();
// std::wstring wpath = IGFD::Utils::UTF8Decode(a);
std::wstring wpath = IGFD::Utils::UTF8Decode(a) + L"\\"; // otherwise can't even find C drive
if (GetVolumeInformationW(wpath.c_str(), szVolumeName, 2048, NULL, NULL, NULL, NULL, 0)) {
path_name.second = IGFD::Utils::UTF8Encode(szVolumeName);
res.push_back(path_name);
}
}
}
#endif // _IGFD_WIN_
return res;
}
When GetVolumeInformationW fails, for example because the drive is not available, it will not add the path to the list. Also I ran into an issue where the C drive did not show up due to a missing \ somehow. The only problem left is now that if the drive goes offline after the filedialog instance has been created. Not sure how to fix this.
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working