|
@@ -173,6 +173,11 @@ void *SDL_GetInternalClipboardData(SDL_VideoDevice *_this, const char *mime_type
|
|
void *data = NULL;
|
|
void *data = NULL;
|
|
|
|
|
|
if (_this->clipboard_callback) {
|
|
if (_this->clipboard_callback) {
|
|
|
|
+ if (!SDL_HasInternalClipboardData(_this, mime_type)) {
|
|
|
|
+ // The callback hasn't advertised that it can handle this mime type
|
|
|
|
+ return NULL;
|
|
|
|
+ }
|
|
|
|
+
|
|
const void *provided_data = _this->clipboard_callback(_this->clipboard_userdata, mime_type, size);
|
|
const void *provided_data = _this->clipboard_callback(_this->clipboard_userdata, mime_type, size);
|
|
if (provided_data) {
|
|
if (provided_data) {
|
|
// Make a copy of it for the caller and guarantee null termination
|
|
// Make a copy of it for the caller and guarantee null termination
|
|
@@ -180,6 +185,8 @@ void *SDL_GetInternalClipboardData(SDL_VideoDevice *_this, const char *mime_type
|
|
if (data) {
|
|
if (data) {
|
|
SDL_memcpy(data, provided_data, *size);
|
|
SDL_memcpy(data, provided_data, *size);
|
|
SDL_memset((Uint8 *)data + *size, 0, sizeof(Uint32));
|
|
SDL_memset((Uint8 *)data + *size, 0, sizeof(Uint32));
|
|
|
|
+ } else {
|
|
|
|
+ *size = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|