diff --git a/reactos/subsys/system/explorer/taskbar/startmenu.cpp b/reactos/subsys/system/explorer/taskbar/startmenu.cpp index 611f0cc4396..fe77f92fad8 100644 --- a/reactos/subsys/system/explorer/taskbar/startmenu.cpp +++ b/reactos/subsys/system/explorer/taskbar/startmenu.cpp @@ -1009,7 +1009,7 @@ void StartMenu::CreateSubmenu(int id, LPCTSTR title, CREATORFUNC_INFO creator) CreateSubmenu(id, StartMenuFolders(), title, creator); } -void StartMenu::CreateSubmenu(int id, int folder_id, LPCTSTR title, CREATORFUNC_INFO creator) +bool StartMenu::CreateSubmenu(int id, int folder_id, LPCTSTR title, CREATORFUNC_INFO creator) { try { SpecialFolderPath folder(folder_id, _hwnd); @@ -1018,12 +1018,17 @@ void StartMenu::CreateSubmenu(int id, int folder_id, LPCTSTR title, CREATORFUNC_ new_folders.push_back(folder); CreateSubmenu(id, new_folders, title, creator); + + return true; } catch(COMException&) { // ignore Exception and don't display anything + CloseOtherSubmenus(id); + _buttons[GetSelectionIndex()]._enabled = false; // disable entries for non-existing folders + return false; } } -void StartMenu::CreateSubmenu(int id, int folder_id1, int folder_id2, LPCTSTR title, CREATORFUNC_INFO creator) +bool StartMenu::CreateSubmenu(int id, int folder_id1, int folder_id2, LPCTSTR title, CREATORFUNC_INFO creator) { StartMenuFolders new_folders; @@ -1037,8 +1042,14 @@ void StartMenu::CreateSubmenu(int id, int folder_id1, int folder_id2, LPCTSTR ti } catch(COMException&) { } - if (!new_folders.empty()) + if (!new_folders.empty()) { CreateSubmenu(id, new_folders, title, creator); + return true; + } else { + CloseOtherSubmenus(id); + _buttons[GetSelectionIndex()]._enabled = false; // disable entries for non-existing folders + return false; + } } void StartMenu::CreateSubmenu(int id, const StartMenuFolders& new_folders, LPCTSTR title, CREATORFUNC_INFO creator) diff --git a/reactos/subsys/system/explorer/taskbar/startmenu.h b/reactos/subsys/system/explorer/taskbar/startmenu.h index 4cea212148e..b24ac2c1712 100644 --- a/reactos/subsys/system/explorer/taskbar/startmenu.h +++ b/reactos/subsys/system/explorer/taskbar/startmenu.h @@ -279,8 +279,8 @@ protected: bool CloseSubmenus() {return CloseOtherSubmenus();} bool CloseOtherSubmenus(int id=0); void CreateSubmenu(int id, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator); - void CreateSubmenu(int id, int folder, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator); - void CreateSubmenu(int id, int folder1, int folder2, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator); + bool CreateSubmenu(int id, int folder, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator); + bool CreateSubmenu(int id, int folder1, int folder2, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator); void CreateSubmenu(int id, const StartMenuFolders& new_folders, LPCTSTR title, CREATORFUNC_INFO creator=s_def_creator); void ActivateEntry(int id, const ShellEntrySet& entries); virtual void CloseStartMenu(int id=0);