/* SDL - Simple DirectMedia Layer Copyright (C) 1997-2010 Sam Lantinga This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Sam Lantinga slouken@libsdl.org */ #include "SDL_config.h" #include "SDL_cocoavideo.h" #include "../../events/SDL_clipboardevents_c.h" static NSString * GetTextFormat(_THIS) { #if MAC_OS_X_VERSION_MAX_ALLOWED < 1060 return NSStringPboardType; #else SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; if (data->osversion >= 0x1060) { return NSPasteboardTypeString; } else { return NSStringPboardType; } #endif } int Cocoa_SetClipboardText(_THIS, const char *text) { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; NSAutoreleasePool *pool; NSPasteboard *pasteboard; NSString *format = GetTextFormat(_this); pool = [[NSAutoreleasePool alloc] init]; pasteboard = [NSPasteboard generalPasteboard]; data->clipboard_count = [pasteboard declareTypes:[NSArray arrayWithObject:format] owner:nil]; [pasteboard setString:[NSString stringWithUTF8String:text] forType:format]; [pool release]; return 0; } char * Cocoa_GetClipboardText(_THIS) { NSAutoreleasePool *pool; NSPasteboard *pasteboard; NSString *format = GetTextFormat(_this); NSString *available; char *text; pool = [[NSAutoreleasePool alloc] init]; pasteboard = [NSPasteboard generalPasteboard]; available = [pasteboard availableTypeFromArray: [NSArray arrayWithObject:format]]; if ([available isEqualToString:format]) { NSString* string; const char *utf8; string = [pasteboard stringForType:format]; if (string == nil) { utf8 = ""; } else { utf8 = [string UTF8String]; } text = SDL_strdup(utf8); } else { text = SDL_strdup(""); } [pool release]; return text; } 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; } [pool release]; return result; } void Cocoa_CheckClipboardUpdate(struct SDL_VideoData * data) { NSAutoreleasePool *pool; NSPasteboard *pasteboard; NSInteger count; pool = [[NSAutoreleasePool alloc] init]; pasteboard = [NSPasteboard generalPasteboard]; count = [pasteboard changeCount]; if (count != data->clipboard_count) { if (data->clipboard_count) { SDL_SendClipboardUpdate(); } data->clipboard_count = count; } [pool release]; } /* vi: set ts=4 sw=4 expandtab: */