예제 #1
0
void
COSXClipboard::add(EFormat format, const CString & data)
{
	LOG((CLOG_DEBUG "add %d bytes to clipboard format: %d", data.size(), format));

	for (ConverterList::const_iterator index = m_converters.begin();
			index != m_converters.end(); ++index) {

		IOSXClipboardConverter* converter = *index;

		// skip converters for other formats
		if (converter->getFormat() == format) {
			CString osXData = converter->fromIClipboard(data);
			CFStringRef flavorType = converter->getOSXFormat();
			CFDataRef dataRef = CFDataCreate(kCFAllocatorDefault, (UInt8 *)osXData.data(), osXData.size());

			PasteboardPutItemFlavor(
					m_pboard,
					(PasteboardItemID) 0,
					flavorType,
					dataRef, 
					kPasteboardFlavorNoFlags);
			LOG((CLOG_DEBUG "added %d bytes to clipboard format: %d", data.size(), format));
		}
	}
}
예제 #2
0
	void
COSXClipboard::add(EFormat format, const CString & data)
{
	bool emptied = false;
	if (m_pboard == NULL)
		return;

	LOG((CLOG_DEBUG "add %d bytes to clipboard format: %d", data.size(), format));
	if(format == IClipboard::kText) {
		LOG((CLOG_DEBUG " format of data to be added to clipboard was kText"));
	}
	else if(format == IClipboard::kBitmap) {
		LOG((CLOG_DEBUG " format of data to be added to clipboard was kBitmap"));
	}
	else if(format == IClipboard::kHTML) {
		LOG((CLOG_DEBUG " format of data to be added to clipboard was kHTML"));
	}

	for (ConverterList::const_iterator index = m_converters.begin();
			index != m_converters.end(); ++index) {

		IOSXClipboardConverter* converter = *index;

		// skip converters for other formats
		if (converter->getFormat() == format) {
			CString osXData = converter->fromIClipboard(data);
			CFStringRef flavorType = converter->getOSXFormat();
			CFDataRef dataRef = CFDataCreate(kCFAllocatorDefault, (UInt8 *)osXData.data(), osXData.size());

			// integ tests showed that if you call add(...) twice, then the
			// second call will actually fail to set clipboard data. calling
			// empty() seems to solve this problem. but, only clear the clipboard
			// for the first converter, otherwise further converters will wipe out
			// what we just added.
			if (!emptied) {
				empty();
				emptied = true;
			}
			
			PasteboardPutItemFlavor(
					m_pboard,
					(PasteboardItemID) 0,
					flavorType,
					dataRef, 
					kPasteboardFlavorNoFlags);
			LOG((CLOG_DEBUG "added %d bytes to clipboard format: %d", data.size(), format));
		}
	}
}