From d3bf4b6207e51f78f72387249253e6b4cb4b6b48 Mon Sep 17 00:00:00 2001 From: ge0rdi Date: Mon, 21 Sep 2020 19:20:37 +0200 Subject: [PATCH] MenuContainer: Faster recent Metro apps enumeration It seems that `SHCreateItemInKnownFolder` is quite slow for Metro apps. Thus we should avoid it and use cached app info. --- Src/StartMenu/StartMenuDLL/MenuContainer.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Src/StartMenu/StartMenuDLL/MenuContainer.cpp b/Src/StartMenu/StartMenuDLL/MenuContainer.cpp index a362c4d..857561a 100644 --- a/Src/StartMenu/StartMenuDLL/MenuContainer.cpp +++ b/Src/StartMenu/StartMenuDLL/MenuContainer.cpp @@ -1937,15 +1937,6 @@ void CMenuContainer::GetRecentPrograms( std::vector &items, int maxCou continue; } - { - CComPtr pAppItem; - if (FAILED(SHCreateItemInKnownFolder(FOLDERID_AppsFolder2,0,uaItem.name,IID_IShellItem,(void**)&pAppItem))) - continue; - CComString pName; - if (FAILED(pAppItem->GetDisplayName(SIGDN_NORMALDISPLAY,&pName)) || wcsncmp(pName,L"@{",2)==0) - continue; - } - uaItem.pLinkInfo=g_ItemManager.GetMetroAppInfo10(uaItem.name); if (!uaItem.pLinkInfo) { @@ -1956,6 +1947,11 @@ void CMenuContainer::GetRecentPrograms( std::vector &items, int maxCou LOG_MENU(LOG_MFU,L"UserAssist: '%s', %d, %.3f",uaItem.name,data.count,uaItem.rank); { CItemManager::RWLock lock(&g_ItemManager,false,CItemManager::RWLOCK_ITEMS); + if (uaItem.pLinkInfo->GetMetroName().IsEmpty() || wcsncmp(uaItem.pLinkInfo->GetMetroName(), L"@{",2)==0) + { + LOG_MENU(LOG_MFU, L"UserAssist: Dropping: No metro name"); + continue; + } if (uaItem.pLinkInfo->IsNoPin()) { LOG_MENU(LOG_MFU,L"UserAssist: Dropping: No pin");