Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4b5c7a4

Browse files
committed
Allow access to the returned value(s) as FSRefs. Unfortunately for some
reason getting at saveFileName doesn't work, so it currently only really works for opening files for reading.
1 parent 8d4c981 commit 4b5c7a4

1 file changed

Lines changed: 38 additions & 2 deletions

File tree

Mac/Modules/Nav.c

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,10 +316,12 @@ static PyObject *
316316
navrr_getattr(navrrobject *self, char *name)
317317
{
318318
FSSpec fss;
319+
FSRef fsr;
319320

320321
if( strcmp(name, "__members__") == 0 )
321-
return Py_BuildValue("sssssss", "version", "validRecord", "replacing",
322-
"isStationery", "translationNeeded", "selection", "fileTranslation");
322+
return Py_BuildValue("ssssssssss", "version", "validRecord", "replacing",
323+
"isStationery", "translationNeeded", "selection", "selection_fsr",
324+
"fileTranslation", "keyScript", "saveFileName");
323325
if( strcmp(name, "version") == 0 )
324326
return Py_BuildValue("h", self->itself.version);
325327
if( strcmp(name, "validRecord") == 0 )
@@ -364,8 +366,42 @@ navrr_getattr(navrrobject *self, char *name)
364366
}
365367
return rv;
366368
}
369+
if( strcmp(name, "selection_fsr") == 0 ) {
370+
SInt32 i, count;
371+
OSErr err;
372+
PyObject *rv, *rvitem;
373+
AEDesc desc;
374+
375+
if (err=AECountItems(&self->itself.selection, &count)) {
376+
PyErr_Mac(ErrorObject, err);
377+
return NULL;
378+
}
379+
if ( (rv=PyList_New(count)) == NULL )
380+
return NULL;
381+
for(i=0; i<count; i++) {
382+
desc.dataHandle = NULL;
383+
if (err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc)) {
384+
Py_DECREF(rv);
385+
PyErr_Mac(ErrorObject, err);
386+
return NULL;
387+
}
388+
if (err=AEGetDescData(&desc, &fsr, sizeof(FSRef))) {
389+
Py_DECREF(rv);
390+
PyErr_Mac(ErrorObject, err);
391+
return NULL;
392+
}
393+
rvitem = PyMac_BuildFSRef(&fsr);
394+
PyList_SetItem(rv, i, rvitem);
395+
AEDisposeDesc(&desc);
396+
}
397+
return rv;
398+
}
367399
if( strcmp(name, "fileTranslation") == 0 )
368400
return ResObj_New((Handle)self->itself.fileTranslation);
401+
if( strcmp(name, "keyScript") == 0 )
402+
return Py_BuildValue("h", (short)self->itself.keyScript);
403+
if( strcmp(name, "saveFileName") == 0 )
404+
return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
369405

370406

371407
return Py_FindMethod(navrr_methods, (PyObject *)self, name);

0 commit comments

Comments
 (0)