mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-06 03:07:04 +02:00
previewpane: use RAII for FileExplorerPreviewSettings classes to avoid memory leaks
This commit is contained in:
committed by
Andrey Nekrasov
parent
6c62be1818
commit
f506980e4d
@@ -10,38 +10,36 @@
|
||||
// Constructor
|
||||
PowerPreviewModule::PowerPreviewModule() :
|
||||
m_moduleName(GET_RESOURCE_STRING(IDS_MODULE_NAME)),
|
||||
app_key(powerpreviewConstants::ModuleKey),
|
||||
m_fileExplorerModules(
|
||||
{ // SVG Preview Handler settings object.
|
||||
new PreviewHandlerSettings(
|
||||
true,
|
||||
L"svg-previewer-toggle-setting",
|
||||
GET_RESOURCE_STRING(IDS_PREVPANE_SVG_SETTINGS_DESCRIPTION),
|
||||
L"{ddee2b8a-6807-48a6-bb20-2338174ff779}",
|
||||
L"Svg Preview Handler",
|
||||
new RegistryWrapper()),
|
||||
|
||||
// MarkDown Preview Handler Settings Object.
|
||||
new PreviewHandlerSettings(
|
||||
true,
|
||||
L"md-previewer-toggle-setting",
|
||||
GET_RESOURCE_STRING(IDS_PREVPANE_MD_SETTINGS_DESCRIPTION),
|
||||
L"{45769bcc-e8fd-42d0-947e-02beef77a1f5}",
|
||||
L"Markdown Preview Handler",
|
||||
new RegistryWrapper()),
|
||||
//SVG Thumbnail Provider settings object.
|
||||
new ThumbnailProviderSettings(
|
||||
true,
|
||||
L"svg-thumbnail-toggle-setting",
|
||||
GET_RESOURCE_STRING(IDS_SVG_THUMBNAIL_PROVIDER_SETTINGS_DESCRIPTION),
|
||||
L"{36B27788-A8BB-4698-A756-DF9F11F64F84}",
|
||||
L"Svg Thumbnail Provider",
|
||||
new RegistryWrapper(),
|
||||
L".svg\\shellex\\{E357FCCD-A995-4576-B01F-234630154E96}") })
|
||||
app_key(powerpreviewConstants::ModuleKey)
|
||||
{
|
||||
// Initialize the toggle states for each module
|
||||
init_settings();
|
||||
|
||||
m_fileExplorerModules.emplace_back(std::make_unique<PreviewHandlerSettings>(
|
||||
true,
|
||||
L"svg-previewer-toggle-setting",
|
||||
GET_RESOURCE_STRING(IDS_PREVPANE_SVG_SETTINGS_DESCRIPTION),
|
||||
L"{ddee2b8a-6807-48a6-bb20-2338174ff779}",
|
||||
L"Svg Preview Handler",
|
||||
std::make_unique<RegistryWrapper>()));
|
||||
|
||||
m_fileExplorerModules.emplace_back(std::make_unique<PreviewHandlerSettings>(
|
||||
true,
|
||||
L"md-previewer-toggle-setting",
|
||||
GET_RESOURCE_STRING(IDS_PREVPANE_MD_SETTINGS_DESCRIPTION),
|
||||
L"{45769bcc-e8fd-42d0-947e-02beef77a1f5}",
|
||||
L"Markdown Preview Handler",
|
||||
std::make_unique<RegistryWrapper>()));
|
||||
|
||||
m_fileExplorerModules.emplace_back(std::make_unique<ThumbnailProviderSettings>(
|
||||
true,
|
||||
L"svg-thumbnail-toggle-setting",
|
||||
GET_RESOURCE_STRING(IDS_SVG_THUMBNAIL_PROVIDER_SETTINGS_DESCRIPTION),
|
||||
L"{36B27788-A8BB-4698-A756-DF9F11F64F84}",
|
||||
L"Svg Thumbnail Provider",
|
||||
std::make_unique<RegistryWrapper>(),
|
||||
L".svg\\shellex\\{E357FCCD-A995-4576-B01F-234630154E96}"));
|
||||
|
||||
// If the user is on the new settings interface, File Explorer might be disabled if they updated from old to new settings, so initialize the registry state in the constructor as PowerPreviewModule::enable/disable will not be called on startup
|
||||
if (UseNewSettings())
|
||||
{
|
||||
@@ -87,7 +85,7 @@ bool PowerPreviewModule::get_config(_Out_ wchar_t* buffer, _Out_ int* buffer_siz
|
||||
GET_RESOURCE_STRING(IDS_PRVPANE_FILE_PREV_STTNGS_GROUP_DESC),
|
||||
GET_RESOURCE_STRING(IDS_PRVPANE_FILE_PREV_STTNGS_GROUP_TEXT));
|
||||
|
||||
for (auto fileExplorerModule : this->m_fileExplorerModules)
|
||||
for (auto& fileExplorerModule : m_fileExplorerModules)
|
||||
{
|
||||
settings.add_bool_toggle(
|
||||
fileExplorerModule->GetToggleSettingName(),
|
||||
@@ -107,7 +105,7 @@ void PowerPreviewModule::set_config(const wchar_t* config)
|
||||
|
||||
bool updateSuccess = true;
|
||||
bool isElevated = is_process_elevated(false);
|
||||
for (auto fileExplorerModule : this->m_fileExplorerModules)
|
||||
for (auto& fileExplorerModule : m_fileExplorerModules)
|
||||
{
|
||||
// If the user is using the new settings interface, as it does not have a toggle to modify enabled consider File Explorer to always be enabled
|
||||
updateSuccess = updateSuccess && fileExplorerModule->UpdateState(settings, this->m_enabled || UseNewSettings(), isElevated);
|
||||
@@ -147,7 +145,7 @@ void PowerPreviewModule::enable()
|
||||
void PowerPreviewModule::disable()
|
||||
{
|
||||
elevation_check_wrapper([this]() {
|
||||
for (auto fileExplorerModule : this->m_fileExplorerModules)
|
||||
for (auto& fileExplorerModule : m_fileExplorerModules)
|
||||
{
|
||||
fileExplorerModule->Disable();
|
||||
}
|
||||
@@ -177,7 +175,7 @@ void PowerPreviewModule::init_settings()
|
||||
PowerToysSettings::PowerToyValues::load_from_settings_file(PowerPreviewModule::get_key());
|
||||
|
||||
// Load settings states.
|
||||
for (auto fileExplorerModule : this->m_fileExplorerModules)
|
||||
for (auto& fileExplorerModule : m_fileExplorerModules)
|
||||
{
|
||||
fileExplorerModule->LoadState(settings);
|
||||
}
|
||||
@@ -191,7 +189,7 @@ void PowerPreviewModule::init_settings()
|
||||
// Function to check if the registry states need to be updated
|
||||
bool PowerPreviewModule::is_registry_update_required()
|
||||
{
|
||||
for (auto fileExplorerModule : this->m_fileExplorerModules)
|
||||
for (auto& fileExplorerModule : m_fileExplorerModules)
|
||||
{
|
||||
if (fileExplorerModule->GetToggleSettingState() != fileExplorerModule->CheckRegistryState())
|
||||
{
|
||||
@@ -241,7 +239,7 @@ void PowerPreviewModule::elevation_check_wrapper(std::function<void()> method)
|
||||
void PowerPreviewModule::update_registry_to_match_toggles()
|
||||
{
|
||||
registry_and_elevation_check_wrapper([this]() {
|
||||
for (auto fileExplorerModule : this->m_fileExplorerModules)
|
||||
for (auto& fileExplorerModule : m_fileExplorerModules)
|
||||
{
|
||||
if (fileExplorerModule->GetToggleSettingState())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user