On 2/9/07, Mikołaj Zalewski <[EMAIL PROTECTED]> wrote:
The return codes when the user cancelled the operation as in Vista, as
they are more logical and easier to implement than the XP ones. If
Microsoft changed them there are probably not many apps that would
depend on it. With this change the program in bug #7046 works fine.

From 799ff7b7cc6092fbd3e2030c7b4eb84d829b9842 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Miko=C5=82aj_Zalewski?= <[EMAIL PROTECTED]>
Date: Fri, 9 Feb 2007 16:43:06 +0100
Subject: [PATCH] shell32: allow overwriting files in SHFileOperation(FO_COPY) 
(with confirmation dialogs)

---
 dlls/shell32/shell32_Bg.rc     |    6 ++-
 dlls/shell32/shell32_Cs.rc     |    8 ++-
 dlls/shell32/shell32_De.rc     |    6 ++-
 dlls/shell32/shell32_En.rc     |    8 ++-
 dlls/shell32/shell32_Eo.rc     |    6 ++-
 dlls/shell32/shell32_Es.rc     |    6 ++-
 dlls/shell32/shell32_Fi.rc     |    6 ++-
 dlls/shell32/shell32_Fr.rc     |    6 ++-
 dlls/shell32/shell32_It.rc     |    6 ++-
 dlls/shell32/shell32_Ko.rc     |    6 ++-
 dlls/shell32/shell32_No.rc     |    6 ++-
 dlls/shell32/shell32_Pl.rc     |    6 ++-
 dlls/shell32/shell32_Pt.rc     |    6 ++-
 dlls/shell32/shell32_Ru.rc     |    6 ++-
 dlls/shell32/shell32_Tr.rc     |    6 ++-
 dlls/shell32/shell32_Uk.rc     |    6 ++-
 dlls/shell32/shell32_main.h    |    3 +-
 dlls/shell32/shfldr_unixfs.c   |    2 +-
 dlls/shell32/shlfileop.c       |  128 +++++++++++++++++++++++++++++++---------
 dlls/shell32/shresdef.h        |    1 +
 dlls/shell32/tests/shlfileop.c |   55 +++++++++++++++++
 21 files changed, 241 insertions(+), 48 deletions(-)

diff --git a/dlls/shell32/shell32_Bg.rc b/dlls/shell32/shell32_Bg.rc
index 100b9b6..4c4d16b 100644
--- a/dlls/shell32/shell32_Bg.rc
+++ b/dlls/shell32/shell32_Bg.rc
@@ -165,8 +165,12 @@ STRINGTABLE DISCARDABLE
        IDS_DELETEITEM_TEXT "Наистина ли искате да изтриете '%1'?"
        IDS_DELETEMULTIPLE_TEXT "Наистина ли искате да изтриете тези %1 
елемента?"
        IDS_DELETESELECTED_TEXT "Наистина ли искате да изтриете избраните 
елементи?"
-       IDS_OVERWRITEFILE_TEXT "Наистина ли искате да презапишете %1?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Потвърдете презаписа на файла"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

         /* message box strings */
         IDS_RESTART_TITLE       "Рестартиране"
diff --git a/dlls/shell32/shell32_Cs.rc b/dlls/shell32/shell32_Cs.rc
index 6451dbb..8790db4 100644
--- a/dlls/shell32/shell32_Cs.rc
+++ b/dlls/shell32/shell32_Cs.rc
@@ -163,10 +163,14 @@ STRINGTABLE DISCARDABLE
        IDS_CREATEFOLDER_CAPTION "Chyba pшi pokusu vytvoшit novэ adresбш"
        IDS_DELETEITEM_CAPTION "Potvrdit odstranмnн souboru"
        IDS_DELETEFOLDER_CAPTION "Potvrdit odstranмnн adresбшe"
-       IDS_OVERWRITEFILE_CAPTION "Potvrdit pшepsбnн souboru"
        IDS_DELETEITEM_TEXT "Opravdu chcete odstranit '%1'?"
        IDS_DELETEMULTIPLE_TEXT "Opravdu chcete odstranit tмchto %1 poloћek?"
-       IDS_OVERWRITEFILE_TEXT "Pшejete si pшepsat soubor '%1'?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
+       IDS_OVERWRITEFILE_CAPTION "Potvrdit pшepsбnн souboru"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"
 }

 /*     columns in the shellview        */
diff --git a/dlls/shell32/shell32_De.rc b/dlls/shell32/shell32_De.rc
index bde62bf..d6cb815 100644
--- a/dlls/shell32/shell32_De.rc
+++ b/dlls/shell32/shell32_De.rc
@@ -173,8 +173,12 @@ STRINGTABLE DISCARDABLE
        IDS_TRASHFOLDER_TEXT "Sind Sie sich sicher, dass Sie '%1' und seinen Inhalt 
in den Mьll verschieben mцchten?"
        IDS_TRASHMULTIPLE_TEXT "Sind Sie sich sicher, dass Sie diese %1 Dateien in 
den Mьll verschieben mцchten?"
        IDS_CANTTRASH_TEXT "Das Objekt '%1' kann nicht in den Mьll verschoben 
werden. Mцchten Sie es stattdessen lцschen?"
-       IDS_OVERWRITEFILE_TEXT "Mцchten Sie, dass die Datei '%1' ьberschrieben wird 
?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Bestдtigung: Datei ьberschreiben"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

         /* message box strings */
         IDS_RESTART_TITLE       "Neustarten"
diff --git a/dlls/shell32/shell32_En.rc b/dlls/shell32/shell32_En.rc
index 09530c6..a67cc8a 100644
--- a/dlls/shell32/shell32_En.rc
+++ b/dlls/shell32/shell32_En.rc
@@ -185,8 +185,12 @@ STRINGTABLE DISCARDABLE
        IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all it's 
content to the Trash?"
        IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to 
the Trash?"
        IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to 
delete it instead?"
-       IDS_OVERWRITEFILE_TEXT "OverWrite File %1?"
-       IDS_OVERWRITEFILE_CAPTION "Confirm File OverWrite"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
+       IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

         /* message box strings */
         IDS_RESTART_TITLE       "Restart"
diff --git a/dlls/shell32/shell32_Eo.rc b/dlls/shell32/shell32_Eo.rc
index e8fa407..3bfca07 100644
--- a/dlls/shell32/shell32_Eo.rc
+++ b/dlls/shell32/shell32_Eo.rc
@@ -163,8 +163,12 @@ STRINGTABLE DISCARDABLE
        IDS_DELETEFOLDER_CAPTION "Konfirmu forigon de dosierujo"
        IDS_DELETEITEM_TEXT "Жu vi estas certa pri forigo de '%1'?"
        IDS_DELETEMULTIPLE_TEXT "Жu vi estas certa pri forigo de жi tiuj %1 
komponantoj?"
-       IDS_OVERWRITEFILE_TEXT "Жu vi supreskribas la dosieron %1?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Konfirmu supreskribiton de dosieron"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"
 }

 /*     columns in the shellview        */
diff --git a/dlls/shell32/shell32_Es.rc b/dlls/shell32/shell32_Es.rc
index dd83a6e..c3d2f4c 100644
--- a/dlls/shell32/shell32_Es.rc
+++ b/dlls/shell32/shell32_Es.rc
@@ -162,8 +162,12 @@ STRINGTABLE DISCARDABLE
        IDS_DELETEFOLDER_CAPTION "Confirmar eliminaciуn de carpeta"
        IDS_DELETEITEM_TEXT "їSeguro que desea eliminar '%1'?"
        IDS_DELETEMULTIPLE_TEXT "їSeguro que desea eliminar estos %1 elementos?"
-       IDS_OVERWRITEFILE_TEXT "їSobreescribir el archivo '%1'?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Confirmar sobreescritura de archivo"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"
 }

 /*     columns in the shellview        */
