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)); } } }
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)); } } }