Mac-Pasteboard

 view release on metacpan or  search on metacpan

pbl.c  view on Meta::CPAN

	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 )