Index: C:/ROS/reactos-clean/reactos/dll/win32/shell32/CDefView.cpp =================================================================== --- dll/win32/shell32/CDefView.cpp (revision 66437) +++ dll/win32/shell32/CDefView.cpp (working copy) @@ -1827,29 +1827,48 @@ */ LRESULT CDefView::OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) { + CComPtr ppf2; + PIDLIST_ABSOLUTE pidlParent; + BOOL bParent0 = FALSE, bParent1 = FALSE; PCIDLIST_ABSOLUTE *Pidls = reinterpret_cast(wParam); TRACE("(%p)(%p,%p,0x%08x)\n", this, Pidls[0], Pidls[1], lParam); + m_pSFParent->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2)); + if (ppf2 && SUCCEEDED(ppf2->GetCurFolder(&pidlParent))) + { + bParent0 = ILIsParent(pidlParent, Pidls[0], TRUE); + bParent1 = ILIsParent(pidlParent, Pidls[1], TRUE); + CoTaskMemFree(pidlParent); + } + switch (lParam) { case SHCNE_MKDIR: case SHCNE_CREATE: - LV_AddItem(ILFindLastID(Pidls[0])); + if (bParent0) + LV_AddItem(ILFindLastID(Pidls[0])); break; case SHCNE_RMDIR: case SHCNE_DELETE: - LV_DeleteItem(ILFindLastID(Pidls[0])); + if (bParent0) + LV_DeleteItem(ILFindLastID(Pidls[0])); break; case SHCNE_RENAMEFOLDER: case SHCNE_RENAMEITEM: - LV_RenameItem(ILFindLastID(Pidls[0]), ILFindLastID(Pidls[1])); + if (bParent0 && bParent1) + LV_RenameItem(ILFindLastID(Pidls[0]), ILFindLastID(Pidls[1])); + else if (bParent0) + LV_DeleteItem(ILFindLastID(Pidls[0])); + else if (bParent1) + LV_AddItem(ILFindLastID(Pidls[1])); break; case SHCNE_UPDATEITEM: - LV_RenameItem(ILFindLastID(Pidls[0]), ILFindLastID(Pidls[0])); + if (bParent0) + LV_RenameItem(ILFindLastID(Pidls[0]), ILFindLastID(Pidls[0])); break; case SHCNE_UPDATEDIR: