From 8a222821916f9ef2327672cf1e6d64638b7924df Mon Sep 17 00:00:00 2001 From: ge0rdi Date: Fri, 18 Sep 2020 12:15:39 +0200 Subject: [PATCH] ItemManager: Better handling of modern application links Link to modern application will be treat as modern application itself. This fixes jump-lists and invert metro color option on modern apps pinned to start menu. --- Src/StartMenu/StartMenuDLL/ItemManager.cpp | 28 +++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/Src/StartMenu/StartMenuDLL/ItemManager.cpp b/Src/StartMenu/StartMenuDLL/ItemManager.cpp index 8c28114..d568cd3 100644 --- a/Src/StartMenu/StartMenuDLL/ItemManager.cpp +++ b/Src/StartMenu/StartMenuDLL/ItemManager.cpp @@ -1824,7 +1824,11 @@ void CItemManager::RefreshItemInfo( ItemInfo *pInfo, int refreshFlags, IShellIte { newInfo.bLink=true; pStore=pLink; - +#ifdef _DEBUG + LOG_MENU(LOG_OPEN, L"Link: %s", newInfo.path); + LOG_MENU(LOG_OPEN, L"Link property store:"); + LogPropertyStore(LOG_OPEN, pStore); +#endif if (SUCCEEDED(pLink->GetIDList(&newInfo.targetPidl))) { wchar_t path[_MAX_PATH]; @@ -1833,6 +1837,28 @@ void CItemManager::RefreshItemInfo( ItemInfo *pInfo, int refreshFlags, IShellIte CharUpper(path); newInfo.targetPATH=path; } + + CComPtr target; + if (SUCCEEDED(SHCreateItemFromIDList(newInfo.targetPidl, IID_PPV_ARGS(&target)))) + { + CComPtr store; + if (SUCCEEDED(target->BindToHandler(nullptr, BHID_PropertyStore, IID_PPV_ARGS(&store)))) + { +#ifdef _DEBUG + LOG_MENU(LOG_OPEN, L"Target property store:"); + LogPropertyStore(LOG_OPEN, store); +#endif + PROPVARIANT val; + PropVariantInit(&val); + if (SUCCEEDED(store->GetValue(PKEY_MetroAppLauncher, &val)) && (val.vt == VT_I4 || val.vt == VT_UI4) && val.intVal) + { + newInfo.bLink = false; + pItem = target; + pStore = store; + } + PropVariantClear(&val); + } + } } } }