mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-06 03:07:04 +02:00
[File Explorer] Fix enable/disable for File Explorer PowerToy (#6883)
* Commented out enable/disable for File Explorer * Revert UI changes * Disable the toggles if PT is not running elevated * Fixed compilation errors in tests * Cleaned up preview pane code to separate thumbnail and preview panes as separate classes * Fixed broken settings format and added elevation check and registry updated required logic. Preview Handler tested manually working, Thumbnail Enable/Disable needs to be fixed * Updated Thumbnail enable/disable logic and added warning messages * Update tests for File Explorer * Fixed RegGetValue failing in Release config * Renamed new classes * Split wrappers for disable to work * Modified enabled flag check to also check if user is on new settings. Fixed casing issue in powerpreview.h that caused a dialog prompt on first launch after install * Update fontweight and margin * Fixed release build not working * Move UseNewSettings usage to powerpreview.cpp to avoid tests breaking. For new settings the enable check is done in constructor and for old settings it is done in enable * Update src/core/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw Co-authored-by: htcfreek <61519853+htcfreek@users.noreply.github.com> * Update src/core/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw Co-authored-by: htcfreek <61519853+htcfreek@users.noreply.github.com> * Update src/core/Microsoft.PowerToys.Settings.UI/Strings/en-us/Resources.resw Co-authored-by: htcfreek <61519853+htcfreek@users.noreply.github.com> * Moved dup code to method * Use correct versions of general settings for backwards compat test Co-authored-by: htcfreek <61519853+htcfreek@users.noreply.github.com>
This commit is contained in:
@@ -11,12 +11,6 @@ namespace PowerPreviewSettings
|
||||
{
|
||||
extern "C" IMAGE_DOS_HEADER __ImageBase;
|
||||
|
||||
// Relative(HKLM/HKCU) sub key path of Preview Handlers list in registry.
|
||||
static LPCWSTR preview_handlers_subkey = L"Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers";
|
||||
|
||||
// Relative HKCR sub key path of SVG thumbnail provider in registry
|
||||
static LPCWSTR svg_thumbnail_provider_subkey = L".svg\\shellex\\{E357FCCD-A995-4576-B01F-234630154E96}";
|
||||
|
||||
// Base Settings Class Implementation
|
||||
FileExplorerPreviewSettings::FileExplorerPreviewSettings(bool toggleSettingEnabled, const std::wstring& toggleSettingName, const std::wstring& toggleSettingDescription, LPCWSTR clsid, const std::wstring& registryValueData, RegistryWrapperIface* registryWrapper) :
|
||||
m_toggleSettingEnabled(toggleSettingEnabled),
|
||||
@@ -28,7 +22,7 @@ namespace PowerPreviewSettings
|
||||
{
|
||||
}
|
||||
|
||||
FileExplorerPreviewSettings::~FileExplorerPreviewSettings()
|
||||
FileExplorerPreviewSettings::~FileExplorerPreviewSettings()
|
||||
{
|
||||
if (this->m_registryWrapper != NULL)
|
||||
{
|
||||
@@ -66,7 +60,7 @@ namespace PowerPreviewSettings
|
||||
return this->m_registryValueData;
|
||||
}
|
||||
|
||||
// Load initial state of the Preview Handler. If no inital state present initialize setting with default value.
|
||||
// Load initial state of the file explorer module. If no inital state present initialize setting with default value.
|
||||
void FileExplorerPreviewSettings::LoadState(PowerToysSettings::PowerToyValues& settings)
|
||||
{
|
||||
auto toggle = settings.get_bool_value(this->GetToggleSettingName());
|
||||
@@ -77,8 +71,8 @@ namespace PowerPreviewSettings
|
||||
}
|
||||
}
|
||||
|
||||
// Manage change in state of Preview Handler settings.
|
||||
void FileExplorerPreviewSettings::UpdateState(PowerToysSettings::PowerToyValues& settings, bool enabled)
|
||||
// Manage change in state of file explorer module settings.
|
||||
bool FileExplorerPreviewSettings::UpdateState(PowerToysSettings::PowerToyValues& settings, bool enabled, bool isElevated)
|
||||
{
|
||||
auto toggle = settings.get_bool_value(this->GetToggleSettingName());
|
||||
if (toggle)
|
||||
@@ -89,27 +83,40 @@ namespace PowerPreviewSettings
|
||||
{
|
||||
this->UpdateToggleSettingState(newState);
|
||||
|
||||
// If global setting is enable. Add or remove the preview handler otherwise just change the UI and save the updated config.
|
||||
// If global setting is enable. Add or remove the file explorer module otherwise just change the UI and save the updated config.
|
||||
if (enabled)
|
||||
{
|
||||
LONG err;
|
||||
if (lastState)
|
||||
// Check if the registry state does not match the new state, registry needs to be modified
|
||||
if (this->CheckRegistryState() != newState)
|
||||
{
|
||||
err = this->DisablePreview();
|
||||
}
|
||||
else
|
||||
{
|
||||
err = this->EnablePreview();
|
||||
}
|
||||
if (isElevated)
|
||||
{
|
||||
LONG err;
|
||||
if (lastState)
|
||||
{
|
||||
err = this->Disable();
|
||||
}
|
||||
else
|
||||
{
|
||||
err = this->Enable();
|
||||
}
|
||||
|
||||
if (err == ERROR_SUCCESS)
|
||||
{
|
||||
Trace::PowerPreviewSettingsUpdated(this->GetToggleSettingName().c_str(), lastState, newState, enabled);
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace::PowerPreviewSettingsUpdateFailed(this->GetToggleSettingName().c_str(), lastState, newState, enabled);
|
||||
if (err == ERROR_SUCCESS)
|
||||
{
|
||||
Trace::PowerPreviewSettingsUpdated(this->GetToggleSettingName().c_str(), lastState, newState, enabled);
|
||||
}
|
||||
else
|
||||
{
|
||||
Trace::PowerPreviewSettingsUpdateFailed(this->GetToggleSettingName().c_str(), lastState, newState, enabled);
|
||||
}
|
||||
}
|
||||
// If process is not elevated, return false as it is not possible to update the registry
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// If it matches the new state, no update to registry is required
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -117,29 +124,7 @@ namespace PowerPreviewSettings
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LONG FileExplorerPreviewSettings::EnablePreview()
|
||||
{
|
||||
// Add registry value to enable preview.
|
||||
return this->m_registryWrapper->SetRegistryValue(HKEY_CURRENT_USER, preview_handlers_subkey, this->GetCLSID(), REG_SZ, (LPBYTE)this->GetRegistryValueData().c_str(), (DWORD)(this->GetRegistryValueData().length() * sizeof(wchar_t)));
|
||||
}
|
||||
|
||||
LONG FileExplorerPreviewSettings::DisablePreview()
|
||||
{
|
||||
// Delete the registry key to disable preview.
|
||||
return this->m_registryWrapper->DeleteRegistryValue(HKEY_CURRENT_USER, preview_handlers_subkey, this->GetCLSID());
|
||||
}
|
||||
|
||||
LONG FileExplorerPreviewSettings::EnableThumbnailProvider()
|
||||
{
|
||||
// Add registry value to enable thumbnail provider.
|
||||
return this->m_registryWrapper->SetRegistryValue(HKEY_CURRENT_USER, svg_thumbnail_provider_subkey, this->GetCLSID(), REG_SZ, (LPBYTE)this->GetRegistryValueData().c_str(), (DWORD)(this->GetRegistryValueData().length() * sizeof(wchar_t)));
|
||||
}
|
||||
|
||||
LONG FileExplorerPreviewSettings::DisableThumbnailProvider()
|
||||
{
|
||||
// Delete the registry key to disable thumbnail provider.
|
||||
return this->m_registryWrapper->DeleteRegistryValue(HKEY_CURRENT_USER, svg_thumbnail_provider_subkey, this->GetCLSID());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user