shell32: Partially implement Mac Trash backing for the Recycle Bin.
This commit is contained in:
parent
f67d34f7af
commit
cd454fdc2e
|
@ -666,6 +666,7 @@ COREAUDIO
|
||||||
SECURITYLIB
|
SECURITYLIB
|
||||||
DISKARBITRATIONLIB
|
DISKARBITRATIONLIB
|
||||||
LDEXECFLAGS
|
LDEXECFLAGS
|
||||||
|
CORESERVICESLIB
|
||||||
APPLICATIONSERVICESLIB
|
APPLICATIONSERVICESLIB
|
||||||
IOKITLIB
|
IOKITLIB
|
||||||
COREFOUNDATIONLIB
|
COREFOUNDATIONLIB
|
||||||
|
@ -5752,6 +5753,7 @@ for ac_header in \
|
||||||
CL/cl.h \
|
CL/cl.h \
|
||||||
Carbon/Carbon.h \
|
Carbon/Carbon.h \
|
||||||
CoreAudio/CoreAudio.h \
|
CoreAudio/CoreAudio.h \
|
||||||
|
CoreServices/CoreServices.h \
|
||||||
DiskArbitration/DiskArbitration.h \
|
DiskArbitration/DiskArbitration.h \
|
||||||
IOKit/IOKitLib.h \
|
IOKit/IOKitLib.h \
|
||||||
IOKit/hid/IOHIDLib.h \
|
IOKit/hid/IOHIDLib.h \
|
||||||
|
@ -6495,6 +6497,8 @@ fi
|
||||||
|
|
||||||
APPLICATIONSERVICESLIB="-framework ApplicationServices"
|
APPLICATIONSERVICESLIB="-framework ApplicationServices"
|
||||||
|
|
||||||
|
CORESERVICESLIB="-framework CoreServices"
|
||||||
|
|
||||||
case $host_os in
|
case $host_os in
|
||||||
darwin11*)
|
darwin11*)
|
||||||
LDEXECFLAGS="-image_base 0x7bf00000 -Wl,-macosx_version_min,10.6,-segaddr,WINE_DOS,0x00001000,-segaddr,WINE_SHAREDHEAP,0x7f000000"
|
LDEXECFLAGS="-image_base 0x7bf00000 -Wl,-macosx_version_min,10.6,-segaddr,WINE_DOS,0x00001000,-segaddr,WINE_SHAREDHEAP,0x7f000000"
|
||||||
|
|
|
@ -392,6 +392,7 @@ AC_CHECK_HEADERS(\
|
||||||
CL/cl.h \
|
CL/cl.h \
|
||||||
Carbon/Carbon.h \
|
Carbon/Carbon.h \
|
||||||
CoreAudio/CoreAudio.h \
|
CoreAudio/CoreAudio.h \
|
||||||
|
CoreServices/CoreServices.h \
|
||||||
DiskArbitration/DiskArbitration.h \
|
DiskArbitration/DiskArbitration.h \
|
||||||
IOKit/IOKitLib.h \
|
IOKit/IOKitLib.h \
|
||||||
IOKit/hid/IOHIDLib.h \
|
IOKit/hid/IOHIDLib.h \
|
||||||
|
@ -714,6 +715,7 @@ case $host_os in
|
||||||
AC_SUBST(COREFOUNDATIONLIB,"-framework CoreFoundation")
|
AC_SUBST(COREFOUNDATIONLIB,"-framework CoreFoundation")
|
||||||
AC_SUBST(IOKITLIB,"-framework IOKit -framework CoreFoundation")
|
AC_SUBST(IOKITLIB,"-framework IOKit -framework CoreFoundation")
|
||||||
AC_SUBST(APPLICATIONSERVICESLIB,"-framework ApplicationServices")
|
AC_SUBST(APPLICATIONSERVICESLIB,"-framework ApplicationServices")
|
||||||
|
AC_SUBST(CORESERVICESLIB,"-framework CoreServices")
|
||||||
case $host_os in
|
case $host_os in
|
||||||
darwin11*)
|
darwin11*)
|
||||||
AC_SUBST(LDEXECFLAGS,["-image_base 0x7bf00000 -Wl,-macosx_version_min,10.6,-segaddr,WINE_DOS,0x00001000,-segaddr,WINE_SHAREDHEAP,0x7f000000"]) ;;
|
AC_SUBST(LDEXECFLAGS,["-image_base 0x7bf00000 -Wl,-macosx_version_min,10.6,-segaddr,WINE_DOS,0x00001000,-segaddr,WINE_SHAREDHEAP,0x7f000000"]) ;;
|
||||||
|
|
|
@ -3,6 +3,7 @@ MODULE = shell32.dll
|
||||||
IMPORTLIB = shell32
|
IMPORTLIB = shell32
|
||||||
IMPORTS = uuid shlwapi comctl32 user32 gdi32 advapi32
|
IMPORTS = uuid shlwapi comctl32 user32 gdi32 advapi32
|
||||||
DELAYIMPORTS = ole32 oleaut32 shdocvw version
|
DELAYIMPORTS = ole32 oleaut32 shdocvw version
|
||||||
|
EXTRALIBS = @CORESERVICESLIB@
|
||||||
|
|
||||||
C_SRCS = \
|
C_SRCS = \
|
||||||
appbar.c \
|
appbar.c \
|
||||||
|
|
|
@ -22,7 +22,20 @@
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_CORESERVICES_CORESERVICES_H
|
||||||
|
#define GetCurrentThread MacGetCurrentThread
|
||||||
|
#define LoadResource MacLoadResource
|
||||||
|
#include <CoreServices/CoreServices.h>
|
||||||
|
#undef GetCurrentThread
|
||||||
|
#undef LoadResource
|
||||||
|
#undef DPRINTF
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <time.h>
|
||||||
#ifdef HAVE_SYS_STAT_H
|
#ifdef HAVE_SYS_STAT_H
|
||||||
# include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -41,17 +54,78 @@
|
||||||
#include "winreg.h"
|
#include "winreg.h"
|
||||||
#include "shlwapi.h"
|
#include "shlwapi.h"
|
||||||
#include "winternl.h"
|
#include "winternl.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
#include "shell32_main.h"
|
#include "shell32_main.h"
|
||||||
#include "xdg.h"
|
#include "xdg.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(trash);
|
WINE_DEFAULT_DEBUG_CHANNEL(trash);
|
||||||
|
|
||||||
|
#ifdef HAVE_CORESERVICES_CORESERVICES_H
|
||||||
|
|
||||||
|
BOOL TRASH_CanTrashFile(LPCWSTR wszPath)
|
||||||
|
{
|
||||||
|
char *unix_path;
|
||||||
|
OSStatus status;
|
||||||
|
FSRef ref;
|
||||||
|
FSCatalogInfo catalogInfo;
|
||||||
|
|
||||||
|
TRACE("(%s)\n", debugstr_w(wszPath));
|
||||||
|
if (!(unix_path = wine_get_unix_file_name(wszPath)))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
status = FSPathMakeRef((UInt8*)unix_path, &ref, NULL);
|
||||||
|
HeapFree(GetProcessHeap(), 0, unix_path);
|
||||||
|
if (status == noErr)
|
||||||
|
status = FSGetCatalogInfo(&ref, kFSCatInfoVolume, &catalogInfo, NULL,
|
||||||
|
NULL, NULL);
|
||||||
|
if (status == noErr)
|
||||||
|
status = FSFindFolder(catalogInfo.volume, kTrashFolderType,
|
||||||
|
kCreateFolder, &ref);
|
||||||
|
|
||||||
|
return (status == noErr);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL TRASH_TrashFile(LPCWSTR wszPath)
|
||||||
|
{
|
||||||
|
char *unix_path;
|
||||||
|
OSStatus status;
|
||||||
|
|
||||||
|
TRACE("(%s)\n", debugstr_w(wszPath));
|
||||||
|
if (!(unix_path = wine_get_unix_file_name(wszPath)))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
status = FSPathMoveObjectToTrashSync(unix_path, NULL, kFSFileOperationSkipPreflight);
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, unix_path);
|
||||||
|
return (status == noErr);
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT TRASH_EnumItems(LPITEMIDLIST **pidls, int *count)
|
||||||
|
{
|
||||||
|
FIXME("stub!\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT TRASH_UnpackItemID(LPCSHITEMID id, WIN32_FIND_DATAW *data)
|
||||||
|
{
|
||||||
|
FIXME("stub!\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT TRASH_RestoreItem(LPCITEMIDLIST pidl)
|
||||||
|
{
|
||||||
|
FIXME("stub!\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT TRASH_EraseItem(LPCITEMIDLIST pidl)
|
||||||
|
{
|
||||||
|
FIXME("stub!\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* HAVE_CORESERVICES_CORESERVICES_H */
|
||||||
|
|
||||||
static CRITICAL_SECTION TRASH_Creating;
|
static CRITICAL_SECTION TRASH_Creating;
|
||||||
static CRITICAL_SECTION_DEBUG TRASH_Creating_Debug =
|
static CRITICAL_SECTION_DEBUG TRASH_Creating_Debug =
|
||||||
{
|
{
|
||||||
|
@ -603,3 +677,5 @@ HRESULT TRASH_EraseItem(LPCITEMIDLIST pidl)
|
||||||
SHFree(file_path);
|
SHFree(file_path);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_CORESERVICES_CORESERVICES_H */
|
||||||
|
|
|
@ -61,6 +61,9 @@
|
||||||
/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
|
/* Define to 1 if you have the <CoreAudio/CoreAudio.h> header file. */
|
||||||
#undef HAVE_COREAUDIO_COREAUDIO_H
|
#undef HAVE_COREAUDIO_COREAUDIO_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <CoreServices/CoreServices.h> header file. */
|
||||||
|
#undef HAVE_CORESERVICES_CORESERVICES_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <cups/cups.h> header file. */
|
/* Define to 1 if you have the <cups/cups.h> header file. */
|
||||||
#undef HAVE_CUPS_CUPS_H
|
#undef HAVE_CUPS_CUPS_H
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue