static PyObject *DragObj_SetDropLocation(DragObjObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; AEDesc dropLocation; #ifndef SetDropLocation PyMac_PRECHECK(SetDropLocation); #endif if (!PyArg_ParseTuple(_args, "O&", AEDesc_Convert, &dropLocation)) return NULL; _err = SetDropLocation(_self->ob_itself, &dropLocation); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; }
void nglDataFilesObject::GetFlavorData(DragRef dragRef, DragItemRef& itemRef, FlavorType flavorType) { if (flavorType == kDragFlavorTypeHFS) { OSErr err = noErr; Size dataSize; err = ::GetFlavorDataSize (dragRef, itemRef, flavorType, &dataSize); NGL_ASSERT(!err); HFSFlavor hfsInfo; err = ::GetFlavorData(dragRef, itemRef, flavorType, &hfsInfo, &dataSize, 0); NGL_ASSERT(!err); FSRef fileRef; err = FSpMakeFSRef(&(hfsInfo.fileSpec), &fileRef); char path_str[255]; err = FSRefMakePath(&fileRef, (UInt8*)path_str, 254); NGL_ASSERT(!err); //NGL_OUT("HFS Type: file: %s\n", path_str); AddFile(nglString(path_str)); } else if (flavorType == kDragFlavorTypePromiseHFS) { OSErr err = noErr; PromiseHFSFlavor hfsInfo; Size dataSize = sizeof(PromiseHFSFlavor); err = ::GetFlavorData(dragRef, itemRef, flavorType, &hfsInfo, &dataSize, 0); // check for a drop from find file if (hfsInfo.promisedFlavor == kDragPromisedFlavorFindFile) { // from find file, no need to set the file location... } else { FSRef fsref; // we'll put promised files in temp dir err = FSFindFolder(kOnSystemDisk, kTemporaryFolderType, kCreateFolder, &fsref); NGL_ASSERT(!err); AEDesc dropLocation; err = AECreateDesc(typeFSRef, &fsref, sizeof(FSRef), &dropLocation); NGL_ASSERT(!err); err = SetDropLocation(dragRef, &dropLocation); NGL_ASSERT(!err); AEDisposeDesc(&dropLocation); } FSSpec fsspec; dataSize = sizeof(FSSpec); err = ::GetFlavorData(dragRef, itemRef, hfsInfo.promisedFlavor, &fsspec, &dataSize, 0); NGL_ASSERT(!err); FSRef fileRef; err = FSpMakeFSRef(&fsspec, &fileRef); NGL_ASSERT(!err); char path_str[255]; err = FSRefMakePath(&fileRef, (UInt8*)path_str, 254); NGL_ASSERT(!err); //NGL_OUT("HFS Type: file: %s\n", path_str); AddFile(nglString(path_str)); /*err = GetFlavorDataSize (dragRef, itemRef, flavorType, &dataSize); NGL_ASSERT(!err); PromiseHFSFlavor hfsInfo; err = ::GetFlavorData(dragRef, itemRef, flavorType, &hfsInfo, &dataSize, 0); NGL_ASSERT(!err); FSRef fsref; err = ::FSPathMakeRef((const UInt8*)("/tmp"), &fsref, NULL); NGL_ASSERT(!err); FSSpec folder; err = ::FSGetCatalogInfo(&fsref, kFSCatInfoNone, NULL, NULL, &folder, NULL); NGL_ASSERT(!err); err = ::SetDropFolder(dragRef, &folder); NGL_ASSERT(!err); FSSpec fsspec; dataSize = sizeof(FSSpec); err = ::GetFlavorData(dragRef, itemRef, hfsInfo.promisedFlavor, &fsspec, &dataSize, 0); NGL_ASSERT(!err); FSRef fileRef; err = FSpMakeFSRef(&fsspec, &fileRef); NGL_ASSERT(!err); char path_str[255]; err = FSRefMakePath(&fileRef, (UInt8*)path_str, 254); NGL_ASSERT(!err); //NGL_OUT("HFS Type: file: %s\n", path_str); AddFile(nglString((char*)path_str));*/ } }