Index: dll/win32/shell32/shlfileop.cpp
===================================================================
--- dll/win32/shell32/shlfileop.cpp	(revision 73525)
+++ dll/win32/shell32/shlfileop.cpp	(working copy)
@@ -361,6 +361,16 @@
     return E_FAIL;
 }
 
+static void _NotifyParentDirectory(LPCWSTR path) {
+    WCHAR wszFolderPathName[MAX_PATH];
+
+    TRACE("(%s)\n", debugstr_w(path));
+
+    strcpyW(wszFolderPathName, path);
+    PathAddBackslashW(wszFolderPathName);
+    SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATHW, wszFolderPathName, NULL);
+}
+
 /**************************************************************************
  * SHELL_DeleteDirectory()  [internal]
  *
@@ -399,6 +409,11 @@
     FindClose(hFind);
     if (ret)
         ret = (SHNotifyRemoveDirectoryW(pszDir) == ERROR_SUCCESS);
+    if (ret)
+    {
+        // The contents of an existing folder have changed, notify about it
+        _NotifyParentDirectory(pszDir);
+    }
     return ret;
 }
 
@@ -590,7 +605,6 @@
     return 0;
 }
 
-
 /************************************************************************
  * SHNotifyDeleteFileW          [internal]
  *
@@ -638,6 +652,9 @@
         // Bit of a hack to make the progress bar move. We don't have progress inside the file, so inform when done.
         SHCopyProgressRoutine(FileSize, FileSize, FileSize, FileSize, 0, CALLBACK_STREAM_SWITCH, NULL, NULL, op);
         SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW, path, NULL);
+
+        // The contents of an existing folder have changed, notify about it
+        _NotifyParentDirectory(path);
         return ERROR_SUCCESS;
     }
     return GetLastError();
@@ -704,6 +721,10 @@
     {
         SHChangeNotify(isdir ? SHCNE_MKDIR : SHCNE_CREATE, SHCNF_PATHW, dest, NULL);
         SHChangeNotify(isdir ? SHCNE_RMDIR : SHCNE_DELETE, SHCNF_PATHW, src, NULL);
+
+        // The contents of an existing folder have changed, notify about it
+        _NotifyParentDirectory(dest);
+        _NotifyParentDirectory(src);
         return ERROR_SUCCESS;
     }
     return GetLastError();
@@ -750,6 +771,9 @@
     if (ret)
     {
         SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW, dest, NULL);
+
+        // The contents of an existing folder have changed, notify about it
+        _NotifyParentDirectory(dest);
         return ERROR_SUCCESS;
     }
 
@@ -1555,6 +1579,8 @@
             return ERROR_CANCELLED;
     }
 
+    // The contents of an existing folder have changed, notify about it
+    _NotifyParentDirectory(fileEntry->szFullPath);
     return ERROR_SUCCESS;
 }
 
