lean explorer: - correct folder display when using the "/e" command line option - handle owner draw menu messages in folder pane Modified: branches/lean-explorer/reactos/subsys/system/explorer/shell/mainframe.cp p Modified: branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser .cpp Modified: branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser .h _____
Modified: branches/lean-explorer/reactos/subsys/system/explorer/shell/mainframe.cp p --- branches/lean-explorer/reactos/subsys/system/explorer/shell/mainframe.cp p 2005-12-31 10:11:58 UTC (rev 20478) +++ branches/lean-explorer/reactos/subsys/system/explorer/shell/mainframe.cp p 2005-12-31 11:22:44 UTC (rev 20479) @@ -107,6 +107,8 @@
_shellBrowser = auto_ptr<ShellBrowserChild>(new ShellBrowserChild(_hwnd, _left_hwnd, _right_hwnd, _create_info, _cm_ifs));
+ _shellBrowser->Init(); + // update _shellBrowser->_clnt_rect ClientRect rect(_hwnd); resize_frame(rect.right, rect.bottom); @@ -312,11 +314,15 @@ break;
- default: + default: { + LRESULT res; + if (_shellBrowser.get()) - return _shellBrowser->WndProc(nmsg, wparam, lparam); - else - return super::WndProc(nmsg, wparam, lparam); + if (_shellBrowser->WndProc(nmsg, wparam, lparam, res)) + return res; + + return super::WndProc(nmsg, wparam, lparam); + } }
return 0; _____
Modified: branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser .cpp --- branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser .cpp 2005-12-31 10:11:58 UTC (rev 20478) +++ branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser .cpp 2005-12-31 11:22:44 UTC (rev 20479) @@ -48,6 +48,7 @@
ShellBrowserChild::ShellBrowserChild(HWND hwnd, HWND left_hwnd, WindowHandle& right_hwnd, ShellPathInfo& create_info, CtxMenuInterfaces& cm_ifs) : _hwnd(hwnd), + _hWndFrame(hwnd), _left_hwnd(left_hwnd), _right_hwnd(right_hwnd), _create_info(create_info), @@ -65,8 +66,6 @@
_himl = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_MASK|ILC_COLOR24, 2, 0); ImageList_SetBkColor(_himl, GetSysColor(COLOR_WINDOW)); - - Init(hwnd); }
ShellBrowserChild::~ShellBrowserChild() @@ -89,12 +88,10 @@ }
-LRESULT ShellBrowserChild::Init(HWND hWndFrame) +LRESULT ShellBrowserChild::Init() { CONTEXT("ShellBrowserChild::Init()");
- _hWndFrame = hWndFrame; - ClientRect rect(_hwnd);
const String& root_name = GetDesktopFolder().get_name(_create_info._root_shell_path, SHGDN_FORADDRESSBAR); @@ -271,7 +268,7 @@ ShellFolder folder = dir? dir->_folder: GetDesktopFolder(); LPCITEMIDLIST pidl = static_cast<ShellEntry*>(entry)->_pidl;
- CHECKERROR(ShellFolderContextMenu(folder, ::GetParent(hwndTreeView), 1, &pidl, pptScreen->x, pptScreen->y, _cm_ifs)); + CHECKERROR(ShellFolderContextMenu(folder, _hwnd, 1, &pidl, pptScreen->x, pptScreen->y, _cm_ifs)); } else { ShellPath shell_path = entry->create_absolute_pidl(); LPCITEMIDLIST pidl_abs = shell_path; @@ -501,11 +498,12 @@ }
-LRESULT ShellBrowserChild::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam) +bool ShellBrowserChild::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam, LRESULT& res) { switch(nmsg) { case WM_GETISHELLBROWSER: // for Registry Explorer Plugin - return (LRESULT)static_cast<IShellBrowser*>(this); + res = (LRESULT)static_cast<IShellBrowser*>(this); + return true;
// SDI integration: @@ -536,7 +534,8 @@
if (pt.x>=_split_pos-SPLIT_WIDTH/2 && pt.x<_split_pos+SPLIT_WIDTH/2+1) { SetCursor(LoadCursor(0, IDC_SIZEWE)); - return TRUE; + res = TRUE; + return true; } } goto def; @@ -590,10 +589,11 @@
default: def: - return DefWindowProc(_hwnd, nmsg, wparam, lparam); + return false; }
- return 0; + res = 0; + return true; }
int ShellBrowserChild::Command(int id, int code) @@ -718,38 +718,37 @@ { Entry* entry = NULL;
- ///@todo use OWM_EXPLORE flag in _create_info._open_mode - if (!_cur_dir) _cur_dir = static_cast<ShellDirectory*>(_root._entry);
-/*@todo - we should call read_tree() here to iterate through the hierarchy and open all folders from shell_info._root_shell_path to shell_info._shell_path - _root._entry->read_tree(shell_info._root_shell_path.get_folder(), info._shell_path, SORT_NAME); - -> see FileChildWindow::FileChildWindow() -*/ - if (_cur_dir) { static DynamicFct<LPITEMIDLIST(WINAPI*)(LPCITEMIDLIST, LPCITEMIDLIST)> ILFindChild(TEXT("SHELL32"), 24);
- LPCITEMIDLIST child_pidl; + if (ILFindChild) { + for(;;) { + LPCITEMIDLIST child_pidl = (*ILFindChild)(_cur_dir->create_absolute_pidl(), pidl); + if (!child_pidl || !child_pidl->mkid.cb) + break;
- 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. + _cur_dir->smart_scan();
- if (child_pidl) { + entry = _cur_dir->find_entry(child_pidl); + if (!entry) + break; + + jump_to(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) jump_to(entry); } }
- //@@ work around as long as we don't iterate correctly through the ShellEntry tree + // in case of any problem directly call UpdateFolderView() if (!entry) UpdateFolderView(ShellFolder(pidl)); } _____
Modified: branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser .h --- branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser .h 2005-12-31 10:11:58 UTC (rev 20478) +++ branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser .h 2005-12-31 11:22:44 UTC (rev 20479) @@ -122,11 +122,11 @@
HTREEITEM _last_sel;
public: - LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam); + bool WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam, LRESULT& res); int Command(int id, int code); int Notify(int id, NMHDR* pnmh);
- LRESULT Init(HWND hWndFrame); + LRESULT Init(); void InitializeTree(); int InsertSubitems(HTREEITEM hParentItem, Entry* entry); bool InitDragDrop();