1
0
mirror of https://github.com/fwbuilder/fwbuilder synced 2025-11-19 00:02:45 +01:00
fwbuilder/src/gui/main_mac.cpp
2018-09-12 20:21:12 +02:00

131 lines
4.0 KiB
C++

/*
Firewall Builder
Copyright (C) 2008 NetCitadel, LLC
Author: Vadim Kurland vadim@fwbuilder.org
$Id: main.cpp 493 2008-08-30 05:05:56Z vadim $
This program is free software which we release under the GNU General Public
License. You may redistribute and/or modify this program under the terms
of that license as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
To get a copy of the GNU General Public License, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "global.h"
#include <QDir>
#include <QString>
#include "FWWindow.h"
#include "FWBSettings.h"
using namespace std;
#if defined(Q_WS_MAC)
#include <Carbon/Carbon.h>
static OSErr checkAppleEventForMissingParams(const AppleEvent&
theAppleEvent)
{
DescType returnedType;
Size actualSize;
OSErr err;
switch (err = AEGetAttributePtr(&theAppleEvent,
keyMissedKeywordAttr,
typeWildCard,
&returnedType,
nil,
0,
&actualSize))
{
case errAEDescNotFound:
return noErr;
case noErr:
return errAEEventNotHandled;
default:
return err;
}
}
static pascal OSErr odocHandler(const AppleEvent* inEvent, AppleEvent*
/*reply*/, SRefCon /*refCon*/)
{
if (fwbdebug) qDebug("Handling 'odoc'\n");
AEDescList documentList;
OSErr err = AEGetParamDesc(inEvent, keyDirectObject, typeAEList,
&documentList);
if (err == noErr)
{
err = checkAppleEventForMissingParams(*inEvent);
if (err == noErr)
{
long documentCount;
err = AECountItems(&documentList, &documentCount);
for (long documentIndex = 1; err == noErr && documentIndex <=
documentCount; documentIndex++)
{
// What kind of document is it?
DescType returnedType;
Size actualSize;
err = AESizeOfNthItem(&documentList,
documentIndex,
&returnedType,
&actualSize);
if (err == noErr)
{
// It's just a normal document file
AEKeyword keyword;
FSRef ref;
err = AEGetNthPtr(&documentList,
documentIndex,
typeFSRef,
&keyword,
&returnedType,
(Ptr)&ref, sizeof(FSRef), &actualSize);
if (err == noErr)
{
char buf[1024];
FSRefMakePath(&ref, reinterpret_cast<UInt8*>(buf),1024);
QDir file(buf);
mw->registerAutoOpenDocFile(file.canonicalPath(),
false);
//mw->openDocFiles << file.canonicalPath();
}
}
}
}
AEDisposeDesc(&documentList);
}
if (fwbdebug) qDebug("Returning %d from handleOpenDocuments\n", err);
return err;
}
void connectOdocHandler()
{
AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
NewAEEventHandlerUPP(odocHandler),0,false);
}
#endif // Q_WS_MAC