https://git.reactos.org/?p=reactos.git;a=commitdiff;h=46ff964e22a969377ec31…
commit 46ff964e22a969377ec312cbe6b7731a7f50942b
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Tue Aug 18 05:30:54 2020 +0900
Commit: GitHub <noreply(a)github.com>
CommitDate: Tue Aug 18 05:30:54 2020 +0900
[SHELL32] Implement Move To Folder (#3056)
- Add context menu item "Mo&ve to folder..." and implement the action.
- Implement the "Mo&ve to folder..." menu item of "Edit" menu
of Explorer.
CORE-11132
---
dll/win32/shell32/CCopyToMenu.cpp | 3 +-
.../shell32/{CCopyToMenu.h => CCopyToMoveToMenu.h} | 55 +++++++++-
dll/win32/shell32/CDefView.cpp | 1 +
dll/win32/shell32/CDefaultContextMenu.cpp | 22 +++-
dll/win32/shell32/CMakeLists.txt | 1 +
.../shell32/{CCopyToMenu.cpp => CMoveToMenu.cpp} | 111 ++++++++-------------
dll/win32/shell32/lang/bg-BG.rc | 4 +
dll/win32/shell32/lang/ca-ES.rc | 4 +
dll/win32/shell32/lang/cs-CZ.rc | 4 +
dll/win32/shell32/lang/da-DK.rc | 4 +
dll/win32/shell32/lang/de-DE.rc | 4 +
dll/win32/shell32/lang/el-GR.rc | 4 +
dll/win32/shell32/lang/en-GB.rc | 4 +
dll/win32/shell32/lang/en-US.rc | 4 +
dll/win32/shell32/lang/es-ES.rc | 4 +
dll/win32/shell32/lang/et-EE.rc | 4 +
dll/win32/shell32/lang/fi-FI.rc | 4 +
dll/win32/shell32/lang/fr-FR.rc | 4 +
dll/win32/shell32/lang/he-IL.rc | 4 +
dll/win32/shell32/lang/hi-IN.rc | 4 +
dll/win32/shell32/lang/hu-HU.rc | 4 +
dll/win32/shell32/lang/id-ID.rc | 4 +
dll/win32/shell32/lang/it-IT.rc | 4 +
dll/win32/shell32/lang/ja-JP.rc | 4 +
dll/win32/shell32/lang/ko-KR.rc | 4 +
dll/win32/shell32/lang/nl-NL.rc | 4 +
dll/win32/shell32/lang/no-NO.rc | 4 +
dll/win32/shell32/lang/pl-PL.rc | 4 +
dll/win32/shell32/lang/pt-BR.rc | 4 +
dll/win32/shell32/lang/pt-PT.rc | 4 +
dll/win32/shell32/lang/ro-RO.rc | 4 +
dll/win32/shell32/lang/ru-RU.rc | 4 +
dll/win32/shell32/lang/sk-SK.rc | 4 +
dll/win32/shell32/lang/sl-SI.rc | 4 +
dll/win32/shell32/lang/sq-AL.rc | 4 +
dll/win32/shell32/lang/sv-SE.rc | 4 +
dll/win32/shell32/lang/tr-TR.rc | 4 +
dll/win32/shell32/lang/uk-UA.rc | 4 +
dll/win32/shell32/lang/zh-CN.rc | 4 +
dll/win32/shell32/lang/zh-TW.rc | 4 +
dll/win32/shell32/precomp.h | 2 +-
dll/win32/shell32/res/rgs/movetomenu.rgs | 26 +++++
dll/win32/shell32/rgs_res.rc | 1 +
dll/win32/shell32/shell32.cpp | 1 +
dll/win32/shell32/shresdef.h | 6 ++
45 files changed, 286 insertions(+), 79 deletions(-)
diff --git a/dll/win32/shell32/CCopyToMenu.cpp b/dll/win32/shell32/CCopyToMenu.cpp
index bc1325bb86d..a20ed449abe 100644
--- a/dll/win32/shell32/CCopyToMenu.cpp
+++ b/dll/win32/shell32/CCopyToMenu.cpp
@@ -9,8 +9,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(shell);
-static HRESULT
-_GetCidlFromDataObject(IDataObject *pDataObject, CIDA** ppcida)
+HRESULT _GetCidlFromDataObject(IDataObject *pDataObject, CIDA** ppcida)
{
static CLIPFORMAT s_cfHIDA = 0;
if (s_cfHIDA == 0)
diff --git a/dll/win32/shell32/CCopyToMenu.h b/dll/win32/shell32/CCopyToMoveToMenu.h
similarity index 51%
rename from dll/win32/shell32/CCopyToMenu.h
rename to dll/win32/shell32/CCopyToMoveToMenu.h
index a56cba111de..da61ca14284 100644
--- a/dll/win32/shell32/CCopyToMenu.h
+++ b/dll/win32/shell32/CCopyToMoveToMenu.h
@@ -1,11 +1,13 @@
/*
* PROJECT: shell32
* LICENSE: GPL-2.0-or-later (
https://spdx.org/licenses/GPL-2.0-or-later)
- * PURPOSE: CopyTo implementation
+ * PURPOSE: CopyTo and MoveTo implementation
* COPYRIGHT: Copyright 2020 Katayama Hirofumi MZ (katayama.hirofumi.mz(a)gmail.com)
*/
#pragma once
+HRESULT _GetCidlFromDataObject(IDataObject *pDataObject, CIDA** ppcida);
+
class CCopyToMenu :
public CComCoClass<CCopyToMenu, &CLSID_CopyToMenu>,
public CComObjectRootEx<CComMultiThreadModelNoCS>,
@@ -56,3 +58,54 @@ public:
COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
END_COM_MAP()
};
+
+class CMoveToMenu :
+ public CComCoClass<CMoveToMenu, &CLSID_MoveToMenu>,
+ public CComObjectRootEx<CComMultiThreadModelNoCS>,
+ public IContextMenu2,
+ public IObjectWithSite,
+ public IShellExtInit
+{
+protected:
+ UINT m_idCmdFirst, m_idCmdLast, m_idCmdMoveTo;
+ CComPtr<IDataObject> m_pDataObject;
+ CComPtr<IUnknown> m_pSite;
+
+ HRESULT DoMoveToFolder(LPCMINVOKECOMMANDINFO lpici);
+ HRESULT DoRealMove(LPCMINVOKECOMMANDINFO lpici, PCUIDLIST_ABSOLUTE pidl);
+ CStringW DoGetFileTitle();
+
+public:
+ CComHeapPtr<ITEMIDLIST> m_pidlFolder;
+ WNDPROC m_fnOldWndProc;
+
+ CMoveToMenu();
+ ~CMoveToMenu();
+
+ // IContextMenu
+ virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFirst,
UINT idCmdLast, UINT uFlags);
+ virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi);
+ virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT
*lpReserved, LPSTR lpszName, UINT uMaxNameLen);
+
+ // IContextMenu2
+ virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+ // IShellExtInit
+ virtual HRESULT WINAPI Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj,
HKEY hkeyProgID);
+
+ // IObjectWithSite
+ virtual HRESULT WINAPI SetSite(IUnknown *pUnkSite);
+ virtual HRESULT WINAPI GetSite(REFIID riid, void **ppvSite);
+
+ DECLARE_REGISTRY_RESOURCEID(IDR_MOVETOMENU)
+ DECLARE_NOT_AGGREGATABLE(CMoveToMenu)
+
+ DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+ BEGIN_COM_MAP(CMoveToMenu)
+ COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2)
+ COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
+ COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit)
+ COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
+ END_COM_MAP()
+};
diff --git a/dll/win32/shell32/CDefView.cpp b/dll/win32/shell32/CDefView.cpp
index a42d4d495cb..6948e572958 100644
--- a/dll/win32/shell32/CDefView.cpp
+++ b/dll/win32/shell32/CDefView.cpp
@@ -1823,6 +1823,7 @@ LRESULT CDefView::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam,
BOOL &bHand
case FCIDM_SHVIEW_RENAME:
case FCIDM_SHVIEW_PROPERTIES:
case FCIDM_SHVIEW_COPYTO:
+ case FCIDM_SHVIEW_MOVETO:
return OnExplorerCommand(dwCmdID, TRUE);
case FCIDM_SHVIEW_INSERT:
diff --git a/dll/win32/shell32/CDefaultContextMenu.cpp
b/dll/win32/shell32/CDefaultContextMenu.cpp
index a717078f70b..30d1433df65 100644
--- a/dll/win32/shell32/CDefaultContextMenu.cpp
+++ b/dll/win32/shell32/CDefaultContextMenu.cpp
@@ -49,6 +49,7 @@ struct _StaticInvokeCommandMap_
{ "properties", FCIDM_SHVIEW_PROPERTIES},
{ "rename", FCIDM_SHVIEW_RENAME},
{ "copyto", FCIDM_SHVIEW_COPYTO },
+ { "moveto", FCIDM_SHVIEW_MOVETO },
};
class CDefaultContextMenu :
@@ -95,7 +96,7 @@ class CDefaultContextMenu :
HRESULT DoRename(LPCMINVOKECOMMANDINFO lpcmi);
HRESULT DoProperties(LPCMINVOKECOMMANDINFO lpcmi);
HRESULT DoCreateNewFolder(LPCMINVOKECOMMANDINFO lpici);
- HRESULT DoCopyToFolder(LPCMINVOKECOMMANDINFO lpici);
+ HRESULT DoCopyToMoveToFolder(LPCMINVOKECOMMANDINFO lpici, BOOL bCopy);
HRESULT InvokeShellExt(LPCMINVOKECOMMANDINFO lpcmi);
HRESULT InvokeRegVerb(LPCMINVOKECOMMANDINFO lpcmi);
DWORD BrowserFlagsFromVerb(LPCMINVOKECOMMANDINFO lpcmi, PStaticShellEntry
pEntry);
@@ -895,7 +896,7 @@ CDefaultContextMenu::DoProperties(
}
HRESULT
-CDefaultContextMenu::DoCopyToFolder(LPCMINVOKECOMMANDINFO lpici)
+CDefaultContextMenu::DoCopyToMoveToFolder(LPCMINVOKECOMMANDINFO lpici, BOOL bCopy)
{
HRESULT hr = E_FAIL;
if (!m_pDataObj)
@@ -905,7 +906,12 @@ CDefaultContextMenu::DoCopyToFolder(LPCMINVOKECOMMANDINFO lpici)
}
CComPtr<IContextMenu> pContextMenu;
- hr = SHCoCreateInstance(NULL, &CLSID_CopyToMenu, NULL, IID_PPV_ARG(IContextMenu,
&pContextMenu));
+ if (bCopy)
+ hr = SHCoCreateInstance(NULL, &CLSID_CopyToMenu, NULL,
+ IID_PPV_ARG(IContextMenu, &pContextMenu));
+ else
+ hr = SHCoCreateInstance(NULL, &CLSID_MoveToMenu, NULL,
+ IID_PPV_ARG(IContextMenu, &pContextMenu));
if (FAILED_UNEXPECTEDLY(hr))
return hr;
@@ -918,7 +924,10 @@ CDefaultContextMenu::DoCopyToFolder(LPCMINVOKECOMMANDINFO lpici)
if (FAILED_UNEXPECTEDLY(hr))
return hr;
- lpici->lpVerb = "copyto";
+ if (bCopy)
+ lpici->lpVerb = "copyto";
+ else
+ lpici->lpVerb = "moveto";
return pContextMenu->InvokeCommand(lpici);
}
@@ -1279,7 +1288,10 @@ CDefaultContextMenu::InvokeCommand(
Result = DoCreateNewFolder(&LocalInvokeInfo);
break;
case FCIDM_SHVIEW_COPYTO:
- Result = DoCopyToFolder(&LocalInvokeInfo);
+ Result = DoCopyToMoveToFolder(&LocalInvokeInfo, TRUE);
+ break;
+ case FCIDM_SHVIEW_MOVETO:
+ Result = DoCopyToMoveToFolder(&LocalInvokeInfo, FALSE);
break;
default:
Result = E_INVALIDARG;
diff --git a/dll/win32/shell32/CMakeLists.txt b/dll/win32/shell32/CMakeLists.txt
index aa51a47fe43..5c812e953e4 100644
--- a/dll/win32/shell32/CMakeLists.txt
+++ b/dll/win32/shell32/CMakeLists.txt
@@ -84,6 +84,7 @@ list(APPEND SOURCE
CNewMenu.cpp
CSendToMenu.cpp
CCopyToMenu.cpp
+ CMoveToMenu.cpp
CShellDispatch.cpp
CFolder.cpp
CFolderItems.cpp
diff --git a/dll/win32/shell32/CCopyToMenu.cpp b/dll/win32/shell32/CMoveToMenu.cpp
similarity index 73%
copy from dll/win32/shell32/CCopyToMenu.cpp
copy to dll/win32/shell32/CMoveToMenu.cpp
index bc1325bb86d..020a8e70b8a 100644
--- a/dll/win32/shell32/CCopyToMenu.cpp
+++ b/dll/win32/shell32/CMoveToMenu.cpp
@@ -1,7 +1,7 @@
/*
* PROJECT: shell32
* LICENSE: GPL-2.0-or-later (
https://spdx.org/licenses/GPL-2.0-or-later)
- * PURPOSE: CopyTo implementation
+ * PURPOSE: MoveTo implementation
* COPYRIGHT: Copyright 2020 Katayama Hirofumi MZ (katayama.hirofumi.mz(a)gmail.com)
*/
@@ -9,48 +9,14 @@
WINE_DEFAULT_DEBUG_CHANNEL(shell);
-static HRESULT
-_GetCidlFromDataObject(IDataObject *pDataObject, CIDA** ppcida)
-{
- static CLIPFORMAT s_cfHIDA = 0;
- if (s_cfHIDA == 0)
- {
- s_cfHIDA =
static_cast<CLIPFORMAT>(RegisterClipboardFormatW(CFSTR_SHELLIDLIST));
- }
-
- FORMATETC fmt = { s_cfHIDA, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
- STGMEDIUM medium;
-
- HRESULT hr = pDataObject->GetData(&fmt, &medium);
- if (FAILED_UNEXPECTEDLY(hr))
- return hr;
-
- LPVOID lpSrc = GlobalLock(medium.hGlobal);
- SIZE_T cbSize = GlobalSize(medium.hGlobal);
-
- *ppcida = reinterpret_cast<CIDA *>(::CoTaskMemAlloc(cbSize));
- if (*ppcida)
- {
- memcpy(*ppcida, lpSrc, cbSize);
- hr = S_OK;
- }
- else
- {
- ERR("Out of memory\n");
- hr = E_FAIL;
- }
- ReleaseStgMedium(&medium);
- return hr;
-}
-
-CCopyToMenu::CCopyToMenu() :
+CMoveToMenu::CMoveToMenu() :
m_idCmdFirst(0),
m_idCmdLast(0),
- m_idCmdCopyTo(-1)
+ m_idCmdMoveTo(-1)
{
}
-CCopyToMenu::~CCopyToMenu()
+CMoveToMenu::~CMoveToMenu()
{
}
@@ -59,8 +25,8 @@ CCopyToMenu::~CCopyToMenu()
static LRESULT CALLBACK
WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
- CCopyToMenu *this_ =
- reinterpret_cast<CCopyToMenu *>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
+ CMoveToMenu *this_ =
+ reinterpret_cast<CMoveToMenu *>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
switch (uMsg)
{
@@ -74,27 +40,27 @@ WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static int CALLBACK
BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
- CCopyToMenu *this_ =
- reinterpret_cast<CCopyToMenu *>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
+ CMoveToMenu *this_ =
+ reinterpret_cast<CMoveToMenu *>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
switch (uMsg)
{
case BFFM_INITIALIZED:
{
SetWindowLongPtr(hwnd, GWLP_USERDATA, lpData);
- this_ = reinterpret_cast<CCopyToMenu *>(lpData);
+ this_ = reinterpret_cast<CMoveToMenu *>(lpData);
// Select initial directory
SendMessageW(hwnd, BFFM_SETSELECTION, FALSE,
reinterpret_cast<LPARAM>(static_cast<LPCITEMIDLIST>(this_->m_pidlFolder)));
// Set caption
- CString strCaption(MAKEINTRESOURCEW(IDS_COPYITEMS));
+ CString strCaption(MAKEINTRESOURCEW(IDS_MOVEITEMS));
SetWindowTextW(hwnd, strCaption);
// Set OK button text
- CString strCopy(MAKEINTRESOURCEW(IDS_COPYBUTTON));
- SetDlgItemText(hwnd, IDOK, strCopy);
+ CString strMove(MAKEINTRESOURCEW(IDS_MOVEBUTTON));
+ SetDlgItemText(hwnd, IDOK, strMove);
// Subclassing
this_->m_fnOldWndProc =
@@ -126,7 +92,7 @@ BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
return FALSE;
}
-HRESULT CCopyToMenu::DoRealCopy(LPCMINVOKECOMMANDINFO lpici, LPCITEMIDLIST pidl)
+HRESULT CMoveToMenu::DoRealMove(LPCMINVOKECOMMANDINFO lpici, LPCITEMIDLIST pidl)
{
CComHeapPtr<CIDA> pCIDA;
HRESULT hr = _GetCidlFromDataObject(m_pDataObject, &pCIDA);
@@ -178,14 +144,14 @@ HRESULT CCopyToMenu::DoRealCopy(LPCMINVOKECOMMANDINFO lpici,
LPCITEMIDLIST pidl)
}
SHFILEOPSTRUCTW op = { lpici->hwnd };
- op.wFunc = FO_COPY;
+ op.wFunc = FO_MOVE;
op.pFrom = strFiles;
op.pTo = szPath;
op.fFlags = FOF_ALLOWUNDO;
return ((SHFileOperation(&op) == 0) ? S_OK : E_FAIL);
}
-CStringW CCopyToMenu::DoGetFileTitle()
+CStringW CMoveToMenu::DoGetFileTitle()
{
CStringW ret = L"(file)";
@@ -222,12 +188,12 @@ CStringW CCopyToMenu::DoGetFileTitle()
return ret;
}
-HRESULT CCopyToMenu::DoCopyToFolder(LPCMINVOKECOMMANDINFO lpici)
+HRESULT CMoveToMenu::DoMoveToFolder(LPCMINVOKECOMMANDINFO lpici)
{
WCHAR wszPath[MAX_PATH];
HRESULT hr = E_FAIL;
- TRACE("DoCopyToFolder(%p)\n", lpici);
+ TRACE("DoMoveToFolder(%p)\n", lpici);
if (!SHGetPathFromIDListW(m_pidlFolder, wszPath))
{
@@ -237,7 +203,7 @@ HRESULT CCopyToMenu::DoCopyToFolder(LPCMINVOKECOMMANDINFO lpici)
CStringW strFileTitle = DoGetFileTitle();
CStringW strTitle;
- strTitle.Format(IDS_COPYTOTITLE, static_cast<LPCWSTR>(strFileTitle));
+ strTitle.Format(IDS_MOVETOTITLE, static_cast<LPCWSTR>(strFileTitle));
BROWSEINFOW info = { lpici->hwnd };
info.pidlRoot = NULL;
@@ -248,14 +214,14 @@ HRESULT CCopyToMenu::DoCopyToFolder(LPCMINVOKECOMMANDINFO lpici)
CComHeapPtr<ITEMIDLIST> pidl(SHBrowseForFolder(&info));
if (pidl)
{
- hr = DoRealCopy(lpici, pidl);
+ hr = DoRealMove(lpici, pidl);
}
return hr;
}
HRESULT WINAPI
-CCopyToMenu::QueryContextMenu(HMENU hMenu,
+CMoveToMenu::QueryContextMenu(HMENU hMenu,
UINT indexMenu,
UINT idCmdFirst,
UINT idCmdLast,
@@ -264,17 +230,22 @@ CCopyToMenu::QueryContextMenu(HMENU hMenu,
MENUITEMINFOW mii;
UINT Count = 0;
- TRACE("CCopyToMenu::QueryContextMenu(%p, %u, %u, %u, %u)\n",
+ TRACE("CMoveToMenu::QueryContextMenu(%p, %u, %u, %u, %u)\n",
hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
m_idCmdFirst = m_idCmdLast = idCmdFirst;
// insert separator if necessary
+ CStringW strCopyTo(MAKEINTRESOURCEW(IDS_COPYTOMENU));
+ WCHAR szBuff[128];
ZeroMemory(&mii, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE;
+ mii.dwTypeData = szBuff;
+ mii.cch = _countof(szBuff);
if (GetMenuItemInfoW(hMenu, indexMenu - 1, TRUE, &mii) &&
- mii.fType != MFT_SEPARATOR)
+ mii.fType != MFT_SEPARATOR &&
+ !(mii.fType == MFT_STRING && CStringW(szBuff) == strCopyTo))
{
ZeroMemory(&mii, sizeof(mii));
mii.cbSize = sizeof(mii);
@@ -287,8 +258,8 @@ CCopyToMenu::QueryContextMenu(HMENU hMenu,
}
}
- // insert "Copy to folder..."
- CStringW strText(MAKEINTRESOURCEW(IDS_COPYTOMENU));
+ // insert "Move to folder..."
+ CStringW strText(MAKEINTRESOURCEW(IDS_MOVETOMENU));
ZeroMemory(&mii, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_ID | MIIM_TYPE;
@@ -298,7 +269,7 @@ CCopyToMenu::QueryContextMenu(HMENU hMenu,
mii.wID = m_idCmdLast;
if (InsertMenuItemW(hMenu, indexMenu, TRUE, &mii))
{
- m_idCmdCopyTo = m_idCmdLast++;
+ m_idCmdMoveTo = m_idCmdLast++;
++indexMenu;
++Count;
}
@@ -307,23 +278,23 @@ CCopyToMenu::QueryContextMenu(HMENU hMenu,
}
HRESULT WINAPI
-CCopyToMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
+CMoveToMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
{
HRESULT hr = E_FAIL;
- TRACE("CCopyToMenu::InvokeCommand(%p)\n", lpici);
+ TRACE("CMoveToMenu::InvokeCommand(%p)\n", lpici);
if (HIWORD(lpici->lpVerb) == 0)
{
- if (m_idCmdFirst + LOWORD(lpici->lpVerb) == m_idCmdCopyTo)
+ if (m_idCmdFirst + LOWORD(lpici->lpVerb) == m_idCmdMoveTo)
{
- hr = DoCopyToFolder(lpici);
+ hr = DoMoveToFolder(lpici);
}
}
else
{
- if (::lstrcmpiA(lpici->lpVerb, "copyto") == 0)
+ if (::lstrcmpiA(lpici->lpVerb, "moveto") == 0)
{
- hr = DoCopyToFolder(lpici);
+ hr = DoMoveToFolder(lpici);
}
}
@@ -331,7 +302,7 @@ CCopyToMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
}
HRESULT WINAPI
-CCopyToMenu::GetCommandString(UINT_PTR idCmd,
+CMoveToMenu::GetCommandString(UINT_PTR idCmd,
UINT uType,
UINT *pwReserved,
LPSTR pszName,
@@ -344,14 +315,14 @@ CCopyToMenu::GetCommandString(UINT_PTR idCmd,
}
HRESULT WINAPI
-CCopyToMenu::HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam)
+CMoveToMenu::HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
TRACE("This %p uMsg %x\n", this, uMsg);
return E_NOTIMPL;
}
HRESULT WINAPI
-CCopyToMenu::Initialize(PCIDLIST_ABSOLUTE pidlFolder,
+CMoveToMenu::Initialize(PCIDLIST_ABSOLUTE pidlFolder,
IDataObject *pdtobj, HKEY hkeyProgID)
{
m_pidlFolder.Attach(ILClone(pidlFolder));
@@ -359,13 +330,13 @@ CCopyToMenu::Initialize(PCIDLIST_ABSOLUTE pidlFolder,
return S_OK;
}
-HRESULT WINAPI CCopyToMenu::SetSite(IUnknown *pUnkSite)
+HRESULT WINAPI CMoveToMenu::SetSite(IUnknown *pUnkSite)
{
m_pSite = pUnkSite;
return S_OK;
}
-HRESULT WINAPI CCopyToMenu::GetSite(REFIID riid, void **ppvSite)
+HRESULT WINAPI CMoveToMenu::GetSite(REFIID riid, void **ppvSite)
{
if (!m_pSite)
return E_FAIL;
diff --git a/dll/win32/shell32/lang/bg-BG.rc b/dll/win32/shell32/lang/bg-BG.rc
index 56ca1049511..bbd769dbfe9 100644
--- a/dll/win32/shell32/lang/bg-BG.rc
+++ b/dll/win32/shell32/lang/bg-BG.rc
@@ -1003,4 +1003,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/ca-ES.rc b/dll/win32/shell32/lang/ca-ES.rc
index 8e920649408..5384ca39295 100644
--- a/dll/win32/shell32/lang/ca-ES.rc
+++ b/dll/win32/shell32/lang/ca-ES.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/cs-CZ.rc b/dll/win32/shell32/lang/cs-CZ.rc
index 4c86a7c5869..c5bcb89937c 100644
--- a/dll/win32/shell32/lang/cs-CZ.rc
+++ b/dll/win32/shell32/lang/cs-CZ.rc
@@ -1008,4 +1008,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/da-DK.rc b/dll/win32/shell32/lang/da-DK.rc
index 6bf29e180b5..f7b56f0c689 100644
--- a/dll/win32/shell32/lang/da-DK.rc
+++ b/dll/win32/shell32/lang/da-DK.rc
@@ -1008,4 +1008,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/de-DE.rc b/dll/win32/shell32/lang/de-DE.rc
index 42e29f229e3..54ea2e4af95 100644
--- a/dll/win32/shell32/lang/de-DE.rc
+++ b/dll/win32/shell32/lang/de-DE.rc
@@ -1003,4 +1003,8 @@ BEGIN
IDS_COPYTOTITLE "Wählen Sie den Ort, in den '%s' kopiert werden soll.
Klicken Sie anschließend auf Kopieren."
IDS_COPYITEMS "Elemente kopieren"
IDS_COPYBUTTON "Kopieren"
+ IDS_MOVETOMENU "In Ordner &verschieben..."
+ IDS_MOVETOTITLE "Wählen Sie den Ort, in den '%s' verschoben werden soll.
Klicken Sie anschließend auf Verschieben."
+ IDS_MOVEITEMS "Elemente verschieben"
+ IDS_MOVEBUTTON "Verschieben"
END
diff --git a/dll/win32/shell32/lang/el-GR.rc b/dll/win32/shell32/lang/el-GR.rc
index fd2bb3cfc42..897ce7ce517 100644
--- a/dll/win32/shell32/lang/el-GR.rc
+++ b/dll/win32/shell32/lang/el-GR.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/en-GB.rc b/dll/win32/shell32/lang/en-GB.rc
index 4d1f9e55495..ccbbe8e1f09 100644
--- a/dll/win32/shell32/lang/en-GB.rc
+++ b/dll/win32/shell32/lang/en-GB.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/en-US.rc b/dll/win32/shell32/lang/en-US.rc
index 21f06a42d42..b7b8d80b273 100644
--- a/dll/win32/shell32/lang/en-US.rc
+++ b/dll/win32/shell32/lang/en-US.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/es-ES.rc b/dll/win32/shell32/lang/es-ES.rc
index bdf04fd74a4..4cad05f2368 100644
--- a/dll/win32/shell32/lang/es-ES.rc
+++ b/dll/win32/shell32/lang/es-ES.rc
@@ -1011,4 +1011,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/et-EE.rc b/dll/win32/shell32/lang/et-EE.rc
index 8585ad68b08..aa53f7bd374 100644
--- a/dll/win32/shell32/lang/et-EE.rc
+++ b/dll/win32/shell32/lang/et-EE.rc
@@ -1009,4 +1009,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/fi-FI.rc b/dll/win32/shell32/lang/fi-FI.rc
index 80356afb3d5..e33bf0b7a1b 100644
--- a/dll/win32/shell32/lang/fi-FI.rc
+++ b/dll/win32/shell32/lang/fi-FI.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/fr-FR.rc b/dll/win32/shell32/lang/fr-FR.rc
index d209b586591..f032d9311d0 100644
--- a/dll/win32/shell32/lang/fr-FR.rc
+++ b/dll/win32/shell32/lang/fr-FR.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/he-IL.rc b/dll/win32/shell32/lang/he-IL.rc
index 8d469bf407e..4d5690c40e1 100644
--- a/dll/win32/shell32/lang/he-IL.rc
+++ b/dll/win32/shell32/lang/he-IL.rc
@@ -1004,4 +1004,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/hi-IN.rc b/dll/win32/shell32/lang/hi-IN.rc
index 59be1fd3cbf..ac380f56403 100644
--- a/dll/win32/shell32/lang/hi-IN.rc
+++ b/dll/win32/shell32/lang/hi-IN.rc
@@ -997,4 +997,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/hu-HU.rc b/dll/win32/shell32/lang/hu-HU.rc
index ea91a553c1f..7fa873b907b 100644
--- a/dll/win32/shell32/lang/hu-HU.rc
+++ b/dll/win32/shell32/lang/hu-HU.rc
@@ -1001,4 +1001,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/id-ID.rc b/dll/win32/shell32/lang/id-ID.rc
index 09571a9f2a6..d8b5a0d482f 100644
--- a/dll/win32/shell32/lang/id-ID.rc
+++ b/dll/win32/shell32/lang/id-ID.rc
@@ -998,4 +998,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/it-IT.rc b/dll/win32/shell32/lang/it-IT.rc
index ed3dac4bfc8..c7961cecae8 100644
--- a/dll/win32/shell32/lang/it-IT.rc
+++ b/dll/win32/shell32/lang/it-IT.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/ja-JP.rc b/dll/win32/shell32/lang/ja-JP.rc
index 3593c981ce7..4d49baf9bf2 100644
--- a/dll/win32/shell32/lang/ja-JP.rc
+++ b/dll/win32/shell32/lang/ja-JP.rc
@@ -999,4 +999,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/ko-KR.rc b/dll/win32/shell32/lang/ko-KR.rc
index 3c46406aab7..1c58188d4e9 100644
--- a/dll/win32/shell32/lang/ko-KR.rc
+++ b/dll/win32/shell32/lang/ko-KR.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/nl-NL.rc b/dll/win32/shell32/lang/nl-NL.rc
index 26b311387a5..c5b82b3b260 100644
--- a/dll/win32/shell32/lang/nl-NL.rc
+++ b/dll/win32/shell32/lang/nl-NL.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/no-NO.rc b/dll/win32/shell32/lang/no-NO.rc
index 1831921be23..4e5a739ff65 100644
--- a/dll/win32/shell32/lang/no-NO.rc
+++ b/dll/win32/shell32/lang/no-NO.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/pl-PL.rc b/dll/win32/shell32/lang/pl-PL.rc
index 44e4bde14f7..3f544061d55 100644
--- a/dll/win32/shell32/lang/pl-PL.rc
+++ b/dll/win32/shell32/lang/pl-PL.rc
@@ -1008,4 +1008,8 @@ BEGIN
IDS_COPYTOTITLE "Zaznacz miejsce, w które chcesz skopiować '%s', a
następnie kliknij przycisk Kopiuj."
IDS_COPYITEMS "Kopiowanie elementów"
IDS_COPYBUTTON "Kopiuj"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/pt-BR.rc b/dll/win32/shell32/lang/pt-BR.rc
index 9610e4e0fb6..1052bfe9250 100644
--- a/dll/win32/shell32/lang/pt-BR.rc
+++ b/dll/win32/shell32/lang/pt-BR.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/pt-PT.rc b/dll/win32/shell32/lang/pt-PT.rc
index f64de677bc9..8c027f41871 100644
--- a/dll/win32/shell32/lang/pt-PT.rc
+++ b/dll/win32/shell32/lang/pt-PT.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/ro-RO.rc b/dll/win32/shell32/lang/ro-RO.rc
index b4f0e6059aa..eb0f8eb660a 100644
--- a/dll/win32/shell32/lang/ro-RO.rc
+++ b/dll/win32/shell32/lang/ro-RO.rc
@@ -1004,4 +1004,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/ru-RU.rc b/dll/win32/shell32/lang/ru-RU.rc
index 406a0937b34..9080370a56f 100644
--- a/dll/win32/shell32/lang/ru-RU.rc
+++ b/dll/win32/shell32/lang/ru-RU.rc
@@ -1009,4 +1009,8 @@ BEGIN
IDS_COPYTOTITLE "Выберите расположение, куда вы хотите скопировать '%s',
затем нажмите кнопку 'Копировать'."
IDS_COPYITEMS "Копирование элементов"
IDS_COPYBUTTON "Копировать"
+ IDS_MOVETOMENU "Переместить в папку..."
+ IDS_MOVETOTITLE "Выберите место, куда Вы хотите переместить '%s'. Затем
нажмите кнопку 'Переместить.'"
+ IDS_MOVEITEMS "Перемещение предметов"
+ IDS_MOVEBUTTON "Переместить"
END
diff --git a/dll/win32/shell32/lang/sk-SK.rc b/dll/win32/shell32/lang/sk-SK.rc
index 93e87e85cad..1c50c821e27 100644
--- a/dll/win32/shell32/lang/sk-SK.rc
+++ b/dll/win32/shell32/lang/sk-SK.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/sl-SI.rc b/dll/win32/shell32/lang/sl-SI.rc
index eca49866975..720ebe4bf81 100644
--- a/dll/win32/shell32/lang/sl-SI.rc
+++ b/dll/win32/shell32/lang/sl-SI.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/sq-AL.rc b/dll/win32/shell32/lang/sq-AL.rc
index fa69346d878..8834bd41517 100644
--- a/dll/win32/shell32/lang/sq-AL.rc
+++ b/dll/win32/shell32/lang/sq-AL.rc
@@ -1006,4 +1006,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/sv-SE.rc b/dll/win32/shell32/lang/sv-SE.rc
index a81f73f5c6a..df2a3b42eaa 100644
--- a/dll/win32/shell32/lang/sv-SE.rc
+++ b/dll/win32/shell32/lang/sv-SE.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/tr-TR.rc b/dll/win32/shell32/lang/tr-TR.rc
index 519103301b3..f31eef1ddb8 100644
--- a/dll/win32/shell32/lang/tr-TR.rc
+++ b/dll/win32/shell32/lang/tr-TR.rc
@@ -1004,4 +1004,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/uk-UA.rc b/dll/win32/shell32/lang/uk-UA.rc
index 62d8787ec23..d27d60b5808 100644
--- a/dll/win32/shell32/lang/uk-UA.rc
+++ b/dll/win32/shell32/lang/uk-UA.rc
@@ -1002,4 +1002,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/zh-CN.rc b/dll/win32/shell32/lang/zh-CN.rc
index a07f3cfdaf6..44e03161cd2 100644
--- a/dll/win32/shell32/lang/zh-CN.rc
+++ b/dll/win32/shell32/lang/zh-CN.rc
@@ -1012,4 +1012,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/lang/zh-TW.rc b/dll/win32/shell32/lang/zh-TW.rc
index c634e81d2f4..7077460b6a5 100644
--- a/dll/win32/shell32/lang/zh-TW.rc
+++ b/dll/win32/shell32/lang/zh-TW.rc
@@ -1013,4 +1013,8 @@ BEGIN
IDS_COPYTOTITLE "Select the place where you want to copy '%s'. Then
click the Copy button."
IDS_COPYITEMS "Copy Items"
IDS_COPYBUTTON "Copy"
+ IDS_MOVETOMENU "Mo&ve to folder..."
+ IDS_MOVETOTITLE "Select the place where you want to move '%s' to. Then
click the Move button."
+ IDS_MOVEITEMS "Move Items"
+ IDS_MOVEBUTTON "Move"
END
diff --git a/dll/win32/shell32/precomp.h b/dll/win32/shell32/precomp.h
index 2703b42e817..84bb7e49dc5 100644
--- a/dll/win32/shell32/precomp.h
+++ b/dll/win32/shell32/precomp.h
@@ -81,7 +81,7 @@
#include "COpenWithMenu.h"
#include "CNewMenu.h"
#include "CSendToMenu.h"
-#include "CCopyToMenu.h"
+#include "CCopyToMoveToMenu.h"
#include "dialogs/filedefext.h"
#include "dialogs/drvdefext.h"
#include "CQueryAssociations.h"
diff --git a/dll/win32/shell32/res/rgs/movetomenu.rgs
b/dll/win32/shell32/res/rgs/movetomenu.rgs
new file mode 100644
index 00000000000..5d72d749faa
--- /dev/null
+++ b/dll/win32/shell32/res/rgs/movetomenu.rgs
@@ -0,0 +1,26 @@
+HKCR
+{
+ NoRemove CLSID
+ {
+ ForceRemove {C2FBB631-2971-11D1-A18C-00C04FD75D13} = s 'ReactOS MoveTo Object
Service'
+ {
+ val flags = d '1'
+ InprocServer32 = s '%MODULE%'
+ {
+ val ThreadingModel = s 'Apartment'
+ }
+ }
+ }
+ NoRemove AllFilesystemObjects
+ {
+ NoRemove shellex
+ {
+ NoRemove ContextMenuHandlers
+ {
+ ForceRemove MoveTo = s '{C2FBB631-2971-11D1-A18C-00C04FD75D13}'
+ {
+ }
+ }
+ }
+ }
+}
diff --git a/dll/win32/shell32/rgs_res.rc b/dll/win32/shell32/rgs_res.rc
index 9435241aaaa..9c5aacd0c48 100644
--- a/dll/win32/shell32/rgs_res.rc
+++ b/dll/win32/shell32/rgs_res.rc
@@ -31,3 +31,4 @@ IDR_SHELL REGISTRY "res/rgs/shell.rgs"
IDR_ACTIVEDESKTOP REGISTRY "res/rgs/activedesktop.rgs"
IDR_SENDTOMENU REGISTRY "res/rgs/sendtomenu.rgs"
IDR_COPYTOMENU REGISTRY "res/rgs/copytomenu.rgs"
+IDR_MOVETOMENU REGISTRY "res/rgs/movetomenu.rgs"
diff --git a/dll/win32/shell32/shell32.cpp b/dll/win32/shell32/shell32.cpp
index 527cbd29342..011d5b2980b 100644
--- a/dll/win32/shell32/shell32.cpp
+++ b/dll/win32/shell32/shell32.cpp
@@ -291,6 +291,7 @@ BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_NewMenu, CNewMenu)
OBJECT_ENTRY(CLSID_SendToMenu, CSendToMenu)
OBJECT_ENTRY(CLSID_CopyToMenu, CCopyToMenu)
+ OBJECT_ENTRY(CLSID_MoveToMenu, CMoveToMenu)
OBJECT_ENTRY(CLSID_StartMenu, CStartMenuDummy)
OBJECT_ENTRY(CLSID_MenuBandSite, CMenuSite)
OBJECT_ENTRY(CLSID_MenuBand, CMenuBand)
diff --git a/dll/win32/shell32/shresdef.h b/dll/win32/shell32/shresdef.h
index 81f22f97530..e3be5f4f255 100644
--- a/dll/win32/shell32/shresdef.h
+++ b/dll/win32/shell32/shresdef.h
@@ -301,6 +301,10 @@
#define IDS_COPYTOTITLE 30533
#define IDS_COPYITEMS 30534
#define IDS_COPYBUTTON 30535
+#define IDS_MOVETOMENU 30536
+#define IDS_MOVETOTITLE 30537
+#define IDS_MOVEITEMS 30538
+#define IDS_MOVEBUTTON 30539
/* Dialogs */
@@ -801,6 +805,7 @@
#define IDM_RENAME (FCIDM_SHVIEW_RENAME - 0x7000)
#define IDM_PROPERTIES (FCIDM_SHVIEW_PROPERTIES - 0x7000)
#define IDM_COPYTO (FCIDM_SHVIEW_COPYTO - 0x7000)
+#define IDM_MOVETO (FCIDM_SHVIEW_MOVETO - 0x7000)
#define IDM_DRAGFILE 0xce
#define IDM_COPYHERE 0x7
@@ -842,3 +847,4 @@
#define IDR_ACTIVEDESKTOP 157
#define IDR_SENDTOMENU 158
#define IDR_COPYTOMENU 159
+#define IDR_MOVETOMENU 160