Mercurial > mplayer.hg
view osdep/macosx_finder_args.c @ 27815:f92271dc5f17
Remove X11 backing store: this is now a useless flag.
Also, it is mandatory for Xserver 1.5.x (part of Xorg 7.4, shipped on all
Linux distributions starting from Oct. 08) and will be removed
from Xserver 1.6 anyhow ...
Patch by Stephane Marchesin (marchesin at icps dot u dash strasbg dot fr).
For more info, see long flame thread at:
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2008-August/058323.html
author | ben |
---|---|
date | Wed, 29 Oct 2008 22:03:36 +0000 |
parents | 64d82a45a05d |
children | 5cfef41a1771 |
line wrap: on
line source
#include <Carbon/Carbon.h> #include <ApplicationServices/ApplicationServices.h> #include "stream/url.h" #include "mp_msg.h" #include "m_option.h" #include "m_config.h" #include "playtree.h" static play_tree_t *files=NULL; static inline void add_entry(play_tree_t **last_parentp, play_tree_t **last_entryp, play_tree_t *entry) { if(*last_entryp==NULL) play_tree_set_child(*last_parentp, entry); else play_tree_append_entry(*last_entryp, entry); *last_entryp=entry; } static pascal OSErr AppleEventHandlerProc(const AppleEvent *theAppleEvent, AppleEvent* reply, SInt32 handlerRefcon) { OSErr err=errAEEventNotHandled, res=noErr; AEDescList docList; long itemsInList; AERemoveEventHandler(kCoreEventClass, kAEOpenDocuments, NULL, FALSE); if((res=AEGetParamDesc(theAppleEvent, keyDirectObject, typeAEList, &docList))==noErr) { if((res=AECountItems(&docList, &itemsInList))==noErr) { Size currentSize=0; int valid=0,i; char *parm=NULL; play_tree_t *last_entry=NULL; files=play_tree_new(); for(i=1;i<=itemsInList;++i) { for(;;) { OSErr e; Size actualSize=0; AEKeyword keywd; DescType returnedType; if((e=AEGetNthPtr(&docList, i, typeFileURL, &keywd, &returnedType, (Ptr)parm, currentSize, &actualSize))==noErr) { if(actualSize>=currentSize) { currentSize=actualSize+1; parm=realloc(parm, currentSize); } else { parm[actualSize]=0; valid=1; break; } } else { valid=0; break; } } if(valid) { URL_t *url=url_new(parm); if(url && !strcmp(url->protocol,"file") && !strcmp(url->hostname,"localhost")) { play_tree_t *entry=play_tree_new(); url_unescape_string(url->file, url->file); play_tree_add_file(entry, url->file); add_entry(&files, &last_entry, entry); } url_free(url); } } if(parm) free(parm); err=noErr; } else mp_msg(MSGT_CFGPARSER, MSGL_ERR, "AECountItems() error %d\n", res); AEDisposeDesc(&docList); } else mp_msg(MSGT_CFGPARSER, MSGL_ERR, "AEGetParamDesc() error %d\n", res); QuitApplicationEventLoop(); return err; } play_tree_t *macosx_finder_args(m_config_t *config, int argc, char **argv) { ProcessSerialNumber myPsn; char myPsnStr[5+10+1+10+1]; GetCurrentProcess(&myPsn); snprintf(myPsnStr, 5+10+1+10+1, "-psn_%u_%u", myPsn.highLongOfPSN, myPsn.lowLongOfPSN); myPsnStr[5+10+1+10]=0; if((argc==2) && !strcmp(myPsnStr, argv[1])) { m_config_set_option(config, "quiet", NULL); InitCursor(); AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, NewAEEventHandlerUPP(AppleEventHandlerProc), 0, FALSE); RunApplicationEventLoop(); } return files; }