Any user friendly GUI environment has to have a usable trash. This trash has to be implemented in a way that if any application deleting a file the file will be moved to the trash. This has to be done transparent to the applications which mean no code change within any application should be necessary.
So far there doesn't seem to exist any implementation which provides a trash for any application. There are some file managers which have their own trash but that's not the right way. To implement this concept in a transparent way either a userspace library or a kernel module has to be written which replaces any current file delete operation.