author | Sam Lantinga |
Tue, 26 May 2015 06:27:46 -0700 | |
changeset 9619 | b94b6d0bff0f |
parent 9087 | eef2e43f60d1 |
child 9998 | f67cf37e9cd4 |
permissions | -rw-r--r-- |
slouken@4499 | 1 |
/* |
slouken@5535 | 2 |
Simple DirectMedia Layer |
slouken@9619 | 3 |
Copyright (C) 1997-2015 Sam Lantinga <slouken@libsdl.org> |
slouken@4499 | 4 |
|
slouken@5535 | 5 |
This software is provided 'as-is', without any express or implied |
slouken@5535 | 6 |
warranty. In no event will the authors be held liable for any damages |
slouken@5535 | 7 |
arising from the use of this software. |
slouken@4499 | 8 |
|
slouken@5535 | 9 |
Permission is granted to anyone to use this software for any purpose, |
slouken@5535 | 10 |
including commercial applications, and to alter it and redistribute it |
slouken@5535 | 11 |
freely, subject to the following restrictions: |
slouken@4499 | 12 |
|
slouken@5535 | 13 |
1. The origin of this software must not be misrepresented; you must not |
slouken@5535 | 14 |
claim that you wrote the original software. If you use this software |
slouken@5535 | 15 |
in a product, an acknowledgment in the product documentation would be |
slouken@5535 | 16 |
appreciated but is not required. |
slouken@5535 | 17 |
2. Altered source versions must be plainly marked as such, and must not be |
slouken@5535 | 18 |
misrepresented as being the original software. |
slouken@5535 | 19 |
3. This notice may not be removed or altered from any source distribution. |
slouken@4499 | 20 |
*/ |
icculus@8093 | 21 |
#include "../../SDL_internal.h" |
slouken@4499 | 22 |
|
slouken@6044 | 23 |
#if SDL_VIDEO_DRIVER_COCOA |
slouken@6044 | 24 |
|
slouken@4499 | 25 |
#include "SDL_cocoavideo.h" |
slouken@4503 | 26 |
#include "../../events/SDL_clipboardevents_c.h" |
slouken@4499 | 27 |
|
slouken@4501 | 28 |
static NSString * |
slouken@4501 | 29 |
GetTextFormat(_THIS) |
slouken@4501 | 30 |
{ |
slouken@8986 | 31 |
if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5) { |
slouken@4501 | 32 |
return NSPasteboardTypeString; |
slouken@4501 | 33 |
} else { |
slouken@4501 | 34 |
return NSStringPboardType; |
slouken@4501 | 35 |
} |
slouken@4501 | 36 |
} |
slouken@4499 | 37 |
|
slouken@4499 | 38 |
int |
slouken@4499 | 39 |
Cocoa_SetClipboardText(_THIS, const char *text) |
slouken@9087 | 40 |
{ @autoreleasepool |
slouken@4499 | 41 |
{ |
slouken@4503 | 42 |
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
slouken@4504 | 43 |
NSPasteboard *pasteboard; |
slouken@4501 | 44 |
NSString *format = GetTextFormat(_this); |
slouken@4499 | 45 |
|
slouken@6848 | 46 |
pasteboard = [NSPasteboard generalPasteboard]; |
slouken@6848 | 47 |
data->clipboard_count = [pasteboard declareTypes:[NSArray arrayWithObject:format] owner:nil]; |
slouken@6848 | 48 |
[pasteboard setString:[NSString stringWithUTF8String:text] forType:format]; |
slouken@6848 | 49 |
|
slouken@4499 | 50 |
return 0; |
slouken@9087 | 51 |
}} |
slouken@4499 | 52 |
|
slouken@4499 | 53 |
char * |
slouken@4499 | 54 |
Cocoa_GetClipboardText(_THIS) |
slouken@9087 | 55 |
{ @autoreleasepool |
slouken@4499 | 56 |
{ |
slouken@4504 | 57 |
NSPasteboard *pasteboard; |
slouken@4501 | 58 |
NSString *format = GetTextFormat(_this); |
slouken@4499 | 59 |
NSString *available; |
slouken@4499 | 60 |
char *text; |
slouken@4499 | 61 |
|
slouken@6848 | 62 |
pasteboard = [NSPasteboard generalPasteboard]; |
slouken@6848 | 63 |
available = [pasteboard availableTypeFromArray: [NSArray arrayWithObject:format]]; |
slouken@6848 | 64 |
if ([available isEqualToString:format]) { |
slouken@6848 | 65 |
NSString* string; |
slouken@6848 | 66 |
const char *utf8; |
slouken@4499 | 67 |
|
slouken@6848 | 68 |
string = [pasteboard stringForType:format]; |
slouken@6848 | 69 |
if (string == nil) { |
slouken@6848 | 70 |
utf8 = ""; |
slouken@4499 | 71 |
} else { |
slouken@6848 | 72 |
utf8 = [string UTF8String]; |
slouken@4499 | 73 |
} |
slouken@6848 | 74 |
text = SDL_strdup(utf8); |
slouken@6848 | 75 |
} else { |
slouken@6848 | 76 |
text = SDL_strdup(""); |
slouken@4499 | 77 |
} |
slouken@6848 | 78 |
|
slouken@4499 | 79 |
return text; |
slouken@9087 | 80 |
}} |
slouken@4499 | 81 |
|
slouken@4499 | 82 |
SDL_bool |
slouken@4499 | 83 |
Cocoa_HasClipboardText(_THIS) |
slouken@4499 | 84 |
{ |
aschiffler@6036 | 85 |
SDL_bool result = SDL_FALSE; |
aschiffler@6036 | 86 |
char *text = Cocoa_GetClipboardText(_this); |
aschiffler@6036 | 87 |
if (text) { |
slouken@7721 | 88 |
result = text[0] != '\0' ? SDL_TRUE : SDL_FALSE; |
slouken@8986 | 89 |
SDL_free(text); |
slouken@4499 | 90 |
} |
slouken@4499 | 91 |
return result; |
slouken@4499 | 92 |
} |
slouken@4499 | 93 |
|
slouken@4503 | 94 |
void |
slouken@4503 | 95 |
Cocoa_CheckClipboardUpdate(struct SDL_VideoData * data) |
slouken@9087 | 96 |
{ @autoreleasepool |
slouken@4503 | 97 |
{ |
slouken@4504 | 98 |
NSPasteboard *pasteboard; |
slouken@4503 | 99 |
NSInteger count; |
slouken@4503 | 100 |
|
slouken@6848 | 101 |
pasteboard = [NSPasteboard generalPasteboard]; |
slouken@6848 | 102 |
count = [pasteboard changeCount]; |
slouken@6848 | 103 |
if (count != data->clipboard_count) { |
slouken@6848 | 104 |
if (data->clipboard_count) { |
slouken@6848 | 105 |
SDL_SendClipboardUpdate(); |
slouken@4503 | 106 |
} |
slouken@6848 | 107 |
data->clipboard_count = count; |
slouken@4503 | 108 |
} |
slouken@9087 | 109 |
}} |
slouken@4503 | 110 |
|
slouken@6044 | 111 |
#endif /* SDL_VIDEO_DRIVER_COCOA */ |
slouken@6044 | 112 |
|
slouken@4499 | 113 |
/* vi: set ts=4 sw=4 expandtab: */ |