macOS: move deleted file to Trash

As opposed to permanently deleting it.  As requested:

  https://sourceforge.net/p/tuxpaint/feature-requests/148/
This commit is contained in:
Mark Kim 2022-07-02 22:03:41 -04:00
parent 59ef64b4e5
commit 98198591b5
5 changed files with 30 additions and 7 deletions

View file

@ -29,6 +29,7 @@ const char *apple_fontsPath(void);
const char *apple_preferencesPath(void);
const char *apple_globalPreferencesPath(void);
const char *apple_picturesPath(void);
int apple_trash(const char *path);
#endif /* __IOS_H__ */

View file

@ -20,6 +20,7 @@
(See COPYING.txt)
*/
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <libgen.h>
#include <limits.h>
@ -86,3 +87,9 @@ const char *apple_picturesPath(void)
{
return IOS_PICTURES_PATH;
}
int apple_trash(const char *path)
{
return unlink(path);
}

View file

@ -32,6 +32,7 @@ const char *apple_fontsPath(void);
const char *apple_preferencesPath(void);
const char *apple_globalPreferencesPath(void);
const char *apple_picturesPath(void);
int apple_trash(const char *path);
#endif /* __MACOS_H__ */

View file

@ -221,3 +221,19 @@ const char *apple_picturesPath(void)
return p;
}
int apple_trash(const char *path)
{
NSFileManager *manager = [NSFileManager defaultManager];
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithUTF8String:path]];
NSURL *trash = nil;
NSError *error = nil;
[manager trashItemAtURL:url resultingItemURL:&trash error:&error];
if(error) {
DEBUG_PRINTF("%s\n", [[error localizedDescription] UTF8String]);
return -1;
}
return 0;
}

View file

@ -28056,11 +28056,12 @@ int main(int argc, char *argv[])
*/
static int trash(char *path)
{
#ifdef UNLINK_ONLY
#if defined(UNLINK_ONLY)
return (unlink(path));
#else
#ifdef WIN32
#elif defined(WIN32)
return win32_trash(path);
#elif defined(__APPLE__)
return apple_trash(path);
#else
char fname[MAX_PATH], trashpath[MAX_PATH], dest[MAX_PATH], infoname[MAX_PATH], bname[MAX_PATH], ext[MAX_PATH];
char deldate[32];
@ -28220,13 +28221,10 @@ static int trash(char *path)
/* FIXME: xcfe and elsewhere: Anything to do? */
/* FIXME: Mac OS X */
/* FIXME: Haiku */
return (0);
#endif /* WIN32 */
#endif /* UNLINK_ONLY */
#endif
}
/**