explorer: merge changes from lean explorer branch (shell namespace
iteration, icon extraction)
Modified: trunk/reactos/subsys/system/explorer/dialogs/searchprogram.cpp
Modified: trunk/reactos/subsys/system/explorer/explorer.h
Modified: trunk/reactos/subsys/system/explorer/shell/entries.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/entries.h
Modified: trunk/reactos/subsys/system/explorer/shell/filechild.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/mainframe.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/mainframe.h
Modified: trunk/reactos/subsys/system/explorer/shell/ntobjfs.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/shellbrowser.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/shellfs.cpp
Modified: trunk/reactos/subsys/system/explorer/shell/winfs.cpp
Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.h
_____
Modified: trunk/reactos/subsys/system/explorer/dialogs/searchprogram.cpp
--- trunk/reactos/subsys/system/explorer/dialogs/searchprogram.cpp
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/dialogs/searchprogram.cpp
2006-01-01 10:40:23 UTC (rev 20501)
@@ -246,6 +246,7 @@
item.iItem = ListView_InsertItem(_list_ctrl, &item); // We
could use the information in _sort to enable manual sorting while
populating the list.
item.mask = LVIF_TEXT;
+
item.iSubItem = 1;
item.pszText = (LPTSTR)(LPCTSTR)cache_entry._path;
ListView_SetItem(_list_ctrl, &item);
_____
Modified: trunk/reactos/subsys/system/explorer/explorer.h
--- trunk/reactos/subsys/system/explorer/explorer.h 2006-01-01
10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/explorer.h 2006-01-01
10:40:23 UTC (rev 20501)
@@ -26,11 +26,20 @@
//
+#define _LIGHT_STARTMENU
+#define _LAZY_ICONEXTRACT
+#define _SINGLE_ICONEXTRACT
+//#define _NO_WIN_FS
+
+
#include "utility/shellclasses.h"
#include "shell/entries.h"
+#ifndef _NO_WIN_FS
#include "shell/winfs.h"
+#endif
+
#include "shell/shellfs.h"
#ifndef ROSSHELL
_____
Modified: trunk/reactos/subsys/system/explorer/shell/entries.cpp
--- trunk/reactos/subsys/system/explorer/shell/entries.cpp
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/shell/entries.cpp
2006-01-01 10:40:23 UTC (rev 20501)
@@ -326,16 +326,20 @@
ICON_ID icon_id = ICID_NONE;
- if (get_path(path, COUNTOF(path)) &&
_tcsncmp(path,TEXT("::{"),3))
+ // not for ET_SHELL to display the correct desktop icon
+ if (_etype!=ET_SHELL && get_path(path, COUNTOF(path)))
icon_id = g_Globals._icon_cache.extract(path, flags);
if (icon_id == ICID_NONE) {
- if (!(flags & (ICF_OPEN|ICF_OVERLAYS))) {
+ if (!(flags & ICF_OVERLAYS)) {
IExtractIcon* pExtract;
if (SUCCEEDED(GetUIObjectOf(0, IID_IExtractIcon,
(LPVOID*)&pExtract))) {
unsigned gil_flags;
int idx;
+ if (flags & ICF_OPEN)
+ gil_flags |= GIL_OPENICON;
+
if
(SUCCEEDED(pExtract->GetIconLocation(GIL_FORSHELL, path, COUNTOF(path),
&idx, &gil_flags))) {
if (gil_flags & GIL_NOTFILENAME)
icon_id =
g_Globals._icon_cache.extract(pExtract, path, idx, flags);
@@ -377,7 +381,7 @@
const ShellPath& pidl_abs =
create_absolute_pidl();
LPCITEMIDLIST pidl = pidl_abs;
- int shgfi_flags = SHGFI_SYSICONINDEX|SHGFI_PIDL;
+ int shgfi_flags = SHGFI_PIDL;
if (!(flags & ICF_LARGE))
shgfi_flags |= SHGFI_SMALLICON;
@@ -385,15 +389,19 @@
if (flags & ICF_OPEN)
shgfi_flags |= SHGFI_OPENICON;
- // ICF_OVERLAYS is not supported in this case.
+ if (flags & ICF_SYSCACHE) {
+ assert(!(flags&ICF_OVERLAYS));
- HIMAGELIST himlSys = (HIMAGELIST)
SHGetFileInfo((LPCTSTR)pidl, 0, &sfi, sizeof(sfi), shgfi_flags);
- if (himlSys)
- icon_id =
g_Globals._icon_cache.add(sfi.iIcon);
- /*
- if (SHGetFileInfo((LPCTSTR)pidl, 0, &sfi,
sizeof(sfi), SHGFI_PIDL|SHGFI_ICON|(g_Globals._large_icons?
SHGFI_SMALLICON: 0)))
- icon_id =
g_Globals._icon_cache.add(sfi.hIcon)._id;
- */
+ HIMAGELIST himlSys = (HIMAGELIST)
SHGetFileInfo((LPCTSTR)pidl, 0, &sfi, sizeof(sfi),
SHGFI_SYSICONINDEX|shgfi_flags);
+ if (himlSys)
+ icon_id =
g_Globals._icon_cache.add(sfi.iIcon);
+ } else {
+ if (flags & ICF_OVERLAYS)
+ shgfi_flags |=
SHGFI_ADDOVERLAYS;
+
+ if (SHGetFileInfo((LPCTSTR)pidl, 0,
&sfi, sizeof(sfi), SHGFI_ICON|shgfi_flags))
+ icon_id =
g_Globals._icon_cache.add(sfi.hIcon);
+ }
}
}
@@ -675,9 +683,11 @@
memcpy(path+1, name, l*sizeof(TCHAR));
len += l+1;
- if ( etype == ET_WINDOWS && entry->_up
&& !(entry->_up->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
// a NTFS stream?
+#ifndef _NO_WIN_FS
+ if (etype == ET_WINDOWS && entry->_up &&
!(entry->_up->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
// a NTFS stream?
path[0] = TEXT(':');
else
+#endif
path[0] = TEXT('\\');
}
_____
Modified: trunk/reactos/subsys/system/explorer/shell/entries.h
--- trunk/reactos/subsys/system/explorer/shell/entries.h
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/shell/entries.h
2006-01-01 10:40:23 UTC (rev 20501)
@@ -28,7 +28,9 @@
enum ENTRY_TYPE {
ET_UNKNOWN,
+#ifndef _NO_WIN_FS
ET_WINDOWS,
+#endif
#ifdef __WINE__
ET_UNIX,
#endif
_____
Modified: trunk/reactos/subsys/system/explorer/shell/filechild.cpp
--- trunk/reactos/subsys/system/explorer/shell/filechild.cpp
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/shell/filechild.cpp
2006-01-01 10:40:23 UTC (rev 20501)
@@ -39,6 +39,7 @@
: super(hmdiclient),
_etype(etype)
{
+#ifndef _NO_WIN_FS
if (etype == ET_UNKNOWN)
#ifdef __WINE__
if (*path == '/')
@@ -46,6 +47,7 @@
else
#endif
_etype = ET_WINDOWS;
+#endif
_path = path;
@@ -134,20 +136,6 @@
_right = NULL;
switch(info._etype) {
- case ET_SHELL: { //@@ separate FileChildWindow into
ShellChildWindow, WinChildWindow, UnixChildWindow ?
- _root._drive_type = DRIVE_UNKNOWN;
- _root._sort_order = SORT_NAME;
-
- lstrcpy(drv, TEXT("\\"));
- lstrcpy(_root._volname, TEXT("Desktop"));
- _root._fs_flags = 0;
- lstrcpy(_root._fs, TEXT("Shell"));
-
- _root._entry = new ShellDirectory(GetDesktopFolder(),
DesktopFolderPath(), hwnd);
- const ShellChildWndInfo& shell_info = static_cast<const
ShellChildWndInfo&>(info);
- entry = _root.read_tree(&*shell_info._shell_path);
- break;}
-
#ifdef __WINE__
case ET_UNIX:
_root._drive_type = GetDriveType(info._path);
@@ -207,6 +195,7 @@
}
break;}
+#ifndef _NO_WIN_FS
default: // ET_WINDOWS
_root._drive_type = GetDriveType(info._path);
_root._sort_order = SORT_NAME;
@@ -217,6 +206,24 @@
lstrcpy(_root._path, drv);
_root._entry = new WinDirectory(_root._path);
entry =
_root.read_tree(info._path+_tcslen(_root._path));
+ break;
+#else
+ default:
+#endif
+
+ case ET_SHELL: { //@@ separate FileChildWindow into
ShellChildWindow, WinChildWindow, UnixChildWindow ?
+ _root._drive_type = DRIVE_UNKNOWN;
+ _root._sort_order = SORT_NAME;
+
+ lstrcpy(drv, TEXT("\\"));
+ lstrcpy(_root._volname, TEXT("Desktop"));
+ _root._fs_flags = 0;
+ lstrcpy(_root._fs, TEXT("Shell"));
+
+ _root._entry = new ShellDirectory(GetDesktopFolder(),
DesktopFolderPath(), hwnd);
+ const ShellChildWndInfo& shell_info = static_cast<const
ShellChildWndInfo&>(info);
+ entry = _root.read_tree(&*shell_info._shell_path);
+ break;}
}
if (_root._entry) {
_____
Modified: trunk/reactos/subsys/system/explorer/shell/mainframe.cpp
--- trunk/reactos/subsys/system/explorer/shell/mainframe.cpp
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/shell/mainframe.cpp
2006-01-01 10:40:23 UTC (rev 20501)
@@ -794,6 +794,7 @@
TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, BTNS_SEP, {0, 0},
0, 0};
+#ifndef _NO_WIN_FS
PTSTR p;
#ifndef _NO_REBAR
@@ -808,10 +809,12 @@
IDW_DRIVEBAR, 2, g_Globals._hInstance,
IDB_DRIVEBAR, &drivebarBtn, 1,
16, 13, 16, 13, sizeof(TBBUTTON));
#endif
+#endif
CheckMenuItem(_menu_info._hMenuView, ID_VIEW_DRIVE_BAR,
MF_BYCOMMAND|MF_CHECKED);
+#ifndef _NO_WIN_FS
GetLogicalDriveStrings(BUFFER_LEN, _drives);
// register windows drive root strings
@@ -835,6 +838,7 @@
while(*p++);
}
+#endif
#ifndef _NO_REBAR
@@ -856,6 +860,7 @@
rbBand.cx = 284;
SendMessage(_hwndrebar, RB_INSERTBAND, (WPARAM)-1,
(LPARAM)&rbBand);
+#ifndef _NO_WIN_FS
rbBand.fStyle |= RBBS_BREAK;
rbBand.lpText = TEXT("Drives");
rbBand.hwndChild = _hdrivebar;
@@ -864,6 +869,7 @@
rbBand.cx = 400;
SendMessage(_hwndrebar, RB_INSERTBAND, (WPARAM)-1,
(LPARAM)&rbBand);
#endif
+#endif
}
@@ -937,13 +943,13 @@
TCHAR buffer[MAX_PATH];
LPCTSTR path;
- ShellPath root_path = DesktopFolderPath();
+ ShellPath shell_path = DesktopFolderPath();
if (lparam) {
if (wparam & OWM_PIDL) {
// take over PIDL from lparam
- root_path.assign((LPCITEMIDLIST)lparam);
// create as "rooted" window
- FileSysShellPath fsp(root_path);
+
shell_path.assign((LPCITEMIDLIST)lparam); // create as "rooted"
window
+ FileSysShellPath fsp(shell_path);
path = fsp;
if (path) {
@@ -954,7 +960,7 @@
} else {
// take over path from lparam
path = (LPCTSTR)lparam;
- root_path = path; // create as
"rooted" window
+ shell_path = path; // create as
"rooted" window
}
} else {
///@todo read paths and window placements from
registry
@@ -972,7 +978,7 @@
OBJ_CONTEXT("create ShellChildWndInfo", path);
// Shell Namespace as default view
- ShellChildWndInfo create_info(_hmdiclient, path,
root_path);
+ ShellChildWndInfo create_info(_hmdiclient, path,
shell_path);
create_info._pos.showCmd = wparam&OWM_SEPARATE?
SW_SHOWNORMAL: SW_SHOWMAXIMIZED;
create_info._pos.rcNormalPosition.left =
CW_USEDEFAULT;
@@ -1010,6 +1016,7 @@
if (SendMessage(hwndClient, PM_DISPATCH_COMMAND,
MAKELONG(id,code), 0))
return 0;
+#ifndef _NO_WIN_FS
if (id>=ID_DRIVE_FIRST && id<=ID_DRIVE_FIRST+0xFF) {
TCHAR drv[_MAX_DRIVE], path[MAX_PATH];
LPCTSTR root = _drives;
@@ -1034,6 +1041,7 @@
return 1;
}
+#endif
switch(id) {
case ID_WINDOW_NEW: {
@@ -1064,9 +1072,11 @@
toggle_child(_hwnd, id, _hextrabar, 1);
break;
+#ifndef _NO_WIN_FS
case ID_VIEW_DRIVE_BAR:
toggle_child(_hwnd, id, _hdrivebar, 2);
break;
+#endif
#ifdef __WINE__
case ID_DRIVE_UNIX_FS: {
@@ -1174,10 +1184,12 @@
{
super::frame_get_clientspace(prect);
+#ifndef _NO_WIN_FS
if (IsWindowVisible(_hdrivebar)) {
ClientRect rt(_hdrivebar);
prect->top += rt.bottom+2;
}
+#endif
}
void MDIMainFrame::resize_frame(int cx, int cy)
@@ -1208,6 +1220,7 @@
// rect.bottom -= rt.bottom;
}
+#ifndef _NO_WIN_FS
if (IsWindowVisible(_hdrivebar)) {
SendMessage(_hdrivebar, WM_SIZE, 0, 0);
WindowRect rt(_hdrivebar);
@@ -1216,6 +1229,7 @@
rect.top = new_top;
// rect.bottom -= rt.bottom;
}
+#endif
}
if (IsWindowVisible(_hstatusbar)) {
@@ -1476,13 +1490,13 @@
TCHAR buffer[MAX_PATH];
LPCTSTR path;
- ShellPath root_path = DesktopFolderPath();
+ ShellPath shell_path = DesktopFolderPath();
if (lparam) {
if (wparam & OWM_PIDL) {
// take over PIDL from lparam
- root_path.assign((LPCITEMIDLIST)lparam);
// create as "rooted" window
- FileSysShellPath fsp(root_path);
+
shell_path.assign((LPCITEMIDLIST)lparam); // create as "rooted"
window
+ FileSysShellPath fsp(shell_path);
path = fsp;
if (path) {
@@ -1493,7 +1507,7 @@
} else {
// take over path from lparam
path = (LPCTSTR)lparam;
- root_path = path; // create as
"rooted" window
+ shell_path = path; // create as
"rooted" window
}
} else {
///@todo read paths and window placements from
registry
@@ -1501,10 +1515,15 @@
*buffer = '\0';
path = buffer;
- root_path = path;
+ shell_path = path;
}
- jump_to(root_path, wparam); //@todo content of
'path' not used any more
+ if (wparam & OWM_ROOTED)
+ _shellpath_info._root_shell_path = shell_path;
+ else
+ _shellpath_info._root_shell_path =
SpecialFolderPath(CSIDL_DESKTOP, _hwnd); // CSIDL_DRIVES
+
+ jump_to(shell_path, wparam); //@todo content of
'path' not used any more
return TRUE;} // success
default: def:
@@ -1620,8 +1639,6 @@
delete _shellBrowser.release();
}
- ///@todo use OWM_ROOTED flag
-
// create explorer treeview
if (_shellpath_info._open_mode & OWM_EXPLORE) {
if (!_left_hwnd) {
@@ -1709,7 +1726,6 @@
} else */{
_shellpath_info._open_mode = mode;
_shellpath_info._shell_path = path;
- _shellpath_info._root_shell_path =
SpecialFolderPath(CSIDL_DRIVES, _hwnd); //@@ path
update_shell_browser();
}
@@ -1726,7 +1742,6 @@
} else {
_shellpath_info._open_mode = mode;
_shellpath_info._shell_path = path;
- _shellpath_info._root_shell_path = path; //@@ MF
02.10.2005 was: SpecialFolderPath(CSIDL_DRIVES, _hwnd);
update_shell_browser();
}
_____
Modified: trunk/reactos/subsys/system/explorer/shell/mainframe.h
--- trunk/reactos/subsys/system/explorer/shell/mainframe.h
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/shell/mainframe.h
2006-01-01 10:40:23 UTC (rev 20501)
@@ -112,7 +112,9 @@
HWND _hmdiclient;
WindowHandle _hextrabar;
+#ifndef _NO_WIN_FS
WindowHandle _hdrivebar;
+#endif
protected:
LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam);
@@ -128,7 +130,9 @@
virtual bool go_to(LPCTSTR url, bool new_window);
+#ifndef _NO_WIN_FS
TCHAR _drives[BUFFER_LEN];
+#endif
};
#endif
_____
Modified: trunk/reactos/subsys/system/explorer/shell/ntobjfs.cpp
--- trunk/reactos/subsys/system/explorer/shell/ntobjfs.cpp
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/shell/ntobjfs.cpp
2006-01-01 10:40:23 UTC (rev 20501)
@@ -1,5 +1,5 @@
/*
- * Copyright 2004 Martin Fuchs
+ * Copyright 2004, 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -262,12 +262,14 @@
entry = NULL;
+#ifndef _NO_WIN_FS
if (*w32fd.cFileName>='A'
&&*w32fd.cFileName<='Z' && w32fd.cFileName[1]==':')
if
(!_tcsncmp(buffer,TEXT("\\??\\"),4) || // NT4
!_tcsncmp(buffer,TEXT("\\GLOBAL??"),9)) { // XP
w32fd.dwFileAttributes
|= FILE_ATTRIBUTE_DIRECTORY;
entry = new
WinDirectory(this, w32fd.cFileName);
}
+#endif
if (!entry)
entry = new NtObjDirectory(this,
buffer);
_____
Modified: trunk/reactos/subsys/system/explorer/shell/shellbrowser.cpp
--- trunk/reactos/subsys/system/explorer/shell/shellbrowser.cpp
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/shell/shellbrowser.cpp
2006-01-01 10:40:23 UTC (rev 20501)
@@ -117,26 +117,31 @@
//LOG(FmtString(TEXT("ShellBrowser::jump_to(): pidl=%s"),
(LPCTSTR)FileSysShellPath(pidl)));
+ // We could call read_tree() here to iterate through the
hierarchy and open all folders
+ // from _create_info._root_shell_path (_cur_dir) to
_create_info._shell_path (pidl).
+ // To make it easier we just use ILFindChild() instead.
if (_cur_dir) {
static DynamicFct<LPITEMIDLIST(WINAPI*)(LPCITEMIDLIST,
LPCITEMIDLIST)> ILFindChild(TEXT("SHELL32"), 24);
-/*@todo
- we should call read_tree() here to iterate through the hierarchy
and open all folders from _create_info._root_shell_path (_cur_dir) to
_create_info._shell_path (pidl)
-
_root._entry->read_tree(_create_info._root_shell_path.get_folder(),
info._shell_path, SORT_NAME);
- -> see
FileChildWindow::FileChildWindow()_create_info._shell_path
-*/
+ if (ILFindChild) {
+ for(;;) {
+ LPCITEMIDLIST child_pidl =
(*ILFindChild)(_cur_dir->create_absolute_pidl(), pidl);
+ if (!child_pidl || !child_pidl->mkid.cb)
+ break;
- LPCITEMIDLIST child_pidl;
+ _cur_dir->smart_scan();
- if (ILFindChild)
- child_pidl =
(*ILFindChild)(_cur_dir->create_absolute_pidl(), pidl);
- else
- child_pidl = pidl; // This is not correct
in the common case, but works on the desktop level.
+ entry =
_cur_dir->find_entry(child_pidl);
+ if (!entry)
+ break;
- if (child_pidl) {
+ _cur_dir =
static_cast<ShellDirectory*>(entry);
+ _callback->entry_selected(entry);
+ }
+ } else {
_cur_dir->smart_scan();
- entry = _cur_dir->find_entry(child_pidl);
+ entry = _cur_dir->find_entry(pidl); // This
is not correct in the common case, but works on the desktop level.
if (entry) {
_cur_dir =
static_cast<ShellDirectory*>(entry);
@@ -145,7 +150,7 @@
}
}
- //@@ work around as long as we don't iterate correctly
through the ShellEntry tree
+ // If not already called, now directly call UpdateFolderView()
using pidl
if (!entry)
UpdateFolderView(ShellFolder(pidl));
}
@@ -325,6 +330,12 @@
HandleException(e, g_Globals._hMainWnd);
}
+ // remove old children items
+ for(HTREEITEM hchild,hnext=TreeView_GetChild(_left_hwnd,
hParentItem); hchild=hnext; ) {
+ hnext = TreeView_GetNextSibling(_left_hwnd, hchild);
+ TreeView_DeleteItem(_left_hwnd, hchild);
+ }
+
TV_ITEM tvItem;
TV_INSERTSTRUCT tvInsert;
@@ -623,8 +634,6 @@
delete _shellBrowser.release();
}
- ///@todo use OWM_ROOTED flag
-
// create explorer treeview
if (_create_info._open_mode & OWM_EXPLORE) {
if (!_left_hwnd) {
_____
Modified: trunk/reactos/subsys/system/explorer/shell/shellfs.cpp
--- trunk/reactos/subsys/system/explorer/shell/shellfs.cpp
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/shell/shellfs.cpp
2006-01-01 10:40:23 UTC (rev 20501)
@@ -1,5 +1,5 @@
/*
- * Copyright 2003, 2004 Martin Fuchs
+ * Copyright 2003, 2004, 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -240,6 +240,7 @@
/*if (_folder.empty())
return;*/
+#ifndef _NO_WIN_FS
TCHAR buffer[MAX_PATH];
if ((scan_flags&SCAN_FILESYSTEM) && get_path(buffer,
COUNTOF(buffer)) && _tcsncmp(buffer,TEXT("::{"),3)) {
@@ -304,7 +305,7 @@
DWORD attribs = SFGAO_FILESYSTEM;
if (w32fd.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY)
- attribs |= SFGAO_FOLDER;
+ attribs |=
SFGAO_FOLDER|SFGAO_HASSUBFOLDER;
if (w32fd.dwFileAttributes &
FILE_ATTRIBUTE_READONLY)
attribs |= SFGAO_READONLY;
@@ -332,9 +333,11 @@
FindClose(hFind);
}
+ }
+ else // !SCAN_FILESYSTEM
+#endif
+ {
- } else { // !SCAN_FILESYSTEM
-
ShellItemEnumerator enumerator(_folder,
SHCONTF_FOLDERS|SHCONTF_NONFOLDERS|SHCONTF_INCLUDEHIDDEN|SHCONTF_SHAREAB
LE|SHCONTF_STORAGE);
TCHAR name[MAX_PATH];
_____
Modified: trunk/reactos/subsys/system/explorer/shell/winfs.cpp
--- trunk/reactos/subsys/system/explorer/shell/winfs.cpp
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/shell/winfs.cpp
2006-01-01 10:40:23 UTC (rev 20501)
@@ -1,5 +1,5 @@
/*
- * Copyright 2003, 2004 Martin Fuchs
+ * Copyright 2003, 2004, 2005 Martin Fuchs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -28,6 +28,8 @@
#include <precomp.h>
+#ifndef _NO_WIN_FS
+
//#include "winfs.h"
@@ -138,6 +140,19 @@
if (hFind != INVALID_HANDLE_VALUE) {
do {
+#ifdef _NO_WIN_FS //@todo not really correct: We shouldn't hide .
and ..
+ // ignore hidden files (usefull in the start
menu)
+ if (w32fd.dwFileAttributes &
FILE_ATTRIBUTE_HIDDEN)
+ continue;
+
+ // ignore directory entries "." and ".."
+ if
((w32fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) &&
+ w32fd.cFileName[0]==TEXT('.') &&
+ (w32fd.cFileName[1]==TEXT('\0') ||
+ (w32fd.cFileName[1]==TEXT('.') &&
w32fd.cFileName[2]==TEXT('\0'))))
+ continue;
+#endif
+
lstrcpy(pname+1, w32fd.cFileName);
if (w32fd.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY)
@@ -175,7 +190,8 @@
last = entry; // There is always at least one
entry, because FindFirstFile() succeeded and we don't filter the file
entries.
} while(FindNextFile(hFind, &w32fd));
- last->_next = NULL;
+ if (last)
+ last->_next = NULL;
FindClose(hFind);
}
@@ -245,3 +261,5 @@
return ShellPath();
}
+
+#endif // _NO_WIN_FS
_____
Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.h
--- trunk/reactos/subsys/system/explorer/taskbar/startmenu.h
2006-01-01 10:31:35 UTC (rev 20500)
+++ trunk/reactos/subsys/system/explorer/taskbar/startmenu.h
2006-01-01 10:40:23 UTC (rev 20501)
@@ -26,11 +26,6 @@
//
-#define _LIGHT_STARTMENU
-#define _LAZY_ICONEXTRACT
-#define _SINGLE_ICONEXTRACT
-
-
#define CLASSNAME_STARTMENU
TEXT("ReactosStartmenuClass")
#define TITLE_STARTMENU TEXT("Start Menu")