- Allow creating a copy of a file residing in the same directory
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Fri, 18 Sep 2009 00:48:47 +0000 (00:48 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Fri, 18 Sep 2009 00:48:47 +0000 (00:48 +0000)
- Free the correct the buffer
- Romanian language needs to be updated
See issue #4846 for more details.

svn path=/trunk/; revision=43070

34 files changed:
reactos/dll/win32/shell32/lang/bg-BG.rc
reactos/dll/win32/shell32/lang/ca-ES.rc
reactos/dll/win32/shell32/lang/cs-CZ.rc
reactos/dll/win32/shell32/lang/da-DK.rc
reactos/dll/win32/shell32/lang/de-DE.rc
reactos/dll/win32/shell32/lang/el-GR.rc
reactos/dll/win32/shell32/lang/en-GB.rc
reactos/dll/win32/shell32/lang/en-US.rc
reactos/dll/win32/shell32/lang/es-ES.rc
reactos/dll/win32/shell32/lang/fi-FI.rc
reactos/dll/win32/shell32/lang/fr-FR.rc
reactos/dll/win32/shell32/lang/hu-HU.rc
reactos/dll/win32/shell32/lang/it-IT.rc
reactos/dll/win32/shell32/lang/ja-JP.rc
reactos/dll/win32/shell32/lang/ko-KR.rc
reactos/dll/win32/shell32/lang/nl-NL.rc
reactos/dll/win32/shell32/lang/no-NO.rc
reactos/dll/win32/shell32/lang/pl-PL.rc
reactos/dll/win32/shell32/lang/pt-BR.rc
reactos/dll/win32/shell32/lang/pt-PT.rc
reactos/dll/win32/shell32/lang/ru-RU.rc
reactos/dll/win32/shell32/lang/sk-SK.rc
reactos/dll/win32/shell32/lang/sl-SI.rc
reactos/dll/win32/shell32/lang/sv-SE.rc
reactos/dll/win32/shell32/lang/tr-TR.rc
reactos/dll/win32/shell32/lang/uk-UA.rc
reactos/dll/win32/shell32/lang/zh-CN.rc
reactos/dll/win32/shell32/lang/zh-TW.rc
reactos/dll/win32/shell32/precomp.h
reactos/dll/win32/shell32/shfldr_desktop.c
reactos/dll/win32/shell32/shfldr_fs.c
reactos/dll/win32/shell32/shresdef.h
reactos/dll/win32/shell32/shv_def_cmenu.c
reactos/dll/win32/shell32/undocshell.h

index 20d27e5..121ae83 100644 (file)
@@ -749,6 +749,7 @@ BEGIN
        IDS_INSTALLNEWFONT          "Ñëàãàíå íà íîâ øðèôò..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Ïîäðàçáèðàí ðàçïðåäåëèòåëåí ðàçìåð"
+       IDS_COPY_OF                 "Copy of"
 END
 
 
index 0cc5637..df5cb9e 100644 (file)
@@ -748,4 +748,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index ae55c09..e63d18e 100644 (file)
@@ -749,4 +749,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index ed88640..40e1eab 100644 (file)
@@ -737,4 +737,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index 4fddb91..cb3cb1b 100644 (file)
@@ -752,4 +752,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Neue Schriftart installieren..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Standardgröße"
+       IDS_COPY_OF                 "Kopie von"
 END
index daffadd..6b35ec3 100644 (file)
@@ -749,4 +749,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index 4ed09ad..38203c2 100644 (file)
@@ -748,4 +748,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index 236ca82..63d38cb 100644 (file)
@@ -748,4 +748,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index 70188d3..0c2b6e2 100644 (file)
@@ -751,4 +751,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Instalar Nueva Fuente..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Tamaño asignado por defecto"
+       IDS_COPY_OF                 "Copy of"
 END
index a06449d..2a1dad7 100644 (file)
@@ -748,4 +748,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index d2ea3e0..7e3034c 100644 (file)
@@ -752,4 +752,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Installer une nouvelle police..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Taille d'allocation par défaut"
+       IDS_COPY_OF                 "Copy of"
 END
index 3fb8611..6538e15 100644 (file)
@@ -751,4 +751,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index 5788b1a..fc6ec88 100644 (file)
@@ -749,4 +749,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Installazione nuovi Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Dimensione predefinita di allocazione"
+       IDS_COPY_OF                 "Copy of"
 END
index b627fc8..ca84aec 100644 (file)
@@ -749,4 +749,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "\90V\82µ\82¢\83t\83H\83\93\83g\82Ì\83C\83\93\83X\83g\81[\83\8b..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "\83f\83t\83H\83\8b\83\83A\83\8d\83P\81[\83V\83\87\83\93 \83T\83C\83Y"
+       IDS_COPY_OF                 "Copy of"
 END
index 0f7edd8..e9e67b7 100644 (file)
@@ -748,4 +748,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index eb995a6..5ff6c83 100644 (file)
@@ -748,4 +748,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index 3a694bc..90dc27d 100644 (file)
@@ -751,5 +751,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Installere nye skrifttyper..."
 
         IDS_DEFAULT_CLUSTER_SIZE    "Standard tildelingsstørrelse"
-
+       IDS_COPY_OF                 "Copy of"
 END
index 25a4fbe..c787782 100644 (file)
@@ -755,4 +755,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Zainstaluj Now¹ Czcionkê..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Domy\9clny rozmiar jednostki alokacji"
+       IDS_COPY_OF                 "Copy of"
 END
index 1df03c1..048d4c3 100644 (file)
@@ -750,4 +750,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index 665acd7..c20e670 100644 (file)
@@ -750,4 +750,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index a124b7b..7d6e1e1 100644 (file)
@@ -747,4 +747,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Óñòàíîâèòü íîâûé øðèôò..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Âûäåëÿåìûé ïî óìîë÷àíèþ ðàçìåð"
+       IDS_COPY_OF                 "Copy of"
 END
index b3a8c87..b68d385 100644 (file)
@@ -754,4 +754,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "&Nain\9atalova\9d nové písmo..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Predvolená alokaèná ve¾kos\9d" //Default allocation size
+       IDS_COPY_OF                 "Copy of"
 END
index 1d37650..876be4b 100644 (file)
@@ -748,4 +748,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index 0723e47..e7a520f 100644 (file)
@@ -748,4 +748,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index 7c422f1..49a154c 100644 (file)
@@ -748,4 +748,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
index 081467e..3846965 100644 (file)
@@ -749,4 +749,5 @@ BEGIN
        IDS_INSTALLNEWFONT          "²íñòàëþâàòè íîâèé øðèôò..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Ðîçì³ð êëàñòåðà çà ïðîìîâ÷àííÿì"
+       IDS_COPY_OF                 "Copy of"
 END
index 88f3668..5180db5 100644 (file)
@@ -736,5 +736,6 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
+       IDS_COPY_OF                 "Copy of"
 END
 
index de647ec..fc76bf1 100644 (file)
@@ -749,7 +749,7 @@ BEGIN
        IDS_INSTALLNEWFONT          "Install New Font..."
 
        IDS_DEFAULT_CLUSTER_SIZE    "Default allocation size"
-
+       IDS_COPY_OF                 "Copy of"
 END
 
 #pragma code_page(default)
index 22c4ab6..affe470 100644 (file)
@@ -60,6 +60,7 @@
 #include "version.h"
 #include "shellfolder.h"
 #include "xdg.h"
+#include "shellapi.h"
 
 #include "wine/debug.h"
 #include "wine/unicode.h"
index 6e44ac2..0222fe2 100644 (file)
@@ -1289,8 +1289,8 @@ ISF_Desktop_ISFHelper_fnCopyItems (ISFHelper * iface, IShellFolder * pSFFrom, UI
     WCHAR szTargetPath[MAX_PATH];
     SHFILEOPSTRUCTW op;
     LPITEMIDLIST pidl;
-    LPWSTR pszSrc, pszTarget, pszSrcList, pszTargetList;
-    int res;
+    LPWSTR pszSrc, pszTarget, pszSrcList, pszTargetList, pszFileName;
+    int res, length;
     STRRET strRet;
     IGenericSFImpl *This = impl_from_ISFHelper(iface);
 
@@ -1377,8 +1377,28 @@ ISF_Desktop_ISFHelper_fnCopyItems (ISFHelper * iface, IShellFolder * pSFFrom, UI
 
         res = SHFileOperationW(&op);
 
-        HeapFree(GetProcessHeap(), 0, pszSrc);
-        HeapFree(GetProcessHeap(), 0, pszTarget);
+        if (res == DE_SAMEFILE)
+        {
+            length = wcslen(szTargetPath);
+
+
+            pszFileName = wcsrchr(pszSrcList, '\\');
+            pszFileName++;
+
+            if (LoadStringW(shell32_hInstance, IDS_COPY_FROM, pszTarget, MAX_PATH - length))
+            {
+                wcscat(szTargetPath, L" ");
+            }
+
+            wcscat(szTargetPath, pszFileName);
+            op.pTo = szTargetPath;
+
+            res = SHFileOperationW(&op);
+        }
+
+
+        HeapFree(GetProcessHeap(), 0, pszSrcList);
+        HeapFree(GetProcessHeap(), 0, pszTargetList);
 
         if (res)
             return E_FAIL;
index 072e674..5f7c84b 100644 (file)
@@ -1260,16 +1260,17 @@ ISFHelper_fnCopyItems (ISFHelper * iface, IShellFolder * pSFFrom, UINT cidl,
     WCHAR szTargetPath[MAX_PATH];
     SHFILEOPSTRUCTW op;
     LPITEMIDLIST pidl;
-    LPWSTR pszSrc, pszTarget, pszSrcList, pszTargetList;
-    int res;
+    LPWSTR pszSrc, pszTarget, pszSrcList, pszTargetList, pszFileName;
+    int res, length;
+    HRESULT hr;
     STRRET strRet;
 
     IGenericSFImpl *This = impl_from_ISFHelper(iface);
 
     TRACE ("(%p)->(%p,%u,%p)\n", This, pSFFrom, cidl, apidl);
 
-    IShellFolder_QueryInterface (pSFFrom, &IID_IPersistFolder2, (LPVOID *) & ppf2);
-    if (ppf2) 
+    hr = IShellFolder_QueryInterface (pSFFrom, &IID_IPersistFolder2, (LPVOID *) & ppf2);
+    if (SUCCEEDED(hr))
     {
         if (FAILED(IPersistFolder2_GetCurFolder (ppf2, &pidl)))
         {
@@ -1349,8 +1350,26 @@ ISFHelper_fnCopyItems (ISFHelper * iface, IShellFolder * pSFFrom, UINT cidl,
 
         res = SHFileOperationW(&op);
 
-        HeapFree(GetProcessHeap(), 0, pszSrc);
-        HeapFree(GetProcessHeap(), 0, pszTarget);
+        if (res == DE_SAMEFILE)
+        {
+            length = wcslen(szTargetPath);
+
+            pszFileName = wcsrchr(pszSrcList, '\\');
+            pszFileName++;
+
+            if (LoadStringW(shell32_hInstance, IDS_COPY_FROM, pszTarget, MAX_PATH - length))
+            {
+                wcscat(szTargetPath, L" ");
+            }
+
+            wcscat(szTargetPath, pszFileName);
+            op.pTo = szTargetPath;
+
+            res = SHFileOperationW(&op);
+        }
+
+        HeapFree(GetProcessHeap(), 0, pszSrcList);
+        HeapFree(GetProcessHeap(), 0, pszTargetList);
 
         if (res)
             return E_FAIL;
index 9e4030b..e28efb0 100644 (file)
 #define IDS_RENAME                  328
 #define IDS_INSERT                  329
 #define IDS_DESCRIPTION             330
+#define IDS_COPY_OF                 331
 
 /* Note: this string is referenced from the registry */
 #define IDS_RECYCLEBIN_FOLDER_NAME   8964
index ea146a9..c63e16b 100644 (file)
@@ -1052,7 +1052,12 @@ DoPaste(
         return E_FAIL;
     }
 
-    if (FAILED(IShellFolder_BindToObject(psfDesktop, pidl, NULL, &IID_IShellFolder, (LPVOID*)&psfFrom)))
+    if (_ILIsDesktop(pidl))
+    {
+        /* use desktop shellfolder */
+        psfFrom = psfDesktop;
+    }
+    else if (FAILED(IShellFolder_BindToObject(psfDesktop, pidl, NULL, &IID_IShellFolder, (LPVOID*)&psfFrom)))
     {
         ERR("no IShellFolder\n");
 
index 4f8c999..c56da79 100644 (file)
@@ -81,6 +81,8 @@ BOOL WINAPI StrRetToStrNW(LPWSTR,DWORD,LPSTRRET,const ITEMIDLIST*);
 #define RFF_NOLABEL        0x08
 #define RFF_NOSEPARATEMEM  0x20  /* NT only */
 
+#define DE_SAMEFILE 0x71
+
 /* RunFileFlg notification structure */
 typedef struct
 {