clipboard: Fixes additional x11 clipboard bugs found in tests
parent
a2ba5e9052
commit
6ab846b688
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (clipboard->callback) {
|
||||||
|
src = clipboard->callback(length, mime_type, clipboard->userdata);
|
||||||
data = CloneDataBuffer(src, length, nullterminate);
|
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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue