Mac-Pasteboard
view release on metacpan or search on metacpan
LOG_TEXT ("Pasteboard name is null");
} else {
sname = PBLX_PBNAME (cname);
LOG_CF ("Pasteboard name", sname)
}
stat = PasteboardCreate (sname, (PasteboardRef *) pbref);
LOG_P ("Pastebord reference", *pbref);
CHECK ("PasteboardCreate", stat);
if (created_name != NULL) {
#ifdef TIGER
CFStringRef pbname;
if (PasteboardCopyName ((PasteboardRef) *pbref, &pbname)) {
*created_name = pblx_get_cstring (sname);
} else {
*created_name = pblx_get_cstring (pbname);
CFRelease (pbname);
}
#else
*created_name = pblx_get_cstring (sname);
#endif
LOG_C ("Created name", *created_name);
}
cleanup:
if (sname != NULL) CFRelease (sname);
return stat;
}
#undef ROUTINE
#define ROUTINE "pbl_clear"
OSStatus pbl_clear (void * pbref) {
OSStatus stat;
LOG_ENTRY;
LOG_ARG_P (pbref, ")\n");
stat = PasteboardClear (pbref);
CHECK ("PasteboardClear", stat);
cleanup:
return stat;
}
#undef ROUTINE
#define ROUTINE "pbl_copy"
OSStatus pbl_copy (
void * pbref,
const unsigned char * cdata,
size_t size,
unsigned long id,
const char * cflavor,
PB_FLAVOR_FLAGS flags
) {
CFDataRef pbdata = NULL;
CFStringRef sflavor = NULL;
OSStatus stat;
PasteboardSyncFlags sync;
LOG_ENTRY;
LOG_ARG_P (pbref, ", ");
LOG_ARG_S (cdata, ", ");
LOG_ARG_L (size, ", ");
LOG_ARG_L (id, ", ");
LOG_ARG_S (cflavor, ")\n");
/*
* It seems that I _can_ in fact get rid of the following, but
* I must do a clear _somewhere_ in the code to put data on the
* pasteboard.
stat = PasteboardClear (pbref);
CHECK ("PasteboardClear", stat)
*
* The other thing I could do here is a synchronize (q.v.), and
* then clear if we do not own the pasteboard.
*/
/* The synch is really only needed if we have two objects
* representing the same pasteboard. */
sync = PasteboardSynchronize (pbref);
if (cdata == NULL) {
pbdata = CFDataCreate (NULL, (const unsigned char *) "", 0);
} else {
pbdata = CFDataCreate (NULL, cdata, size);
}
sflavor = PBLX_FLAVOR (cflavor);
LOG_CF ("Flavor", sflavor);
stat = PasteboardPutItemFlavor (pbref, (PasteboardItemID) id,
sflavor, pbdata, (PasteboardFlavorFlags) flags);
CHECK ("PasteboardPutItemFlavor", stat)
cleanup:
if (sflavor != NULL) CFRelease (sflavor);
if (pbdata != NULL) CFRelease (pbdata);
return stat;
}
#undef ROUTINE
#define ROUTINE "pbl_paste"
OSStatus pbl_paste (
void *pbref,
int any,
unsigned long id,
const char *flavor,
unsigned char **data,
size_t *size,
PB_FLAVOR_FLAGS *flags
) {
CFArrayRef flavor_array = NULL;
CFDataRef flavor_data = NULL;
ItemCount item_inx;
ItemCount pb_items;
PasteboardSyncFlags sync;
OSStatus stat;
CFStringRef want_flavor = NULL;
LOG_ENTRY;
LOG_ARG_P (pbref, ", ");
LOG_ARG_L (any, ", ");
LOG_ARG_L (id, ", ");
LOG_ARG_S (flavor, ", ");
LOG_ARG_P (data, ", ");
LOG_ARG_P (size, ")\n");
*data = NULL;
*size = 0;
*flags = 0;
sync = PasteboardSynchronize (pbref);
stat = PasteboardGetItemCount (pbref, &pb_items);
CHECK ("PasteboardGetItemCount", stat);
want_flavor = PBLX_FLAVOR (flavor);
for (item_inx = pb_items; item_inx > 0; --item_inx) {
PasteboardItemID item_id;
( run in 0.714 second using v1.01-cache-2.11-cpan-483215c6ad5 )