diff --git a/dlls/shell32/shell32_Fi.rc b/dlls/shell32/shell32_Fi.rc
index e842bbd..e43a94e 100644
--- a/dlls/shell32/shell32_Fi.rc
+++ b/dlls/shell32/shell32_Fi.rc
@@ -164,8 +164,12 @@ STRINGTABLE DISCARDABLE
        IDS_DELETEFOLDER_CAPTION "Vahvista kansion tuhoaminen"
        IDS_DELETEITEM_TEXT "Haluatko varmasti tuhota '%1':n?"
        IDS_DELETEMULTIPLE_TEXT "Haluatko varmasti tuhota nдmд %1?"
-       IDS_OVERWRITEFILE_TEXT "Ylikirjoita tiedosto %1?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Vahvista tiedoston ylikirjoitus"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

         /* message box strings */
         IDS_RESTART_TITLE       "Kдynnistд uudelleen"
diff --git a/dlls/shell32/shell32_Fr.rc b/dlls/shell32/shell32_Fr.rc
index 043c66c..246045c 100644
--- a/dlls/shell32/shell32_Fr.rc
+++ b/dlls/shell32/shell32_Fr.rc
@@ -176,8 +176,12 @@ STRINGTABLE DISCARDABLE
        IDS_TRASHFOLDER_TEXT "Кtes-vous sыr de vouloir mettre «%1» et tout ce qu'il 
contient dans la corbeille?"
        IDS_TRASHMULTIPLE_TEXT "Кtes-vous sыr de vouloir mettre ces %1 йlйments dans 
la corbeille?"
        IDS_CANTTRASH_TEXT "L'йlйment «%1» ne peut pas кtre mis dans la corbeille. 
Souhaitez-vous le supprimer а la place?"
-       IDS_OVERWRITEFILE_TEXT "Йcraser le fichier %1?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Confirmer l'йcrasement du fichier"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

         /* message box strings */
        IDS_RESTART_TITLE       "Redйmarrer"
diff --git a/dlls/shell32/shell32_It.rc b/dlls/shell32/shell32_It.rc
index 809f44a..19f7339 100644
--- a/dlls/shell32/shell32_It.rc
+++ b/dlls/shell32/shell32_It.rc
@@ -164,8 +164,12 @@ STRINGTABLE DISCARDABLE
        IDS_DELETEFOLDER_CAPTION "Confermare la cancellazione della cartella"
        IDS_DELETEITEM_TEXT "Sei sicuro di voler cancellare '%1'?"
        IDS_DELETEMULTIPLE_TEXT "Sei sicuro di voler cancellare questi %1 
elementi?"
-       IDS_OVERWRITEFILE_TEXT "Sovrascrivere il File %1?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Confermare la sovrascrizione del File"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

        /* message box strings */
        IDS_RESTART_TITLE       "Riavvia"
diff --git a/dlls/shell32/shell32_Ko.rc b/dlls/shell32/shell32_Ko.rc
index 413ad7b..bb00f83 100644
--- a/dlls/shell32/shell32_Ko.rc
+++ b/dlls/shell32/shell32_Ko.rc
@@ -173,8 +173,12 @@ IDS_TRASHITEM_TEXT "ґзЅЕАє '%1' А»(ё¦) ИЮБцЕлАё·О єёі»±вё¦ 
№Щ¶шґП±о?"
 IDS_TRASHFOLDER_TEXT "ґзЅЕАє '%1' °ъ ±Ч ѕИАЗ і»їлА» ИЮБцЕлАё·О єёі»±вё¦ 
№Щ¶шґП±о?"
 IDS_TRASHMULTIPLE_TEXT "ґзЅЕАє '%1' µйА»(ё¦) ИЮБцЕлАё·О єёі»±вё¦ №Щ¶шґП±о?"
 IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it 
instead?"
-IDS_OVERWRITEFILE_TEXT "ЖДАП %1А» µ¤ѕоѕІ°ЪЅАґП±о?"
+IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you 
want to replace it?"
 IDS_OVERWRITEFILE_CAPTION "ЖДАП µ¤ѕоѕІ±в И(r)АО"
+IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

 /* message box strings */
 IDS_RESTART_TITLE       "ґЩЅГ ЅГАЫ"
diff --git a/dlls/shell32/shell32_No.rc b/dlls/shell32/shell32_No.rc
index a7ad4f4..c7ec269 100644
--- a/dlls/shell32/shell32_No.rc
+++ b/dlls/shell32/shell32_No.rc
@@ -172,8 +172,12 @@ STRINGTABLE DISCARDABLE
        IDS_TRASHFOLDER_TEXT "Virkelig legge «%1» og alt innholdet i 
papirkurven?"
        IDS_TRASHMULTIPLE_TEXT "Virkelig legge disse %1 valgte elementene i 
papirkurven?"
        IDS_CANTTRASH_TEXT "Elementet «%1» kan ikke legges i papirkurven. Vil du 
slette det i stedet?"
-       IDS_OVERWRITEFILE_TEXT "Overskrive filen «%1»?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Bekreft overskriving av fil"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

         /* message box strings */
         IDS_RESTART_TITLE       "Starte pе nytt"
diff --git a/dlls/shell32/shell32_Pl.rc b/dlls/shell32/shell32_Pl.rc
index 60b6a75..d6139e7 100644
--- a/dlls/shell32/shell32_Pl.rc
+++ b/dlls/shell32/shell32_Pl.rc
@@ -173,8 +173,12 @@ STRINGTABLE DISCARDABLE
        IDS_TRASHFOLDER_TEXT "Czy jesteњ pewien, їe chcesz umieњciж folder '%1' i 
caі№ jego zawartoњж w koszu"
        IDS_TRASHMULTIPLE_TEXT "Elementуw: %1 - czy na pewno chcesz je umieњciж w 
Koszu?"
        IDS_CANTTRASH_TEXT "Nie mogк przenieњж elementu '%1' do Kosza. Czy chcesz go 
zamiast tego usun№ж?"
-       IDS_OVERWRITEFILE_TEXT "Zast№piж plik %1?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Potwierdџ zast№pienie pliku"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

         /* message box strings */
         IDS_RESTART_TITLE       "Uruchom ponownie"
diff --git a/dlls/shell32/shell32_Pt.rc b/dlls/shell32/shell32_Pt.rc
index 1826162..0a6a274 100644
--- a/dlls/shell32/shell32_Pt.rc
+++ b/dlls/shell32/shell32_Pt.rc
@@ -256,8 +256,12 @@ STRINGTABLE DISCARDABLE
        IDS_DELETEFOLDER_CAPTION "Confirmar exclusгo de pasta"
        IDS_DELETEITEM_TEXT "Vocк tem certeza que deseja excluir '%1'?"
        IDS_DELETEMULTIPLE_TEXT "Vocк tem certeza que deseja excluir estes %1 
itens?"
-       IDS_OVERWRITEFILE_TEXT "Sobreescrever arquivo %1?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Confirmar sobreescrever arquivo"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

         /* message box strings */
        IDS_RESTART_TITLE       "Reiniciar"
diff --git a/dlls/shell32/shell32_Ru.rc b/dlls/shell32/shell32_Ru.rc
index a3c5da8..65fa824 100644
--- a/dlls/shell32/shell32_Ru.rc
+++ b/dlls/shell32/shell32_Ru.rc
@@ -165,8 +165,12 @@ STRINGTABLE DISCARDABLE
     IDS_DELETEFOLDER_CAPTION   "Подтверждение удаления папки"
     IDS_DELETEITEM_TEXT                "Удалить '%1'?"
     IDS_DELETEMULTIPLE_TEXT    "Удалить эти обьекты (%1?"
-    IDS_OVERWRITEFILE_TEXT     "Заменить файл(ы) %1?"
+    IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo 
you want to replace it?"
     IDS_OVERWRITEFILE_CAPTION  "Подтверждение замены файла"
+    IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

     /* message box strings */
     IDS_RESTART_TITLE          "Перезагрузить"
diff --git a/dlls/shell32/shell32_Tr.rc b/dlls/shell32/shell32_Tr.rc
index b41be53..197562c 100644
--- a/dlls/shell32/shell32_Tr.rc
+++ b/dlls/shell32/shell32_Tr.rc
@@ -172,8 +172,12 @@ STRINGTABLE DISCARDABLE
         IDS_TRASHFOLDER_TEXT "'%1' adlэ црeyi ve tьm iзeriрini зцpe gцndermek 
