From e887b3b3959efa0a7a5ed91893c05e3a8a74d644 Mon Sep 17 00:00:00 2001 From: Jaime Bernardo Date: Thu, 7 Jul 2022 15:56:14 +0100 Subject: [PATCH] [PowerRename][ImageResizer]Fallback for tier 1 menus (#19195) * [PowerRename][ImageResizer]fallback for tier 1 menus * Simplify logic --- .../ImageResizerLib/ImageResizerConstants.h | 1 + .../imageresizer/dll/ContextMenuHandler.cpp | 13 +++++---- src/modules/imageresizer/dll/dllmain.cpp | 3 +-- .../powerrename/dll/PowerRenameConstants.h | 1 + .../powerrename/dll/PowerRenameExt.cpp | 27 ++++++------------- src/modules/powerrename/dll/dllmain.cpp | 3 +-- 6 files changed, 18 insertions(+), 30 deletions(-) diff --git a/src/modules/imageresizer/ImageResizerLib/ImageResizerConstants.h b/src/modules/imageresizer/ImageResizerLib/ImageResizerConstants.h index 23ef8f7ae60..d880cfdda0f 100644 --- a/src/modules/imageresizer/ImageResizerLib/ImageResizerConstants.h +++ b/src/modules/imageresizer/ImageResizerLib/ImageResizerConstants.h @@ -9,4 +9,5 @@ namespace ImageResizerConstants // Name of the ImageResizer save folder. inline const std::wstring ModuleOldSaveFolderKey = L"ImageResizer"; inline const std::wstring ModuleSaveFolderKey = L"Image Resizer"; + inline const std::wstring ModulePackageDisplayName = L"ImageResizerContextMenu"; } diff --git a/src/modules/imageresizer/dll/ContextMenuHandler.cpp b/src/modules/imageresizer/dll/ContextMenuHandler.cpp index 3296c1c91c3..08297a84fae 100644 --- a/src/modules/imageresizer/dll/ContextMenuHandler.cpp +++ b/src/modules/imageresizer/dll/ContextMenuHandler.cpp @@ -2,6 +2,7 @@ #include "pch.h" #include "ContextMenuHandler.h" +#include #include #include @@ -63,17 +64,15 @@ HRESULT CContextMenuHandler::Initialize(_In_opt_ PCIDLIST_ABSOLUTE pidlFolder, _ HRESULT CContextMenuHandler::QueryContextMenu(_In_ HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) { - if (package::IsWin11OrGreater()) - return E_FAIL; - if (uFlags & CMF_DEFAULTONLY) - { return S_OK; - } + if (!CSettingsInstance().GetEnabled()) - { return E_FAIL; - } + + if (package::IsWin11OrGreater() && package::IsPackageRegistered(ImageResizerConstants::ModulePackageDisplayName)) + return E_FAIL; + // NB: We just check the first item. We could iterate through more if the first one doesn't meet the criteria HDropIterator i(m_pdtobj); i.First(); diff --git a/src/modules/imageresizer/dll/dllmain.cpp b/src/modules/imageresizer/dll/dllmain.cpp index e622306e01d..a2d37894966 100644 --- a/src/modules/imageresizer/dll/dllmain.cpp +++ b/src/modules/imageresizer/dll/dllmain.cpp @@ -102,8 +102,7 @@ class ImageResizerModule : public PowertoyModuleIface std::wstring path = get_module_folderpath(g_hInst_imageResizer); std::wstring packageUri = path + L"\\ImageResizerContextMenuPackage.msix"; - std::wstring packageDisplayName{ L"ImageResizerContextMenu" }; - if (!package::IsPackageRegistered(packageDisplayName)) + if (!package::IsPackageRegistered(ImageResizerConstants::ModulePackageDisplayName)) { package::RegisterSparsePackage(path, packageUri); } diff --git a/src/modules/powerrename/dll/PowerRenameConstants.h b/src/modules/powerrename/dll/PowerRenameConstants.h index fbbcffe02ee..bc8f8b8b364 100644 --- a/src/modules/powerrename/dll/PowerRenameConstants.h +++ b/src/modules/powerrename/dll/PowerRenameConstants.h @@ -5,4 +5,5 @@ namespace PowerRenameConstants { // Name of the powertoy module. inline const std::wstring ModuleKey = L"PowerRename"; + inline const std::wstring ModulePackageDisplayName = L"PowerRenameContextMenu"; } \ No newline at end of file diff --git a/src/modules/powerrename/dll/PowerRenameExt.cpp b/src/modules/powerrename/dll/PowerRenameExt.cpp index 26d0f22ac2a..c58500e1869 100644 --- a/src/modules/powerrename/dll/PowerRenameExt.cpp +++ b/src/modules/powerrename/dll/PowerRenameExt.cpp @@ -1,5 +1,6 @@ #include "pch.h" #include "PowerRenameExt.h" +#include "PowerRenameConstants.h" #include #include #include @@ -64,29 +65,17 @@ HRESULT CPowerRenameMenu::QueryContextMenu(HMENU hMenu, UINT index, UINT uIDFirs if (!CSettingsInstance().GetEnabled()) return E_FAIL; - // Win11 context menu can't distinguish between extended and default menu, so use this one - if (package::IsWin11OrGreater()) - { - if (CSettingsInstance().GetExtendedContextMenuOnly() && (uFlags & CMF_EXTENDEDVERBS)) - { - // continue - } - else - { - return E_FAIL; - } - } - else - { - // Check if we should only be on the extended context menu - if (CSettingsInstance().GetExtendedContextMenuOnly() && (!(uFlags & CMF_EXTENDEDVERBS))) - return E_FAIL; - } - // Check if at least one of the selected items is actually renamable. if (!DataObjectContainsRenamableItem(m_spdo)) return E_FAIL; + if (package::IsWin11OrGreater() && package::IsPackageRegistered(PowerRenameConstants::ModulePackageDisplayName)) + return E_FAIL; + + // Check if we should only be on the extended context menu + if (CSettingsInstance().GetExtendedContextMenuOnly() && (!(uFlags & CMF_EXTENDEDVERBS))) + return E_FAIL; + HRESULT hr = E_UNEXPECTED; if (m_spdo && !(uFlags & (CMF_DEFAULTONLY | CMF_VERBSONLY | CMF_OPTIMIZEFORINVOKE))) { diff --git a/src/modules/powerrename/dll/dllmain.cpp b/src/modules/powerrename/dll/dllmain.cpp index 4b01877df7f..fc5dea91e00 100644 --- a/src/modules/powerrename/dll/dllmain.cpp +++ b/src/modules/powerrename/dll/dllmain.cpp @@ -193,8 +193,7 @@ class PowerRenameModule : public PowertoyModuleIface std::wstring path = get_module_folderpath(g_hInst); std::wstring packageUri = path + L"\\PowerRenameContextMenuPackage.msix"; - std::wstring packageDisplayName{ L"PowerRenameContextMenu" }; - if (!package::IsPackageRegistered(packageDisplayName)) + if (!package::IsPackageRegistered(PowerRenameConstants::ModulePackageDisplayName)) { package::RegisterSparsePackage(path, packageUri); }