mirror of
https://github.com/reactos/reactos.git
synced 2025-05-23 11:04:52 +00:00
[RSHELL]
* Fix assumption that the USER folder will always exist and only the COMMON folder may be missing. Allows the Start Menu to work in livecd. [BROWSEUI] * Apply the same fix to the Favorites folder, although the LiveCD does not currently have the folder so it will not work regardless. svn path=/branches/shell-experiments/; revision=65098
This commit is contained in:
parent
4fc224434a
commit
a0ec7d507f
2 changed files with 48 additions and 11 deletions
|
@ -21,6 +21,8 @@
|
|||
|
||||
#include "CMergedFolder.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(CStartMenu);
|
||||
|
||||
// TODO: declare these GUIDs and interfaces in the right place (whatever that may be)
|
||||
IID IID_IAugmentedShellFolder = { 0x91EA3F8C, 0xC99B, 0x11D0, { 0x98, 0x15, 0x00, 0xC0, 0x4F, 0xD9, 0x19, 0x72 } };
|
||||
IID IID_IAugmentedShellFolder2 = { 0x8DB3B3F4, 0x6CFE, 0x11D1, { 0x8A, 0xE9, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0 } };
|
||||
|
@ -336,15 +338,30 @@ static HRESULT GetStartMenuFolder(IShellFolder ** ppsfStartMenu)
|
|||
|
||||
hr = SHGetSpecialFolderLocation(NULL, CSIDL_STARTMENU, &pidlUserStartMenu);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
if (FAILED(SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_STARTMENU, &pidlCommonStartMenu)))
|
||||
{
|
||||
WARN("Failed to get the USER start menu folder. Trying to run with just the COMMON one.\n");
|
||||
|
||||
hr = SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_STARTMENU, &pidlCommonStartMenu);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
TRACE("COMMON start menu obtained.\n");
|
||||
hr = BindToDesktop(pidlCommonStartMenu, ppsfStartMenu);
|
||||
ILFree(pidlCommonStartMenu);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_STARTMENU, &pidlCommonStartMenu);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
{
|
||||
WARN("Failed to get the COMMON start menu folder. Will use only the USER contents.\n");
|
||||
hr = BindToDesktop(pidlUserStartMenu, ppsfStartMenu);
|
||||
ILFree(pidlUserStartMenu);
|
||||
return hr;
|
||||
}
|
||||
|
||||
TRACE("Both COMMON and USER statr menu folders obtained, merging them...\n");
|
||||
|
||||
hr = BindToDesktop(pidlUserStartMenu, &psfUserStartMenu);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
@ -353,7 +370,7 @@ static HRESULT GetStartMenuFolder(IShellFolder ** ppsfStartMenu)
|
|||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
#if 1
|
||||
#if !USE_SYSTEM_MERGED_FOLDERS
|
||||
hr = CMergedFolder_Constructor(IID_PPV_ARG(IAugmentedShellFolder, &pasf));
|
||||
#else
|
||||
hr = CoCreateInstance(CLSID_MergedFolder, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IAugmentedShellFolder, &pasf));
|
||||
|
@ -447,8 +464,13 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
|
|||
return hr;
|
||||
|
||||
hr = SHGetSpecialFolderLocation(NULL, CSIDL_PROGRAMS, &pidlProgramsAbsolute);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
if (FAILED(hr))
|
||||
{
|
||||
WARN("USER Programs folder not found.");
|
||||
hr = SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_PROGRAMS, &pidlProgramsAbsolute);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
}
|
||||
|
||||
pidlPrograms = ILClone(ILFindLastID(pidlProgramsAbsolute));
|
||||
ILFree(pidlProgramsAbsolute);
|
||||
|
|
|
@ -446,15 +446,30 @@ static HRESULT GetFavoritesFolder(IShellFolder ** ppsfFavorites, LPITEMIDLIST *
|
|||
|
||||
hr = SHGetSpecialFolderLocation(NULL, CSIDL_FAVORITES, &pidlUserFavorites);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
if (FAILED(SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_FAVORITES, &pidlCommonFavorites)))
|
||||
{
|
||||
hr = BindToDesktop(pidlUserFavorites, ppsfFavorites);
|
||||
*ppidl = pidlUserFavorites;
|
||||
WARN("Failed to get the USER favorites folder. Trying to run with just the COMMON one.\n");
|
||||
|
||||
hr = SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_FAVORITES, &pidlCommonFavorites);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
TRACE("COMMON start menu obtained.\n");
|
||||
*ppidl = pidlCommonFavorites;
|
||||
hr = BindToDesktop(pidlCommonFavorites, ppsfFavorites);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_FAVORITES, &pidlCommonFavorites);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
{
|
||||
WARN("Failed to get the COMMON favorites folder. Will use only the USER contents.\n");
|
||||
*ppidl = pidlCommonFavorites;
|
||||
hr = BindToDesktop(pidlUserFavorites, ppsfFavorites);
|
||||
return hr;
|
||||
}
|
||||
|
||||
TRACE("Both COMMON and USER favorites folders obtained, merging them...\n");
|
||||
|
||||
hr = BindToDesktop(pidlUserFavorites, &psfUserFavorites);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
|
Loading…
Reference in a new issue