istediрinizden emin misiniz?"
         IDS_TRASHMULTIPLE_TEXT "Bu %1 црeyi зцpe gцndermek istediрinizden emin 
misiniz?"
         IDS_CANTTRASH_TEXT "'%1' adlэ црe зцpe gцnderilemiyor. Tamamen silmek ister 
misiniz?"
-       IDS_OVERWRITEFILE_TEXT "%1 dosyasэnэn ьzerine yazmak istiyor musunuz?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Dosya Ьzerine Yazmayэ Onayla"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"

         /* message box strings */
         IDS_RESTART_TITLE       "Yeniden Baюlat"
diff --git a/dlls/shell32/shell32_Uk.rc b/dlls/shell32/shell32_Uk.rc
index c535ba9..a4cf564 100644
--- a/dlls/shell32/shell32_Uk.rc
+++ b/dlls/shell32/shell32_Uk.rc
@@ -161,8 +161,12 @@ STRINGTABLE DISCARDABLE
        IDS_DELETEFOLDER_CAPTION "Підтвердження вилучення теки"
        IDS_DELETEITEM_TEXT "Ви впевнені, що хочете вилучити '%1'?"
        IDS_DELETEMULTIPLE_TEXT "Ви впевнені, що хочете вилучити ці %1 
елементи(ів)?"
-       IDS_OVERWRITEFILE_TEXT "Переписати Файл %1?"
+       IDS_OVERWRITEFILE_TEXT "This folder already contains a file called 
'%1'.\n\nDo you want to replace it?"
        IDS_OVERWRITEFILE_CAPTION "Підтвердження Перезапису Файлу"
+       IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named 
'%1'.\n\n"\
+           "If the files in the destination folder have the same names as files in 
the\n"\
+           "selected folder they will be replaced. Do you still want to move or 
copy\n"\
+           "the folder?"
 }

 /*     columns in the shellview        */
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h
index a17eec4..2937065 100644
--- a/dlls/shell32/shell32_main.h
+++ b/dlls/shell32/shell32_main.h
@@ -153,9 +153,10 @@ void FreeChangeNotifications(void);
 #define ASK_TRASH_FOLDER          8
 #define ASK_TRASH_MULTIPLE_ITEM   9
 #define ASK_CANT_TRASH_ITEM      10
+#define ASK_OVERWRITE_FOLDER     11

 BOOL SHELL_DeleteDirectoryW(HWND hwnd, LPCWSTR pwszDir, BOOL bShowUI);
-BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir);
+BOOL SHELL_ConfirmYesNoW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir);

 /* 16-bit functions */
 void        WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b);
diff --git a/dlls/shell32/shfldr_unixfs.c b/dlls/shell32/shfldr_unixfs.c
index 4668afe..a4f4ade 100644
--- a/dlls/shell32/shfldr_unixfs.c
+++ b/dlls/shell32/shfldr_unixfs.c
@@ -1829,7 +1829,7 @@ static HRESULT UNIXFS_delete_with_syscalls(UnixFolder 
*This, UINT cidl, LPCITEMI
     static const WCHAR empty[] = {0};
     int i;

-    if (!SHELL_ConfirmDialogW(GetActiveWindow(), ASK_DELETE_SELECTED, empty))
+    if (!SHELL_ConfirmYesNoW(GetActiveWindow(), ASK_DELETE_SELECTED, empty))
         return S_OK;

     lstrcpyA(szAbsolute, This->m_pszPath);
diff --git a/dlls/shell32/shlfileop.c b/dlls/shell32/shlfileop.c
index d1ea475..b245e00 100644
--- a/dlls/shell32/shlfileop.c
+++ b/dlls/shell32/shlfileop.c
@@ -27,6 +27,7 @@
 #include <stdarg.h>
 #include <string.h>
 #include <ctype.h>
+#include <assert.h>

 #include "windef.h"
 #include "winbase.h"
@@ -65,6 +66,14 @@ static DWORD SHNotifyMoveFileW(LPCWSTR src, LPCWSTR dest);
 static DWORD SHNotifyCopyFileW(LPCWSTR src, LPCWSTR dest, BOOL bFailIfExists);
 static DWORD SHFindAttrW(LPCWSTR pName, BOOL fileOnly);

+typedef struct
+{
+    SHFILEOPSTRUCTW *req;
+    DWORD dwYesToAllMask;
+    BOOL bManyItems;
+    BOOL bCancelled;
+} FILE_OPERATION;
+
 /* Confirm dialogs with an optional "Yes To All" as used in file operations 
confirmations
  */
 static const WCHAR CONFIRM_MSG_PROP[] = 
{'W','I','N','E','_','C','O','N','F','I','R','M','E',0};
@@ -250,22 +259,32 @@ static BOOL SHELL_ConfirmIDs(int nKindOfDialog, 
SHELL_ConfirmIDstruc *ids)
             ids->icon_resource_id = IDI_WARNING;
            ids->caption_resource_id  = IDS_OVERWRITEFILE_CAPTION;
            ids->text_resource_id  = IDS_OVERWRITEFILE_TEXT;
-           return TRUE;
+            return TRUE;
+         case ASK_OVERWRITE_FOLDER:
+            ids->hIconInstance = NULL;
+            ids->icon_resource_id = IDI_WARNING;
+            ids->caption_resource_id  = IDS_OVERWRITEFILE_CAPTION;
+            ids->text_resource_id  = IDS_OVERWRITEFOLDER_TEXT;
+            return TRUE;
          default:
            FIXME(" Unhandled nKindOfDialog %d stub\n", nKindOfDialog);
        }
        return FALSE;
 }

-BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir)
+static BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir, 
FILE_OPERATION *op)
 {
        WCHAR szCaption[255], szText[255], szBuffer[MAX_PATH + 256];
        SHELL_ConfirmIDstruc ids;
        DWORD_PTR args[1];
        HICON hIcon;
+       int ret;

-       if (!SHELL_ConfirmIDs(nKindOfDialog, &ids))
-         return FALSE;
+        assert(nKindOfDialog >= 0 && nKindOfDialog < 32);
+        if (op && (op->dwYesToAllMask & (1 << nKindOfDialog)))
+            return IDYES;
+
+       assert(SHELL_ConfirmIDs(nKindOfDialog, &ids));

        LoadStringW(shell32_hInstance, ids.caption_resource_id, szCaption, 
sizeof(szCaption)/sizeof(WCHAR));
        LoadStringW(shell32_hInstance, ids.text_resource_id, szText, 
sizeof(szText)/sizeof(WCHAR));
@@ -275,7 +294,23 @@ BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, 
LPCWSTR szDir)
                       szText, 0, 0, szBuffer, sizeof(szBuffer), 
(va_list*)args);
         hIcon = LoadIconW(ids.hIconInstance, 
(LPWSTR)MAKEINTRESOURCE(ids.icon_resource_id));

-        return (IDYES == SHELL_ConfirmMsgBox(hWnd, szBuffer, szCaption, hIcon, 
FALSE));
+        ret = SHELL_ConfirmMsgBox(hWnd, szBuffer, szCaption, hIcon, op && 
op->bManyItems);
+        if (op) {
+            if (ret == IDD_YESTOALL) {
+                op->dwYesToAllMask |= (1 << nKindOfDialog);
+                ret = IDYES;
+            }
+            if (ret == IDCANCEL)
+                op->bCancelled = TRUE;
+            if (ret != IDYES)
+                op->req->fAnyOperationsAborted = TRUE;
+        }
+        return ret == IDYES;
+}


You need to conform to the style of the rest of the file, e.g.,

       if (IsAttribDir(entryToCopy->attributes) && bCancelIfAnyDirectories)
           return ERROR_CANCELLED;

       create_dest_dirs(fileDest->szDirectory);

       if (!lstrcmpiW(entryToCopy->szFullPath, fileDest->szFullPath))
       {
           if (IsAttribFile(entryToCopy->attributes))
               return ERROR_NO_MORE_SEARCH_HANDLES;
           else
               return ERROR_SUCCESS;
       }

4 space indentation, empty lines between logical pieces of code,
brackets underneath.

--
James Hawkins


Reply via email to