--- branches/lean-explorer/reactos/subsys/system/explorer/taskbar/startmenu.cpp 2005-05-03 08:00:23 UTC (rev 14952)
+++ branches/lean-explorer/reactos/subsys/system/explorer/taskbar/startmenu.cpp 2005-05-03 08:01:18 UTC (rev 14953)
@@ -217,15 +217,42 @@
#endif
}
- AddShellEntries(dir, -1, smd._subfolders);
+ AddShellEntries(dir, -1, smd._ignore);
}
}
-void StartMenu::AddShellEntries(const ShellDirectory& dir, int max, bool subfolders)
+static LPTSTR trim_path_slash(LPTSTR path)
{
+ LPTSTR p = path;
+
+ while(*p)
+ ++p;
+
+ if (p>path && (p[-1]=='\\' || p[-1]=='/'))
+ *--p = '\0';
+
+ return path;
+}
+
+void StartMenu::AddShellEntries(const ShellDirectory& dir, int max, const String& ignore)
+{
+ TCHAR ignore_path[MAX_PATH], ignore_dir[MAX_PATH], ignore_name[_MAX_FNAME], ignore_ext[_MAX_EXT];
+ TCHAR dir_path[MAX_PATH];
+
+ if (!ignore.empty()) {
+ _tsplitpath(ignore, ignore_path, ignore_dir, ignore_name, ignore_ext);
+
+ _tcscat(ignore_path, ignore_dir);
+ _tcscat(ignore_name, ignore_ext);
+
+ dir.get_path(dir_path);
+
+ if (_tcsicmp(trim_path_slash(dir_path), trim_path_slash(ignore_path)))
+ *ignore_name = '\0';
+ }
+
int cnt = 0;
-
for(Entry*entry=dir._down; entry; entry=entry->_next) {
// hide files like "desktop.ini"
if (entry->_shell_attribs & SFGAO_HIDDEN)
@@ -233,8 +260,8 @@
continue;
// hide subfolders if requested
- if (!subfolders)
- if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ if (!ignore.empty())
+ if (*ignore_name && !_tcsicmp(entry->_data.cFileName, ignore_name))
continue;
// only 'max' entries shall be added.
@@ -1467,7 +1494,7 @@
try {
// insert directory "All Users\Start Menu"
ShellDirectory cmn_startmenu(GetDesktopFolder(), SpecialFolderPath(CSIDL_COMMON_STARTMENU, _hwnd), _hwnd);
- _dirs.push_back(StartMenuDirectory(cmn_startmenu, false)); // don't add subfolders
+ _dirs.push_back(StartMenuDirectory(cmn_startmenu, (LPCTSTR)SpecialFolderFSPath(CSIDL_COMMON_PROGRAMS, _hwnd)));
} catch(COMException&) {
// ignore exception and don't show additional shortcuts
}
@@ -1476,7 +1503,7 @@
// insert directory "<user name>\Start Menu"
ShellDirectory usr_startmenu(GetDesktopFolder(), SpecialFolderPath(CSIDL_STARTMENU, _hwnd), _hwnd);
- _dirs.push_back(StartMenuDirectory(usr_startmenu, false)); // don't add subfolders
+ _dirs.push_back(StartMenuDirectory(usr_startmenu, (LPCTSTR)SpecialFolderFSPath(CSIDL_PROGRAMS, _hwnd)));
} catch(COMException&) {
// ignore exception and don't show additional shortcuts
}
@@ -1998,6 +2025,6 @@
}
dir.sort_directory(SORT_DATE);
- AddShellEntries(dir, RECENT_DOCS_COUNT, smd._subfolders); ///@todo read max. count of entries from registry
+ AddShellEntries(dir, RECENT_DOCS_COUNT, smd._ignore); ///@todo read max. count of entries from registry
}
}
--- branches/lean-explorer/reactos/subsys/system/explorer/taskbar/startmenu.h 2005-05-03 08:00:23 UTC (rev 14952)
+++ branches/lean-explorer/reactos/subsys/system/explorer/taskbar/startmenu.h 2005-05-03 08:01:18 UTC (rev 14953)
@@ -56,8 +56,8 @@
/// StartMenuDirectory is used to store the base directory of start menus.
struct StartMenuDirectory
{
- StartMenuDirectory(const ShellDirectory& dir, bool subfolders=true)
- : _dir(dir), _subfolders(subfolders)
+ StartMenuDirectory(const ShellDirectory& dir, const String& ignore="")
+ : _dir(dir), _ignore(ignore)
{
}
@@ -67,7 +67,7 @@
}
ShellDirectory _dir;
- bool _subfolders;
+ String _ignore;
};
typedef list<StartMenuDirectory> StartMenuShellDirs;
@@ -278,7 +278,7 @@
StartMenuEntry& AddEntry(const ShellFolder folder, ShellEntry* entry);
StartMenuEntry& AddEntry(const ShellFolder folder, Entry* entry);
- void AddShellEntries(const ShellDirectory& dir, int max=-1, bool subfolders=true);
+ void AddShellEntries(const ShellDirectory& dir, int max=-1, const String& ignore="");
void AddButton(LPCTSTR title, ICON_ID icon_id=ICID_NONE, bool hasSubmenu=false, int id=-1, bool enabled=true);
void AddSeparator();