Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Update SDL_HasClipboardText functions to return value based on clipbo…

…ard content; Fix memory leak in fallback SetClipboard implementation
  • Loading branch information
ferzkopp committed Oct 30, 2011
1 parent 26f4ab2 commit 83af41000afc41b6e256d0e98c74f6d4d902f879
@@ -55,7 +55,7 @@ extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text);
extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void);

/**
* \brief Returns whether the clipboard has text
* \brief Returns a flag indicating whether the clipboard exists and contains a text string that it non-empty
*
* \sa SDL_GetClipboardText()
*/
@@ -35,6 +35,9 @@ SDL_SetClipboardText(const char *text)
if (_this->SetClipboardText) {
return _this->SetClipboardText(_this, text);
} else {
if (_this->clipboard_text) {
SDL_free(_this->clipboard_text);
}
_this->clipboard_text = SDL_strdup(text);
return 0;
}
@@ -64,7 +67,7 @@ SDL_HasClipboardText(void)
if (_this->HasClipboardText) {
return _this->HasClipboardText(_this);
} else {
if (_this->clipboard_text) {
if ((_this->clipboard_text) && (SDL_strlen(_this->clipboard_text)>0)) {
return SDL_TRUE;
} else {
return SDL_FALSE;
@@ -51,46 +51,39 @@ int BE_SetClipboardText(_THIS, const char *text) {

char *BE_GetClipboardText(_THIS) {
BMessage *clip = NULL;
const char *text;
const char *text = NULL;
ssize_t length;
char *result;
if(be_clipboard->Lock()) {
if((clip = be_clipboard->Data())) {
/* Presumably the string of characters is ascii-format */
clip->FindData("text/plain", B_MIME_TYPE, (const void**)&text,
&length);
} else {
be_clipboard->Unlock();
return NULL;
}
be_clipboard->Unlock();
}

if (!text) {
result = SDL_strdup("");
} else {
return NULL;
/* Copy the data and pass on to SDL */
result = (char*)SDL_calloc(1, sizeof(char*)*length);
SDL_strlcpy(result, text, length);
}

/* Copy the data and pass on to SDL */
char *result = (char*)SDL_calloc(1, sizeof(char*)*length);
SDL_strlcpy(result, text, length);

return result;
}

SDL_bool BE_HasClipboardText(_THIS) {
BMessage *clip = NULL;
const char *text;
ssize_t length;
SDL_bool retval = SDL_FALSE;

if(be_clipboard->Lock()) {
if((clip = be_clipboard->Data())) {
/* Presumably the string of characters is ascii-format */
clip->FindData("text/plain", B_MIME_TYPE, (const void**)&text,
&length);
if( text ) retval = SDL_TRUE;
}
be_clipboard->Unlock();
}
return retval;

SDL_bool result = SDL_FALSE;
char *text = BE_GetClipboardText(_this);
if (text) {
result = (SDL_strlen(text)>0) ? SDL_TRUE : SDL_FALSE;
SDL_free(text);
}
return result;
}

#ifdef __cplusplus
@@ -94,24 +94,12 @@
SDL_bool
Cocoa_HasClipboardText(_THIS)
{
NSAutoreleasePool *pool;
NSPasteboard *pasteboard;
NSString *format = GetTextFormat(_this);
NSString *available;
SDL_bool result;

pool = [[NSAutoreleasePool alloc] init];

pasteboard = [NSPasteboard generalPasteboard];
available = [pasteboard availableTypeFromArray: [NSArray arrayWithObject:format]];
if ([available isEqualToString:format]) {
result = SDL_TRUE;
} else {
result = SDL_FALSE;
SDL_bool result = SDL_FALSE;
char *text = Cocoa_GetClipboardText(_this);
if (text) {
result = (SDL_strlen(text)>0) ? SDL_TRUE : SDL_FALSE;
SDL_free(text);
}

[pool release];

return result;
}

@@ -136,11 +136,13 @@ WIN_GetClipboardText(_THIS)
SDL_bool
WIN_HasClipboardText(_THIS)
{
if (IsClipboardFormatAvailable(TEXT_FORMAT)) {
return SDL_TRUE;
} else {
return SDL_FALSE;
}
SDL_bool result = SDL_FALSE;
char *text = WIN_GetClipboardText(_this);
if (text) {
result = (SDL_strlen(text)>0) ? SDL_TRUE : SDL_FALSE;
SDL_free(text);
}
return result;
}

void
@@ -129,25 +129,20 @@ X11_GetClipboardText(_THIS)
if (!text) {
text = SDL_strdup("");
}

return text;
}

SDL_bool
X11_HasClipboardText(_THIS)
{
/* Not an easy way to tell with X11, as far as I know... */
char *text;
SDL_bool retval;

text = X11_GetClipboardText(_this);
if (*text) {
retval = SDL_TRUE;
} else {
retval = SDL_FALSE;
}
SDL_free(text);

return retval;
SDL_bool result = SDL_FALSE;
char *text = X11_GetClipboardText(_this);
if (text) {
result = (SDL_strlen(text)>0) ? SDL_TRUE : SDL_FALSE;
SDL_free(text);
}
return result;
}

#endif /* SDL_VIDEO_DRIVER_X11 */

0 comments on commit 83af410

Please sign in to comment.