#include "SDL_internal.h"
#ifdef SDL_VIDEO_DRIVER_UIKIT
#include "SDL_uikitvideo.h"
#include "../../events/SDL_clipboardevents_c.h"
#import <UIKit/UIPasteboard.h>
bool UIKit_SetClipboardText(SDL_VideoDevice *_this, const char *text)
{
#ifdef SDL_PLATFORM_TVOS
return SDL_SetError("The clipboard is not available on tvOS");
#else
@autoreleasepool {
SDL_UIKitVideoData *data = (__bridge SDL_UIKitVideoData *)_this->internal;
data.setting_clipboard = true;
if (text && *text) {
[UIPasteboard generalPasteboard].string = @(text);
} else {
[UIPasteboard generalPasteboard].string = nil;
}
data.setting_clipboard = false;
return true;
}
#endif
}
char *UIKit_GetClipboardText(SDL_VideoDevice *_this)
{
#ifdef SDL_PLATFORM_TVOS
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
}
bool UIKit_HasClipboardText(SDL_VideoDevice *_this)
{
@autoreleasepool {
#ifndef SDL_PLATFORM_TVOS
if ([UIPasteboard generalPasteboard].hasStrings) {
return true;
}
#endif
return false;
}
}
void UIKit_InitClipboard(SDL_VideoDevice *_this)
{
#ifndef SDL_PLATFORM_TVOS
@autoreleasepool {
SDL_UIKitVideoData *data = (__bridge SDL_UIKitVideoData *)_this->internal;
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
id observer = [center addObserverForName:UIPasteboardChangedNotification
object:nil
queue:nil
usingBlock:^(NSNotification *note) {
if (!data.setting_clipboard) {
SDL_SendClipboardUpdate(false, NULL, 0);
}
}];
data.pasteboardObserver = observer;
data.setting_clipboard = false;
}
#endif
}
void UIKit_QuitClipboard(SDL_VideoDevice *_this)
{
@autoreleasepool {
SDL_UIKitVideoData *data = (__bridge SDL_UIKitVideoData *)_this->internal;
if (data.pasteboardObserver != nil) {
[[NSNotificationCenter defaultCenter] removeObserver:data.pasteboardObserver];
}
data.pasteboardObserver = nil;
}
}
#endif