#include "../../SDL_internal.h"
#if SDL_VIDEO_DRIVER_UIKIT
#include "SDL_uikitvideo.h"
#include "../../events/SDL_clipboardevents_c.h"
#import <UIKit/UIPasteboard.h>
int
UIKit_SetClipboardText(_THIS, const char *text)
{
#if TARGET_OS_TV
return SDL_SetError("The clipboard is not available on tvOS");
#else
@autoreleasepool {
[UIPasteboard generalPasteboard].string = @(text);
return 0;
}
#endif
}
char *
UIKit_GetClipboardText(_THIS)
{
#if TARGET_OS_TV
return SDL_strdup(""); #else
@autoreleasepool {
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSString *string = pasteboard.string;
if (string != nil) {
return SDL_strdup(string.UTF8String);
} else {
return SDL_strdup("");
}
}
#endif
}
SDL_bool
UIKit_HasClipboardText(_THIS)
{
@autoreleasepool {
#if !TARGET_OS_TV
if ([UIPasteboard generalPasteboard].string != nil) {
return SDL_TRUE;
}
#endif
return SDL_FALSE;
}
}
void
UIKit_InitClipboard(_THIS)
{
#if !TARGET_OS_TV
@autoreleasepool {
SDL_VideoData *data = (__bridge SDL_VideoData *) _this->driverdata;
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
id observer = [center addObserverForName:UIPasteboardChangedNotification
object:nil
queue:nil
usingBlock:^(NSNotification *note) {
SDL_SendClipboardUpdate();
}];
data.pasteboardObserver = observer;
}
#endif
}
void
UIKit_QuitClipboard(_THIS)
{
@autoreleasepool {
SDL_VideoData *data = (__bridge SDL_VideoData *) _this->driverdata;
if (data.pasteboardObserver != nil) {
[[NSNotificationCenter defaultCenter] removeObserver:data.pasteboardObserver];
}
data.pasteboardObserver = nil;
}
}
#endif