https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e7f6b473e6b2fb28efac42ee9cabb21db9171a73

commit e7f6b473e6b2fb28efac42ee9cabb21db9171a73
Author:     Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com>
AuthorDate: Fri Dec 8 15:30:55 2023 +0900
Commit:     GitHub <nore...@github.com>
CommitDate: Fri Dec 8 15:30:55 2023 +0900

    [SHIMGVW] Implement ImageView_Delete (#6132)
    
    - Call SHFileOperation to delete.
    - Rebuild the file list and load the
      next file.
    CORE-19358
---
 dll/win32/shimgvw/shimgvw.c | 31 +++++++++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/dll/win32/shimgvw/shimgvw.c b/dll/win32/shimgvw/shimgvw.c
index 800f60d20d5..613cb250023 100644
--- a/dll/win32/shimgvw/shimgvw.c
+++ b/dll/win32/shimgvw/shimgvw.c
@@ -989,8 +989,35 @@ ImageView_OnSize(HWND hwnd, UINT state, INT cx, INT cy)
 static LRESULT
 ImageView_Delete(HWND hwnd)
 {
-    DPRINT1("ImageView_Delete: unimplemented.\n");
-    return 0;
+    WCHAR szCurFile[MAX_PATH + 1], szNextFile[MAX_PATH];
+    SHFILEOPSTRUCT FileOp = { hwnd, FO_DELETE };
+
+    if (image)
+    {
+        GdipDisposeImage(image);
+        image = NULL;
+    }
+
+    /* FileOp.pFrom must be double-null-terminated */
+    GetFullPathNameW(currentFile->FileName, _countof(szCurFile) - 1, 
szCurFile, NULL);
+    szCurFile[_countof(szCurFile) - 2] = UNICODE_NULL; /* Avoid buffer overrun 
*/
+    szCurFile[lstrlenW(szCurFile) + 1] = UNICODE_NULL;
+
+    GetFullPathNameW(currentFile->Next->FileName, _countof(szNextFile), 
szNextFile, NULL);
+    szNextFile[_countof(szNextFile) - 1] = UNICODE_NULL; /* Avoid buffer 
overrun */
+
+    FileOp.pFrom = szCurFile;
+    FileOp.fFlags = FOF_ALLOWUNDO;
+    if (SHFileOperation(&FileOp) != 0)
+        return 0;
+
+    pFreeFileList(currentFile);
+    currentFile = NULL;
+
+    currentFile = pBuildFileList(szNextFile);
+    pLoadImageFromNode(currentFile, hwnd);
+
+    return 1;
 }
 
 static LRESULT

Reply via email to