mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-04-21 04:55:02 -05:00
Add Apple Event handlers for 'aevt'/'oapp', 'aevt'/'odoc' and 'aevt'/'pdoc'.
None of them does anything useful yet (though the odoc one tries to). [originally from svn r2700]
This commit is contained in:
parent
5b79eedce2
commit
596f6e9787
17
mac/mac.c
17
mac/mac.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: mac.c,v 1.34 2003/01/20 22:55:08 ben Exp $ */
|
/* $Id: mac.c,v 1.35 2003/01/23 22:57:43 ben Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999 Ben Harris
|
* Copyright (c) 1999 Ben Harris
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
@ -90,7 +90,6 @@ static void mac_adjustmenus(void);
|
|||||||
static void mac_closewindow(WindowPtr);
|
static void mac_closewindow(WindowPtr);
|
||||||
static void mac_zoomwindow(WindowPtr, short);
|
static void mac_zoomwindow(WindowPtr, short);
|
||||||
#pragma noreturn (cleanup_exit)
|
#pragma noreturn (cleanup_exit)
|
||||||
static pascal OSErr mac_aevt_quit(const AppleEvent *, AppleEvent *, long);
|
|
||||||
|
|
||||||
struct mac_windows {
|
struct mac_windows {
|
||||||
WindowPtr about;
|
WindowPtr about;
|
||||||
@ -231,6 +230,12 @@ static void mac_startup(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Install Apple Event handlers. */
|
/* Install Apple Event handlers. */
|
||||||
|
AEInstallEventHandler(kCoreEventClass, kAEOpenApplication,
|
||||||
|
NewAEEventHandlerUPP(&mac_aevt_oapp), 0, FALSE);
|
||||||
|
AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
|
||||||
|
NewAEEventHandlerUPP(&mac_aevt_odoc), 0, FALSE);
|
||||||
|
AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments,
|
||||||
|
NewAEEventHandlerUPP(&mac_aevt_pdoc), 0, FALSE);
|
||||||
AEInstallEventHandler(kCoreEventClass, kAEQuitApplication,
|
AEInstallEventHandler(kCoreEventClass, kAEQuitApplication,
|
||||||
NewAEEventHandlerUPP(&mac_aevt_quit), 0, FALSE);
|
NewAEEventHandlerUPP(&mac_aevt_quit), 0, FALSE);
|
||||||
}
|
}
|
||||||
@ -651,9 +656,15 @@ static void mac_adjustcursor(RgnHandle cursrgn) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static pascal OSErr mac_aevt_quit(const AppleEvent *req, AppleEvent *reply,
|
pascal OSErr mac_aevt_quit(const AppleEvent *req, AppleEvent *reply,
|
||||||
long refcon)
|
long refcon)
|
||||||
{
|
{
|
||||||
|
DescType type;
|
||||||
|
Size size;
|
||||||
|
|
||||||
|
if (AEGetAttributePtr(req, keyMissedKeywordAttr, typeWildCard,
|
||||||
|
&type, NULL, 0, &size) == noErr)
|
||||||
|
return errAEParamMissed;
|
||||||
|
|
||||||
borednow = 1;
|
borednow = 1;
|
||||||
return noErr;
|
return noErr;
|
||||||
|
@ -144,6 +144,11 @@ extern Socket ot_register(void *, Plug);
|
|||||||
extern Socket ot_new(SockAddr addr, int, int, int, int, Plug);
|
extern Socket ot_new(SockAddr addr, int, int, int, int, Plug);
|
||||||
extern Socket ot_newlistener(char *, int, Plug, int);
|
extern Socket ot_newlistener(char *, int, Plug, int);
|
||||||
extern char *ot_addr_error(SockAddr);
|
extern char *ot_addr_error(SockAddr);
|
||||||
|
/* Apple Event Handlers (in various files) */
|
||||||
|
extern pascal OSErr mac_aevt_oapp(const AppleEvent *, AppleEvent *, long);
|
||||||
|
extern pascal OSErr mac_aevt_odoc(const AppleEvent *, AppleEvent *, long);
|
||||||
|
extern pascal OSErr mac_aevt_pdoc(const AppleEvent *, AppleEvent *, long);
|
||||||
|
extern pascal OSErr mac_aevt_quit(const AppleEvent *, AppleEvent *, long);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
112
mac/macdlg.c
112
mac/macdlg.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: macdlg.c,v 1.5 2003/01/18 20:52:59 ben Exp $ */
|
/* $Id: macdlg.c,v 1.6 2003/01/23 22:57:43 ben Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2002 Ben Harris
|
* Copyright (c) 2002 Ben Harris
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
@ -30,6 +30,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <MacTypes.h>
|
#include <MacTypes.h>
|
||||||
|
#include <AEDataModel.h>
|
||||||
|
#include <AppleEvents.h>
|
||||||
#include <Dialogs.h>
|
#include <Dialogs.h>
|
||||||
#include <Resources.h>
|
#include <Resources.h>
|
||||||
#include <StandardFile.h>
|
#include <StandardFile.h>
|
||||||
@ -60,30 +62,35 @@ void mac_newsession(void)
|
|||||||
ShowWindow(s->settings_window);
|
ShowWindow(s->settings_window);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mac_opensession(void) {
|
static OSErr mac_opensessionfrom(FSSpec *fss)
|
||||||
|
{
|
||||||
|
FInfo fi;
|
||||||
Session *s;
|
Session *s;
|
||||||
StandardFileReply sfr;
|
|
||||||
static const OSType sftypes[] = { 'Sess', 0, 0, 0 };
|
|
||||||
void *sesshandle;
|
void *sesshandle;
|
||||||
int i;
|
int i;
|
||||||
|
OSErr err;
|
||||||
|
|
||||||
s = smalloc(sizeof(*s));
|
s = smalloc(sizeof(*s));
|
||||||
memset(s, 0, sizeof(*s));
|
memset(s, 0, sizeof(*s));
|
||||||
|
|
||||||
StandardGetFile(NULL, 1, sftypes, &sfr);
|
err = FSpGetFInfo(fss, &fi);
|
||||||
if (!sfr.sfGood) goto fail;
|
if (err != noErr) return err;
|
||||||
|
if (fi.fdFlags & kIsStationery)
|
||||||
sesshandle = open_settings_r_fsp(&sfr.sfFile);
|
|
||||||
if (sesshandle == NULL) goto fail;
|
|
||||||
load_open_settings(sesshandle, TRUE, &s->cfg);
|
|
||||||
close_settings_r(sesshandle);
|
|
||||||
if (sfr.sfFlags & kIsStationery)
|
|
||||||
s->hasfile = FALSE;
|
s->hasfile = FALSE;
|
||||||
else {
|
else {
|
||||||
s->hasfile = TRUE;
|
s->hasfile = TRUE;
|
||||||
s->savefile = sfr.sfFile;
|
s->savefile = *fss;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sesshandle = open_settings_r_fsp(fss);
|
||||||
|
if (sesshandle == NULL) {
|
||||||
|
/* XXX need a way to pass up an error number */
|
||||||
|
err = -9999;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
load_open_settings(sesshandle, TRUE, &s->cfg);
|
||||||
|
close_settings_r(sesshandle);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Select protocol. This is farmed out into a table in a
|
* Select protocol. This is farmed out into a table in a
|
||||||
* separate file to enable an ssh-free variant.
|
* separate file to enable an ssh-free variant.
|
||||||
@ -98,11 +105,22 @@ void mac_opensession(void) {
|
|||||||
fatalbox("Unsupported protocol number found");
|
fatalbox("Unsupported protocol number found");
|
||||||
}
|
}
|
||||||
mac_startsession(s);
|
mac_startsession(s);
|
||||||
return;
|
return noErr;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
sfree(s);
|
sfree(s);
|
||||||
return;
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mac_opensession(void) {
|
||||||
|
StandardFileReply sfr;
|
||||||
|
static const OSType sftypes[] = { 'Sess', 0, 0, 0 };
|
||||||
|
|
||||||
|
StandardGetFile(NULL, 1, sftypes, &sfr);
|
||||||
|
if (!sfr.sfGood) return;
|
||||||
|
|
||||||
|
mac_opensessionfrom(&sfr.sfFile);
|
||||||
|
/* XXX handle error */
|
||||||
}
|
}
|
||||||
|
|
||||||
void mac_savesession(void)
|
void mac_savesession(void)
|
||||||
@ -139,6 +157,70 @@ void mac_savesessionas(void)
|
|||||||
s->savefile = sfr.sfFile;
|
s->savefile = sfr.sfFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pascal OSErr mac_aevt_oapp(const AppleEvent *req, AppleEvent *reply,
|
||||||
|
long refcon)
|
||||||
|
{
|
||||||
|
DescType type;
|
||||||
|
Size size;
|
||||||
|
|
||||||
|
if (AEGetAttributePtr(req, keyMissedKeywordAttr, typeWildCard,
|
||||||
|
&type, NULL, 0, &size) == noErr)
|
||||||
|
return errAEParamMissed;
|
||||||
|
|
||||||
|
/* XXX we should do something here. */
|
||||||
|
return noErr;
|
||||||
|
}
|
||||||
|
|
||||||
|
pascal OSErr mac_aevt_odoc(const AppleEvent *req, AppleEvent *reply,
|
||||||
|
long refcon)
|
||||||
|
{
|
||||||
|
DescType type;
|
||||||
|
AEKeyword keywd;
|
||||||
|
Size size;
|
||||||
|
AEDescList docs = { typeNull, NULL };
|
||||||
|
OSErr err;
|
||||||
|
long ndocs, i;
|
||||||
|
FSSpec fss;
|
||||||
|
|
||||||
|
err = AEGetParamDesc(req, keyDirectObject, typeAEList, &docs);
|
||||||
|
if (err != noErr) goto out;
|
||||||
|
|
||||||
|
if (AEGetAttributePtr(req, keyMissedKeywordAttr, typeWildCard,
|
||||||
|
&type, NULL, 0, &size) == noErr) {
|
||||||
|
err = errAEParamMissed;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = AECountItems(&docs, &ndocs);
|
||||||
|
if (err != noErr) goto out;
|
||||||
|
|
||||||
|
for (i = 0; i < ndocs; i++) {
|
||||||
|
err = AEGetNthPtr(&docs, i, typeFSS, &keywd, &type, &fss, sizeof(fss),
|
||||||
|
&size);
|
||||||
|
if (err != noErr) goto out;
|
||||||
|
err = mac_opensessionfrom(&fss);
|
||||||
|
if (err != noErr) goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
AEDisposeDesc(&docs);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
pascal OSErr mac_aevt_pdoc(const AppleEvent *req, AppleEvent *reply,
|
||||||
|
long refcon)
|
||||||
|
{
|
||||||
|
DescType type;
|
||||||
|
Size size;
|
||||||
|
|
||||||
|
if (AEGetAttributePtr(req, keyMissedKeywordAttr, typeWildCard,
|
||||||
|
&type, NULL, 0, &size) == noErr)
|
||||||
|
return errAEParamMissed;
|
||||||
|
|
||||||
|
/* We can't meaningfully do anything here. */
|
||||||
|
return errAEEventNotHandled;
|
||||||
|
}
|
||||||
|
|
||||||
void mac_activatedlg(WindowPtr window, EventRecord *event)
|
void mac_activatedlg(WindowPtr window, EventRecord *event)
|
||||||
{
|
{
|
||||||
DialogItemType itemtype;
|
DialogItemType itemtype;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user