clipboard: Fixes additional x11 clipboard bugs found in tests

main
Linus Probert 2023-06-12 18:27:40 +02:00 committed by Sam Lantinga
parent a2ba5e9052
commit 6ab846b688
2 changed files with 9 additions and 5 deletions

View File

@ -170,6 +170,7 @@ static void *GetSelectionData(SDL_VideoDevice *_this, Atom selection_type, size_
Uint64 waitStart; Uint64 waitStart;
Uint64 waitElapsed; Uint64 waitElapsed;
SDLX11_ClipboardData *clipboard;
void *data = NULL; void *data = NULL;
unsigned char *src = NULL; unsigned char *src = NULL;
Atom XA_MIME = X11_XInternAtom(display, mime_type, False); Atom XA_MIME = X11_XInternAtom(display, mime_type, False);
@ -185,12 +186,15 @@ static void *GetSelectionData(SDL_VideoDevice *_this, Atom selection_type, size_
} else if (owner == window) { } else if (owner == window) {
owner = DefaultRootWindow(display); owner = DefaultRootWindow(display);
if (selection_type == XA_PRIMARY) { if (selection_type == XA_PRIMARY) {
src = videodata->primary_selection.callback(length, mime_type, videodata->primary_selection.userdata); clipboard = &videodata->primary_selection;
} else { } else {
src = videodata->clipboard.callback(length, mime_type, videodata->clipboard.userdata); clipboard = &videodata->clipboard;
} }
data = CloneDataBuffer(src, length, nullterminate); if (clipboard->callback) {
src = clipboard->callback(length, mime_type, clipboard->userdata);
data = CloneDataBuffer(src, length, nullterminate);
}
} else { } else {
/* Request that the selection owner copy the data to our window */ /* Request that the selection owner copy the data to our window */
owner = window; owner = window;
@ -264,7 +268,7 @@ SDL_bool X11_HasClipboardData(SDL_VideoDevice *_this, const char *mime_type)
size_t length; size_t length;
void *data; void *data;
data = X11_GetClipboardData(_this, &length, mime_type); data = X11_GetClipboardData(_this, &length, mime_type);
if (data != NULL && length > 0) { if (data != NULL) {
SDL_free(data); SDL_free(data);
} }
return length > 0; return length > 0;

View File

@ -30,7 +30,7 @@ static int clipboard_testHasClipboardText(void *arg)
static int clipboard_testHasClipboardData(void *arg) static int clipboard_testHasClipboardData(void *arg)
{ {
SDL_HasClipboardData("image/png"); SDL_HasClipboardData("image/png");
SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded"); SDLTest_AssertPass("Call to SDL_HasClipboardData succeeded");
return TEST_COMPLETED; return TEST_COMPLETED;
} }