You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2174 lines
70 KiB
2174 lines
70 KiB
/* |
|
File: CarbonEventsCore.h |
|
|
|
Contains: Carbon Event Manager |
|
|
|
Version: QuickTime 7.3 |
|
|
|
Copyright: (c) 2007 (c) 1999-2001 by Apple Computer, Inc., all rights reserved. |
|
|
|
Bugs?: For bug reports, consult the following page on |
|
the World Wide Web: |
|
|
|
http://developer.apple.com/bugreporter/ |
|
|
|
*/ |
|
#ifndef __CARBONEVENTSCORE__ |
|
#define __CARBONEVENTSCORE__ |
|
|
|
#ifndef __CFSTRING__ |
|
#include <CFString.h> |
|
#endif |
|
|
|
#ifndef __AEREGISTRY__ |
|
#include <AERegistry.h> |
|
#endif |
|
|
|
#ifndef __AEDATAMODEL__ |
|
#include <AEDataModel.h> |
|
#endif |
|
|
|
|
|
|
|
#if PRAGMA_ONCE |
|
#pragma once |
|
#endif |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
#if PRAGMA_IMPORT |
|
#pragma import on |
|
#endif |
|
|
|
#if PRAGMA_STRUCT_ALIGN |
|
#pragma options align=mac68k |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(push, 2) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack(2) |
|
#endif |
|
|
|
/*======================================================================================*/ |
|
/* The core data structure of the Carbon Event system */ |
|
/*======================================================================================*/ |
|
typedef struct OpaqueEventRef* EventRef; |
|
/*======================================================================================*/ |
|
/* EVENT COMMON */ |
|
/*======================================================================================*/ |
|
|
|
|
|
/* |
|
* Discussion: |
|
* The following are all errors which can be returned from the |
|
* routines contained in this file. |
|
*/ |
|
enum { |
|
|
|
/* |
|
* This is returned from PostEventToQueue if the event in question is |
|
* already in the queue you are posting it to (or any other queue). |
|
*/ |
|
eventAlreadyPostedErr = -9860, |
|
|
|
/* |
|
* You are attemtping to modify a target that is currently in use, |
|
* such as when dispatching. |
|
*/ |
|
eventTargetBusyErr = -9861, |
|
|
|
/* |
|
* This is obsolete and will be removed. |
|
*/ |
|
eventClassInvalidErr = -9862, |
|
|
|
/* |
|
* This is obsolete and will be removed. |
|
*/ |
|
eventClassIncorrectErr = -9864, |
|
|
|
/* |
|
* Returned from InstallEventHandler if the handler proc you pass is |
|
* already installed for a given event type you are trying to |
|
* register. |
|
*/ |
|
eventHandlerAlreadyInstalledErr = -9866, |
|
|
|
/* |
|
* A generic error. |
|
*/ |
|
eventInternalErr = -9868, |
|
|
|
/* |
|
* This is obsolete and will be removed. |
|
*/ |
|
eventKindIncorrectErr = -9869, |
|
|
|
/* |
|
* The piece of data you are requesting from an event is not present. |
|
*/ |
|
eventParameterNotFoundErr = -9870, |
|
|
|
/* |
|
* This is what you should return from an event handler when your |
|
* handler has received an event it doesn't currently want to (or |
|
* isn't able to) handle. If you handle an event, you should return |
|
* noErr from your event handler. Any return value other than |
|
* eventNotHandledErr will cause event handling to stop; the event |
|
* will not be sent to any other event handler, and the return value |
|
* will be provided to the original caller of SendEventToTarget. |
|
*/ |
|
eventNotHandledErr = -9874, |
|
|
|
/* |
|
* The event loop has timed out. This can be returned from calls to |
|
* ReceiveNextEvent or RunCurrentEventLoop. |
|
*/ |
|
eventLoopTimedOutErr = -9875, |
|
|
|
/* |
|
* The event loop was quit, probably by a call to QuitEventLoop. This |
|
* can be returned from ReceiveNextEvent or RunCurrentEventLoop. |
|
*/ |
|
eventLoopQuitErr = -9876, |
|
|
|
/* |
|
* Returned from RemoveEventFromQueue when trying to remove an event |
|
* that's not in any queue. |
|
*/ |
|
eventNotInQueueErr = -9877, |
|
eventHotKeyExistsErr = -9878, |
|
eventHotKeyInvalidErr = -9879 |
|
}; |
|
|
|
/*======================================================================================*/ |
|
/* EVENT CORE */ |
|
/*======================================================================================*/ |
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Event Flags, options */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
/* |
|
* EventPriority |
|
* |
|
* Discussion: |
|
* These values define the relative priority of an event, and are |
|
* used when posting events with PostEventToQueue. In general events |
|
* are pulled from the queue in order of first posted to last |
|
* posted. These priorities are a way to alter that when posting |
|
* events. You can post a standard priority event and then a high |
|
* priority event and the high priority event will be pulled from |
|
* the queue first. |
|
*/ |
|
typedef SInt16 EventPriority; |
|
enum { |
|
|
|
/* |
|
* Lowest priority. Currently only window update events are posted at |
|
* this priority. |
|
*/ |
|
kEventPriorityLow = 0, |
|
|
|
/* |
|
* Normal priority of events. Most events are standard priority. |
|
*/ |
|
kEventPriorityStandard = 1, |
|
|
|
/* |
|
* Highest priority. |
|
*/ |
|
kEventPriorityHigh = 2 |
|
}; |
|
|
|
enum { |
|
kEventLeaveInQueue = false, |
|
kEventRemoveFromQueue = true |
|
}; |
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Event Times */ |
|
/* */ |
|
/* EventTime is in seconds since boot. Use the constants to make life easy. */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
typedef double EventTime; |
|
typedef EventTime EventTimeout; |
|
typedef EventTime EventTimerInterval; |
|
#define kEventDurationSecond ((EventTime)1.0) |
|
#define kEventDurationMillisecond ((EventTime)(kEventDurationSecond/1000)) |
|
#define kEventDurationMicrosecond ((EventTime)(kEventDurationSecond/1000000)) |
|
#define kEventDurationNanosecond ((EventTime)(kEventDurationSecond/1000000000)) |
|
#define kEventDurationMinute ((EventTime)(kEventDurationSecond*60)) |
|
#define kEventDurationHour ((EventTime)(kEventDurationMinute*60)) |
|
#define kEventDurationDay ((EventTime)(kEventDurationHour*24)) |
|
#define kEventDurationNoWait ((EventTime)0.0) |
|
#define kEventDurationForever ((EventTime)(-1.0)) |
|
|
|
/* Helpful doodads to convert to and from ticks and event times*/ |
|
#ifdef __cplusplus |
|
inline EventTime TicksToEventTime( UInt32 t ) { return ( (t) / 60.0 ); } |
|
inline UInt32 EventTimeToTicks( EventTime t ) { return (UInt32)( ((t) * 60) + 0.5 ); } |
|
#else |
|
#define TicksToEventTime( t ) ((EventTime)( (t) / 60.0 )) |
|
#define EventTimeToTicks( t ) ((UInt32)( ((t) * 60) + 0.5 )) |
|
#endif /* defined(__cplusplus) */ |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* EventTypeSpec structure */ |
|
/* */ |
|
/* This structure is used in many routines to pass a list of event types to a function. */ |
|
/* You typically would declare a const array of these types to pass in. */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
/* |
|
* EventTypeSpec |
|
* |
|
* Discussion: |
|
* This structure is used to specify an event. Typically, a static |
|
* array of EventTypeSpecs are passed into functions such as |
|
* InstallEventHandler, as well as routines such as |
|
* FlushEventsMatchingListFromQueue. |
|
*/ |
|
struct EventTypeSpec { |
|
UInt32 eventClass; |
|
UInt32 eventKind; |
|
}; |
|
typedef struct EventTypeSpec EventTypeSpec; |
|
/*A helpful macro for dealing with EventTypeSpecs */ |
|
#define GetEventTypeCount( t ) (sizeof( (t) ) / sizeof( EventTypeSpec )) |
|
|
|
typedef OSType EventParamName; |
|
typedef OSType EventParamType; |
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o EventLoop */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
/* |
|
* EventLoopRef |
|
* |
|
* Discussion: |
|
* An EventLoopRef represents an 'event loop', which is the |
|
* conceptual entity that you 'run' to fetch events from hardware |
|
* and other sources and also fires timers that might be installed |
|
* with InstallEventLoopTimer. The term 'run' is a bit of a |
|
* misnomer, as the event loop's goal is to stay as blocked as |
|
* possible to minimize CPU usage for the current application. The |
|
* event loop is run implicitly thru APIs like ReceiveNextEvent, |
|
* RunApplicationEventLoop, or even WaitNextEvent. It can also be |
|
* run explicitly thru a call to RunCurrentEventLoop. Each |
|
* preemptive thread can have an event loop. Cooperative threads |
|
* share the main thread's event loop. |
|
*/ |
|
typedef struct OpaqueEventLoopRef* EventLoopRef; |
|
/* |
|
* GetCurrentEventLoop() |
|
* |
|
* Discussion: |
|
* Returns the current event loop for the current thread. If the |
|
* current thread is a cooperative thread, the main event loop is |
|
* returned. |
|
* |
|
* Result: |
|
* An event loop reference. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( EventLoopRef ) |
|
GetCurrentEventLoop(void); |
|
|
|
|
|
/* |
|
* GetMainEventLoop() |
|
* |
|
* Discussion: |
|
* Returns the event loop object for the main application thread. |
|
* |
|
* Result: |
|
* An event loop reference. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( EventLoopRef ) |
|
GetMainEventLoop(void); |
|
|
|
|
|
|
|
/* |
|
* RunCurrentEventLoop() |
|
* |
|
* Discussion: |
|
* This routine 'runs' the event loop, returning only if aborted or |
|
* the timeout specified is reached. The event loop is mostly |
|
* blocked while in this function, occasionally waking up to fire |
|
* timers or pick up events. The typical use of this function is to |
|
* cause the current thread to wait for some operation to complete, |
|
* most likely on another thread of execution. |
|
* |
|
* Parameters: |
|
* |
|
* inTimeout: |
|
* The time to wait until returning (can be kEventDurationForever). |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
RunCurrentEventLoop(EventTimeout inTimeout); |
|
|
|
|
|
/* |
|
* QuitEventLoop() |
|
* |
|
* Discussion: |
|
* Causes a specific event loop to terminate. Usage of this is |
|
* similar to WakeUpProcess, in that it causes the eventloop |
|
* specified to return immediately (as opposed to timing out). |
|
* Typically this call is used in conjunction with |
|
* RunCurrentEventLoop. |
|
* |
|
* Parameters: |
|
* |
|
* inEventLoop: |
|
* The event loop to terminate. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
QuitEventLoop(EventLoopRef inEventLoop); |
|
|
|
|
|
/* |
|
* GetCFRunLoopFromEventLoop() |
|
* |
|
* Discussion: |
|
* Returns the corresponding CFRunLoopRef for the given EventLoop. |
|
* This is not necessarily a one-to-one mapping, hence the need for |
|
* this function. In Carbon, all cooperative threads use the same |
|
* run loop under the covers, so using CFRunLoopGetCurrent might |
|
* yield the wrong result. In general, you would only need to use |
|
* this function if you wished to add your own sources to the run |
|
* loop. If you don't know what I'm talking about, then you probably |
|
* don't need to use this. |
|
* |
|
* Parameters: |
|
* |
|
* inEventLoop: |
|
* The event loop to get the CFRunLoop for. |
|
* |
|
* Result: |
|
* The CFRunLoopRef for inEventLoop. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.1 and later |
|
* Mac OS X: in version 10.1 and later |
|
*/ |
|
EXTERN_API_C( CFTypeRef ) |
|
GetCFRunLoopFromEventLoop(EventLoopRef inEventLoop); |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Low-level event fetching */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
/* |
|
* ReceiveNextEvent() |
|
* |
|
* Discussion: |
|
* This routine tries to fetch the next event of a specified type. |
|
* If no events in the event queue match, this routine will run the |
|
* current event loop until an event that matches arrives, or the |
|
* timeout expires. Except for timers firing, your application is |
|
* blocked waiting for events to arrive when inside this function. |
|
* |
|
* Parameters: |
|
* |
|
* inNumTypes: |
|
* The number of event types we are waiting for (0 if any event |
|
* should cause this routine to return). |
|
* |
|
* inList: |
|
* The list of event types we are waiting for (pass NULL if any |
|
* event should cause this routine to return). |
|
* |
|
* inTimeout: |
|
* The time to wait (passing kEventDurationForever is preferred). |
|
* |
|
* inPullEvent: |
|
* Pass true for this parameter to actually remove the next |
|
* matching event from the queue. |
|
* |
|
* outEvent: |
|
* The next event that matches the list passed in. If inPullEvent |
|
* is true, the event is owned by you, and you will need to |
|
* release it when done. |
|
* |
|
* Result: |
|
* A result indicating whether an event was received, the timeout |
|
* expired, or the current event loop was quit. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
ReceiveNextEvent( |
|
UInt32 inNumTypes, |
|
const EventTypeSpec * inList, |
|
EventTimeout inTimeout, |
|
Boolean inPullEvent, |
|
EventRef * outEvent); |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Core event lifetime APIs */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
typedef UInt32 EventAttributes; |
|
enum { |
|
kEventAttributeNone = 0, |
|
kEventAttributeUserEvent = (1 << 0) |
|
}; |
|
|
|
/* |
|
* [Mac]CreateEvent() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
#if TARGET_OS_MAC |
|
#define MacCreateEvent CreateEvent |
|
#endif |
|
EXTERN_API( OSStatus ) |
|
MacCreateEvent( |
|
CFAllocatorRef inAllocator, /* can be NULL */ |
|
UInt32 inClassID, |
|
UInt32 kind, |
|
EventTime when, |
|
EventAttributes flags, |
|
EventRef * outEvent); |
|
|
|
|
|
/* |
|
* CopyEvent() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( EventRef ) |
|
CopyEvent(EventRef inOther); |
|
|
|
|
|
/* |
|
* RetainEvent() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( EventRef ) |
|
RetainEvent(EventRef inEvent); |
|
|
|
|
|
/* |
|
* GetEventRetainCount() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( UInt32 ) |
|
GetEventRetainCount(EventRef inEvent); |
|
|
|
|
|
/* |
|
* ReleaseEvent() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( void ) |
|
ReleaseEvent(EventRef inEvent); |
|
|
|
|
|
/* |
|
* SetEventParameter() |
|
* |
|
* Discussion: |
|
* Sets a piece of data for the given event. |
|
* |
|
* Parameters: |
|
* |
|
* inEvent: |
|
* The event to set the data for. |
|
* |
|
* inName: |
|
* The symbolic name of the parameter. |
|
* |
|
* inType: |
|
* The symbolic type of the parameter. |
|
* |
|
* inSize: |
|
* The size of the parameter data. |
|
* |
|
* inDataPtr: |
|
* The pointer to the parameter data. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
SetEventParameter( |
|
EventRef inEvent, |
|
EventParamName inName, |
|
EventParamType inType, |
|
UInt32 inSize, |
|
const void * inDataPtr); |
|
|
|
|
|
|
|
/* |
|
* GetEventParameter() |
|
* |
|
* Discussion: |
|
* Gets a piece of data from the given event, if it exists. |
|
* |
|
* Parameters: |
|
* |
|
* inEvent: |
|
* The event to get the parameter from. |
|
* |
|
* inName: |
|
* The symbolic name of the parameter. |
|
* |
|
* inDesiredType: |
|
* The desired type of the parameter. At present we do not support |
|
* coercion, so this parameter must be the actual type of data |
|
* stored in the event, or an error will be returned. |
|
* |
|
* outActualType: |
|
* The actual type of the parameter, can be NULL if you are not |
|
* interested in receiving this information. |
|
* |
|
* inBufferSize: |
|
* The size of the output buffer specified by ioBuffer. |
|
* |
|
* outActualSize: |
|
* The actual size of the data, or NULL if you don't want this |
|
* information. |
|
* |
|
* outData: |
|
* The pointer to the buffer which will receive the parameter data. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
GetEventParameter( |
|
EventRef inEvent, |
|
EventParamName inName, |
|
EventParamType inDesiredType, |
|
EventParamType * outActualType, /* can be NULL */ |
|
UInt32 inBufferSize, |
|
UInt32 * outActualSize, /* can be NULL */ |
|
void * outData); |
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Getters for 'base-class' event info */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
/* |
|
* GetEventClass() |
|
* |
|
* Discussion: |
|
* Returns the class of the given event, such as mouse, keyboard, |
|
* etc. |
|
* |
|
* Parameters: |
|
* |
|
* inEvent: |
|
* The event in question. |
|
* |
|
* Result: |
|
* The class ID of the event. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( UInt32 ) |
|
GetEventClass(EventRef inEvent); |
|
|
|
|
|
/* |
|
* GetEventKind() |
|
* |
|
* Discussion: |
|
* Returns the kind of the given event (mousedown, etc.). Event |
|
* kinds overlap between event classes, e.g. kEventMouseDown and |
|
* kEventAppActivated have the same value (1). The combination of |
|
* class and kind is what determines an event signature. |
|
* |
|
* Parameters: |
|
* |
|
* inEvent: |
|
* The event in question. |
|
* |
|
* Result: |
|
* The kind of the event. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( UInt32 ) |
|
GetEventKind(EventRef inEvent); |
|
|
|
|
|
/* |
|
* GetEventTime() |
|
* |
|
* Discussion: |
|
* Returns the time the event specified occurred, specified in |
|
* EventTime, which is a floating point number representing seconds |
|
* since the last system startup. |
|
* |
|
* Parameters: |
|
* |
|
* inEvent: |
|
* The event in question. |
|
* |
|
* Result: |
|
* The time the event occurred. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( EventTime ) |
|
GetEventTime(EventRef inEvent); |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Setters for 'base-class' event info */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
/* |
|
* SetEventTime() |
|
* |
|
* Discussion: |
|
* This routine allows you to set the time of a given event, if you |
|
* so desire. In general, you would never use this routine, except |
|
* for those special cases where you reuse an event from time to |
|
* time instead of creating a new event each time. |
|
* |
|
* Parameters: |
|
* |
|
* inEvent: |
|
* The event in question. |
|
* |
|
* inTime: |
|
* The new time. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
SetEventTime( |
|
EventRef inEvent, |
|
EventTime inTime); |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Event Queue routines (posting, finding, flushing) */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
typedef struct OpaqueEventQueueRef* EventQueueRef; |
|
/* |
|
* GetCurrentEventQueue() |
|
* |
|
* Discussion: |
|
* Returns the current event queue for the current thread. If the |
|
* current thread is a cooperative thread, the main event queue is |
|
* returned. |
|
* |
|
* Result: |
|
* An event queue reference. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( EventQueueRef ) |
|
GetCurrentEventQueue(void); |
|
|
|
|
|
/* |
|
* GetMainEventQueue() |
|
* |
|
* Discussion: |
|
* Returns the event queue object for the main application thread. |
|
* |
|
* Result: |
|
* An event queue reference. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( EventQueueRef ) |
|
GetMainEventQueue(void); |
|
|
|
|
|
|
|
/* |
|
* EventComparatorProcPtr |
|
* |
|
* Discussion: |
|
* Type of a callback function used by queue searches. |
|
* |
|
* Parameters: |
|
* |
|
* inEvent: |
|
* The event to compare. |
|
* |
|
* inCompareData: |
|
* The data used to compare the event. |
|
* |
|
* Result: |
|
* A boolean value indicating whether the event matches (true) or |
|
* not (false). |
|
*/ |
|
typedef CALLBACK_API( Boolean , EventComparatorProcPtr )(EventRef inEvent, void *inCompareData); |
|
typedef STACK_UPP_TYPE(EventComparatorProcPtr) EventComparatorUPP; |
|
/* |
|
* NewEventComparatorUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( EventComparatorUPP ) |
|
NewEventComparatorUPP(EventComparatorProcPtr userRoutine); |
|
#if !OPAQUE_UPP_TYPES |
|
enum { uppEventComparatorProcInfo = 0x000003D0 }; /* pascal 1_byte Func(4_bytes, 4_bytes) */ |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(EventComparatorUPP) NewEventComparatorUPP(EventComparatorProcPtr userRoutine) { return (EventComparatorUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppEventComparatorProcInfo, GetCurrentArchitecture()); } |
|
#else |
|
#define NewEventComparatorUPP(userRoutine) (EventComparatorUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppEventComparatorProcInfo, GetCurrentArchitecture()) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* DisposeEventComparatorUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( void ) |
|
DisposeEventComparatorUPP(EventComparatorUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) DisposeEventComparatorUPP(EventComparatorUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } |
|
#else |
|
#define DisposeEventComparatorUPP(userUPP) DisposeRoutineDescriptor(userUPP) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* InvokeEventComparatorUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
InvokeEventComparatorUPP( |
|
EventRef inEvent, |
|
void * inCompareData, |
|
EventComparatorUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(Boolean) InvokeEventComparatorUPP(EventRef inEvent, void * inCompareData, EventComparatorUPP userUPP) { return (Boolean)CALL_TWO_PARAMETER_UPP(userUPP, uppEventComparatorProcInfo, inEvent, inCompareData); } |
|
#else |
|
#define InvokeEventComparatorUPP(inEvent, inCompareData, userUPP) (Boolean)CALL_TWO_PARAMETER_UPP((userUPP), uppEventComparatorProcInfo, (inEvent), (inCompareData)) |
|
#endif |
|
#endif |
|
|
|
#if CALL_NOT_IN_CARBON || OLDROUTINENAMES |
|
/* support for pre-Carbon UPP routines: New...Proc and Call...Proc */ |
|
#define NewEventComparatorProc(userRoutine) NewEventComparatorUPP(userRoutine) |
|
#define CallEventComparatorProc(userRoutine, inEvent, inCompareData) InvokeEventComparatorUPP(inEvent, inCompareData, userRoutine) |
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* |
|
* PostEventToQueue() |
|
* |
|
* Discussion: |
|
* Posts an event to the queue specified. This automatically wakes |
|
* up the event loop of the thread the queue belongs to. After |
|
* posting the event, you should release the event. The event queue |
|
* retains it. |
|
* |
|
* Parameters: |
|
* |
|
* inQueue: |
|
* The event queue to post the event onto. |
|
* |
|
* inEvent: |
|
* The event to post. |
|
* |
|
* inPriority: |
|
* The priority of the event. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
PostEventToQueue( |
|
EventQueueRef inQueue, |
|
EventRef inEvent, |
|
EventPriority inPriority); |
|
|
|
|
|
/* |
|
* FlushEventsMatchingListFromQueue() |
|
* |
|
* Discussion: |
|
* Flushes events matching a specified list of classes and kinds |
|
* from an event queue. |
|
* |
|
* Parameters: |
|
* |
|
* inQueue: |
|
* The event queue to flush events from. |
|
* |
|
* inNumTypes: |
|
* The number of event kinds to flush. |
|
* |
|
* inList: |
|
* The list of event classes and kinds to flush from the queue. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
FlushEventsMatchingListFromQueue( |
|
EventQueueRef inQueue, |
|
UInt32 inNumTypes, |
|
const EventTypeSpec * inList); |
|
|
|
|
|
/* |
|
* FlushSpecificEventsFromQueue() |
|
* |
|
* Discussion: |
|
* Flushes events that match a comparator function. |
|
* |
|
* Parameters: |
|
* |
|
* inQueue: |
|
* The event queue to flush events from. |
|
* |
|
* inComparator: |
|
* The comparison function to invoke for each event in the queue. |
|
* |
|
* inCompareData: |
|
* The data you wish to pass to your comparison function. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
FlushSpecificEventsFromQueue( |
|
EventQueueRef inQueue, |
|
EventComparatorUPP inComparator, |
|
void * inCompareData); |
|
|
|
|
|
/* |
|
* FlushEventQueue() |
|
* |
|
* Discussion: |
|
* Flushes all events from an event queue. |
|
* |
|
* Parameters: |
|
* |
|
* inQueue: |
|
* The event queue to flush. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
FlushEventQueue(EventQueueRef inQueue); |
|
|
|
|
|
/* |
|
* FindSpecificEventInQueue() |
|
* |
|
* Discussion: |
|
* Returns the first event that matches a comparator function, or |
|
* NULL if no events match. |
|
* |
|
* Parameters: |
|
* |
|
* inQueue: |
|
* The event queue to search. |
|
* |
|
* inComparator: |
|
* The comparison function to invoke for each event in the queue. |
|
* |
|
* inCompareData: |
|
* The data you wish to pass to your comparison function. |
|
* |
|
* Result: |
|
* An event reference. The event is still in the queue when |
|
* FindSpecificEventInQueue returns; you can remove it from the |
|
* queue with RemoveEventFromQueue. The returned event does not need |
|
* to be released by the caller. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( EventRef ) |
|
FindSpecificEventInQueue( |
|
EventQueueRef inQueue, |
|
EventComparatorUPP inComparator, |
|
void * inCompareData); |
|
|
|
|
|
/* |
|
* GetNumEventsInQueue() |
|
* |
|
* Discussion: |
|
* Returns the number of events in an event queue. |
|
* |
|
* Parameters: |
|
* |
|
* inQueue: |
|
* The event queue to query. |
|
* |
|
* Result: |
|
* The number of items in the queue. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( UInt32 ) |
|
GetNumEventsInQueue(EventQueueRef inQueue); |
|
|
|
|
|
/* |
|
* RemoveEventFromQueue() |
|
* |
|
* Discussion: |
|
* Removes the given event from the queue which it was posted. When |
|
* you call this function, the event ownership is transferred to |
|
* you, the caller, at no charge. You must release the event when |
|
* you are through with it. |
|
* |
|
* Parameters: |
|
* |
|
* inQueue: |
|
* The queue to remove the event from. |
|
* |
|
* inEvent: |
|
* The event to remove. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
RemoveEventFromQueue( |
|
EventQueueRef inQueue, |
|
EventRef inEvent); |
|
|
|
|
|
/* |
|
* IsEventInQueue() |
|
* |
|
* Discussion: |
|
* Returns true if the specified event is posted to a queue. |
|
* |
|
* Parameters: |
|
* |
|
* inQueue: |
|
* The queue to check. |
|
* |
|
* inEvent: |
|
* The event in question. |
|
* |
|
* Result: |
|
* A boolean value. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( Boolean ) |
|
IsEventInQueue( |
|
EventQueueRef inQueue, |
|
EventRef inEvent); |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* Queue-synchronized event state */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
/* |
|
* GetCurrentEvent() |
|
* |
|
* Summary: |
|
* Returns the user input event currently being handled. |
|
* |
|
* Discussion: |
|
* When an event with kEventAttributeUserEvent is dispatched by the |
|
* event dispatcher target, it is recorded internally by the Event |
|
* Manager. At any time during the handling of that event, |
|
* GetCurrentEvent may be used to retrieve the original EventRef. |
|
* |
|
* Result: |
|
* The user input (mouse or keyboard) event currently being handled. |
|
* May be NULL if no event is currently being handled, or if the |
|
* current event was not a user input event. The returned event is |
|
* not retained, and its lifetime should be considered to be no |
|
* longer than the current function; if you need to keep the event |
|
* alive past that time, you should retain it. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later |
|
* Mac OS X: in version 10.2 and later |
|
*/ |
|
EXTERN_API_C( EventRef ) |
|
GetCurrentEvent(void); |
|
|
|
|
|
/* |
|
* GetCurrentEventButtonState() |
|
* |
|
* Summary: |
|
* Returns the current queue-synchronized mouse button state on the |
|
* primary input device. |
|
* |
|
* Discussion: |
|
* At any point in the handling of user input, there are two |
|
* different mouse button states: the queue-synchronized state and |
|
* the hardware state. The hardware state reflects the actual |
|
* current state of the mouse attached to the user's machine. The |
|
* queue-synchronized state reflects the state according to the |
|
* events that have been processed at that point by the application. |
|
* These two states may be different if there are unprocessed events |
|
* in the event queue, or if events are being artificially |
|
* introduced into the event queue from an outside source. |
|
* GetCurrentEventButtonState returns the queue-synchronized button |
|
* state. It is generally better to use this API than to use the |
|
* Button function or the GetCurrentButtonState function (which |
|
* return the hardware state). This gives a more consistent user |
|
* experience when the user input queue is being remoted controlled |
|
* or manipulated via non-hardware event sources such as speech or |
|
* AppleEvents; using GetCurrentEventButtonState is also much faster |
|
* than using Button or GetCurrentButtonState. |
|
* |
|
* Note that GetCurrentEventButtonState only returns a valid button |
|
* state if your application is the active application. If your |
|
* application is not active, then user input events are not flowing |
|
* through the event dispatcher and the queue-synchronized state is |
|
* not updated. |
|
* |
|
* Result: |
|
* The queue-synchronized state of the mouse buttons. Bit zero |
|
* indicates the state of the primary button, bit one the state of |
|
* the secondary button, and so on. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later |
|
* Mac OS X: in version 10.2 and later |
|
*/ |
|
EXTERN_API_C( UInt32 ) |
|
GetCurrentEventButtonState(void); |
|
|
|
|
|
/* |
|
* GetCurrentEventKeyModifiers() |
|
* |
|
* Summary: |
|
* Returns the current queue-synchronized keyboard modifier state. |
|
* |
|
* Discussion: |
|
* At any point in the handling of user input, there are two |
|
* different keyboard modifier states: the queue-synchronized state |
|
* and the hardware state. The hardware state reflects the actual |
|
* current state of the keyboard attached to the user's machine. The |
|
* queue-synchronized state reflects the state according to the |
|
* events that have been processed at that point by the application. |
|
* These two states may be different if there are unprocessed events |
|
* in the event queue, or if events are being artificially |
|
* introduced into the event queue from an outside source. |
|
* GetCurrentEventKeyModifiers returns the queue-synchronized |
|
* modifier state. It is generally better to use this API than to |
|
* use the GetCurrentKeyModifiers API (which returns the hardware |
|
* state). This gives a more consistent user experience when the |
|
* user input queue is being remoted controlled or manipulated via |
|
* non-hardware event sources such as speech or AppleEvents; using |
|
* GetCurrentEventKeyModifiers is also much faster than using |
|
* EventAvail(0, &eventRecord) or GetCurrentKeyModifiers. |
|
* |
|
* Note that GetCurrentEventKeyModifiers only returns a valid |
|
* modifier state if your application is the active application. If |
|
* your application is not active, then user input events are not |
|
* flowing through the event dispatcher and the queue-synchronized |
|
* state is not updated. |
|
* |
|
* Result: |
|
* The queue-synchronized state of the keyboard modifiers. The |
|
* format of the return value is the same as the modifiers field of |
|
* an EventRecord (but only includes keyboard modifiers and not the |
|
* other modifier flags included in an EventRecord). |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later |
|
* Mac OS X: in version 10.2 and later |
|
*/ |
|
EXTERN_API_C( UInt32 ) |
|
GetCurrentEventKeyModifiers(void); |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* Multiple-button support */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
/* |
|
* GetCurrentButtonState() |
|
* |
|
* Summary: |
|
* Returns the current hardware mouse button state on the primary |
|
* input device. |
|
* |
|
* Discussion: |
|
* In most cases, you should not use GetCurrentButtonState, but |
|
* should use the GetCurrentEventButtonState function instead. |
|
* GetCurrentEventButtonState is much faster than |
|
* GetCurrentButtonState because it returns the locally cached |
|
* button state; GetCurrentButtonState must get the mouse button |
|
* state from the window server, which is slower. Using |
|
* GetCurrentButtonState also can prevent your application from |
|
* being operated by remote posting of events, since the hardware |
|
* input device is not actually changing state in that case. Most |
|
* commonly, you might need to use GetCurrentButtonState when your |
|
* application is not the active application (as determined by the |
|
* Process Manager function GetFrontProcess). In that case, the |
|
* cached button state returned by GetCurrentEventButtonState is not |
|
* valid because mouse button events are not flowing to your |
|
* application, and you must use GetCurrentButtonState to determine |
|
* the current hardware state. |
|
* |
|
* Result: |
|
* The state of the mouse buttons on the mouse hardware. Bit zero |
|
* indicates the state of the primary button, bit one the state of |
|
* the secondary button, and so on. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later |
|
* Mac OS X: in version 10.2 and later |
|
*/ |
|
EXTERN_API_C( UInt32 ) |
|
GetCurrentButtonState(void); |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Helpful utilities */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
/* |
|
* GetCurrentEventTime() |
|
* |
|
* Discussion: |
|
* Returns the current time since last system startup in seconds. |
|
* |
|
* Result: |
|
* EventTime. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( EventTime ) |
|
GetCurrentEventTime(void); |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Timers */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
/* |
|
* EventLoopTimerRef |
|
* |
|
* Discussion: |
|
* An EventLoopTimerRef represents what we term a 'timer'. A timer |
|
* is a function that is called either once or at regular intervals. |
|
* It executes at task level and should not be confused with Time |
|
* Manager Tasks or any other interrupt-level callback. This means |
|
* you can call Toolbox routines, allocate memory and draw. When a |
|
* timer 'fires', it calls a callback that you specify when the |
|
* timer is installed. Timers in general have two uses - as a |
|
* timeout mechanism and as a periodic task. An everyday example of |
|
* using a timer for a timeout might be a light that goes out if no |
|
* motion is detected in a room for 5 minutes. For this, you might |
|
* install a timer which will fire in 5 minutes. If motion is |
|
* detected, you would reset the timer fire time and let the clock |
|
* start over. If no motion is detected for the full 5 minutes, the |
|
* timer will fire and you could power off the light. A periodic |
|
* timer is one that fires at regular intervals (say every second or |
|
* so). You might use such a timer to blink the insertion point in |
|
* your editor, etc. One advantage of timers is that you can install |
|
* the timer right from the code that wants the time. For example, |
|
* the standard Toolbox Edit Text control can install a timer to |
|
* blink the cursor when it's active, meaning that IdleControls is a |
|
* no-op for that control and doesn't need to be called. When the |
|
* control is inactive, it removes its timer and doesn't waste CPU |
|
* time in that state. NOTE: Currently, if you do decide to draw |
|
* when your timer is called, be sure to save and restore the |
|
* current port so that calling your timer doesn't inadvertently |
|
* change the port out from under someone. |
|
*/ |
|
typedef struct __EventLoopTimer* EventLoopTimerRef; |
|
|
|
/* |
|
* EventLoopTimerProcPtr |
|
* |
|
* Discussion: |
|
* Called when a timer fires. |
|
* |
|
* Parameters: |
|
* |
|
* inTimer: |
|
* The timer that fired. |
|
* |
|
* inUserData: |
|
* The data passed into InstallEventLoopTimer. |
|
*/ |
|
typedef CALLBACK_API( void , EventLoopTimerProcPtr )(EventLoopTimerRef inTimer, void *inUserData); |
|
|
|
/* |
|
* Discussion: |
|
* Event Loop Idle Timer Messages |
|
*/ |
|
enum { |
|
|
|
/* |
|
* The user has gone idle (not touched an input device) for the |
|
* duration specified in your idle timer. This is the first message |
|
* you will receive. Start your engines! |
|
*/ |
|
kEventLoopIdleTimerStarted = 1, |
|
|
|
/* |
|
* If you specified an interval on your idle timer, your idle timer |
|
* proc will be called with this message, letting you know it is |
|
* merely firing at the interval specified. If you did not specify an |
|
* interval, this message is not sent. |
|
*/ |
|
kEventLoopIdleTimerIdling = 2, |
|
|
|
/* |
|
* The user is back! Stop everything! This is your cue to stop any |
|
* processing if you need to. |
|
*/ |
|
kEventLoopIdleTimerStopped = 3 |
|
}; |
|
|
|
typedef UInt16 EventLoopIdleTimerMessage; |
|
|
|
/* |
|
* EventLoopIdleTimerProcPtr |
|
* |
|
* Discussion: |
|
* Called when an idle timer fires. |
|
* |
|
* Parameters: |
|
* |
|
* inTimer: |
|
* The timer that fired. |
|
* |
|
* inState: |
|
* The current state of the timer. |
|
* |
|
* inUserData: |
|
* The data passed into InstallEventLoopTimer. |
|
*/ |
|
typedef CALLBACK_API( void , EventLoopIdleTimerProcPtr )(EventLoopTimerRef inTimer, EventLoopIdleTimerMessage inState, void *inUserData); |
|
typedef STACK_UPP_TYPE(EventLoopTimerProcPtr) EventLoopTimerUPP; |
|
typedef STACK_UPP_TYPE(EventLoopIdleTimerProcPtr) EventLoopIdleTimerUPP; |
|
/* |
|
* NewEventLoopTimerUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( EventLoopTimerUPP ) |
|
NewEventLoopTimerUPP(EventLoopTimerProcPtr userRoutine); |
|
#if !OPAQUE_UPP_TYPES |
|
enum { uppEventLoopTimerProcInfo = 0x000003C0 }; /* pascal no_return_value Func(4_bytes, 4_bytes) */ |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(EventLoopTimerUPP) NewEventLoopTimerUPP(EventLoopTimerProcPtr userRoutine) { return (EventLoopTimerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppEventLoopTimerProcInfo, GetCurrentArchitecture()); } |
|
#else |
|
#define NewEventLoopTimerUPP(userRoutine) (EventLoopTimerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppEventLoopTimerProcInfo, GetCurrentArchitecture()) |
|
#endif |
|
#endif |
|
|
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* NewEventLoopIdleTimerUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: not available |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( EventLoopIdleTimerUPP ) |
|
NewEventLoopIdleTimerUPP(EventLoopIdleTimerProcPtr userRoutine); |
|
#if !OPAQUE_UPP_TYPES |
|
enum { uppEventLoopIdleTimerProcInfo = 0x00000EC0 }; /* pascal no_return_value Func(4_bytes, 2_bytes, 4_bytes) */ |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(EventLoopIdleTimerUPP) NewEventLoopIdleTimerUPP(EventLoopIdleTimerProcPtr userRoutine) { return (EventLoopIdleTimerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppEventLoopIdleTimerProcInfo, GetCurrentArchitecture()); } |
|
#else |
|
#define NewEventLoopIdleTimerUPP(userRoutine) (EventLoopIdleTimerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppEventLoopIdleTimerProcInfo, GetCurrentArchitecture()) |
|
#endif |
|
#endif |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* |
|
* DisposeEventLoopTimerUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( void ) |
|
DisposeEventLoopTimerUPP(EventLoopTimerUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) DisposeEventLoopTimerUPP(EventLoopTimerUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } |
|
#else |
|
#define DisposeEventLoopTimerUPP(userUPP) DisposeRoutineDescriptor(userUPP) |
|
#endif |
|
#endif |
|
|
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* DisposeEventLoopIdleTimerUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: not available |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( void ) |
|
DisposeEventLoopIdleTimerUPP(EventLoopIdleTimerUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) DisposeEventLoopIdleTimerUPP(EventLoopIdleTimerUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } |
|
#else |
|
#define DisposeEventLoopIdleTimerUPP(userUPP) DisposeRoutineDescriptor(userUPP) |
|
#endif |
|
#endif |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* |
|
* InvokeEventLoopTimerUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( void ) |
|
InvokeEventLoopTimerUPP( |
|
EventLoopTimerRef inTimer, |
|
void * inUserData, |
|
EventLoopTimerUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) InvokeEventLoopTimerUPP(EventLoopTimerRef inTimer, void * inUserData, EventLoopTimerUPP userUPP) { CALL_TWO_PARAMETER_UPP(userUPP, uppEventLoopTimerProcInfo, inTimer, inUserData); } |
|
#else |
|
#define InvokeEventLoopTimerUPP(inTimer, inUserData, userUPP) CALL_TWO_PARAMETER_UPP((userUPP), uppEventLoopTimerProcInfo, (inTimer), (inUserData)) |
|
#endif |
|
#endif |
|
|
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* InvokeEventLoopIdleTimerUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: not available |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( void ) |
|
InvokeEventLoopIdleTimerUPP( |
|
EventLoopTimerRef inTimer, |
|
EventLoopIdleTimerMessage inState, |
|
void * inUserData, |
|
EventLoopIdleTimerUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) InvokeEventLoopIdleTimerUPP(EventLoopTimerRef inTimer, EventLoopIdleTimerMessage inState, void * inUserData, EventLoopIdleTimerUPP userUPP) { CALL_THREE_PARAMETER_UPP(userUPP, uppEventLoopIdleTimerProcInfo, inTimer, inState, inUserData); } |
|
#else |
|
#define InvokeEventLoopIdleTimerUPP(inTimer, inState, inUserData, userUPP) CALL_THREE_PARAMETER_UPP((userUPP), uppEventLoopIdleTimerProcInfo, (inTimer), (inState), (inUserData)) |
|
#endif |
|
#endif |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#if CALL_NOT_IN_CARBON || OLDROUTINENAMES |
|
/* support for pre-Carbon UPP routines: New...Proc and Call...Proc */ |
|
#define NewEventLoopTimerProc(userRoutine) NewEventLoopTimerUPP(userRoutine) |
|
#define NewEventLoopIdleTimerProc(userRoutine) NewEventLoopIdleTimerUPP(userRoutine) |
|
#define CallEventLoopTimerProc(userRoutine, inTimer, inUserData) InvokeEventLoopTimerUPP(inTimer, inUserData, userRoutine) |
|
#define CallEventLoopIdleTimerProc(userRoutine, inTimer, inState, inUserData) InvokeEventLoopIdleTimerUPP(inTimer, inState, inUserData, userRoutine) |
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* |
|
* InstallEventLoopTimer() |
|
* |
|
* Discussion: |
|
* Installs a timer onto the event loop specified. The timer can |
|
* either fire once or repeatedly at a specified interval depending |
|
* on the parameters passed to this function. |
|
* |
|
* Parameters: |
|
* |
|
* inEventLoop: |
|
* The event loop to add the timer. |
|
* |
|
* inFireDelay: |
|
* The delay before first firing this timer (can be 0, to request |
|
* that the timer be fired as soon as control returns to your |
|
* event loop). In Mac OS X and CarbonLib 1.5 and later, you may |
|
* pass kEventDurationForever to stop the timer from firing at all |
|
* until SetEventLoopTimerNextFireTime is used to start it; in |
|
* earlier CarbonLibs, to achieve the same effect, just pass zero |
|
* and then immediately call SetEventLoopTimerNextFireTime( timer, |
|
* kEventDurationForever ) before returning control to your event |
|
* loop. |
|
* |
|
* inInterval: |
|
* The timer interval (pass 0 for a one-shot timer, which executes |
|
* once but does not repeat). In Mac OS X and CarbonLib 1.5 and |
|
* later, you may also pass kEventDurationForever to create a |
|
* one-shot timer. |
|
* |
|
* inTimerProc: |
|
* The routine to call when the timer fires. |
|
* |
|
* inTimerData: |
|
* Data to pass to the timer proc when called. |
|
* |
|
* outTimer: |
|
* A reference to the newly installed timer. |
|
* |
|
* Result: |
|
* An operating system status code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
InstallEventLoopTimer( |
|
EventLoopRef inEventLoop, |
|
EventTimerInterval inFireDelay, |
|
EventTimerInterval inInterval, |
|
EventLoopTimerUPP inTimerProc, |
|
void * inTimerData, |
|
EventLoopTimerRef * outTimer); |
|
|
|
|
|
/* |
|
* InstallEventLoopIdleTimer() |
|
* |
|
* Discussion: |
|
* Installs a timer onto the event loop specified. Idle timers are |
|
* only called when there is no user activity occuring in the |
|
* application. This means that the user is not actively |
|
* clicking/typing, and is also not in the middle of tracking a |
|
* control, menu, or window. TrackMouseLocation actually disables |
|
* all idle timers automatically for you. |
|
* |
|
* Parameters: |
|
* |
|
* inEventLoop: |
|
* The event loop to add the timer. |
|
* |
|
* inDelay: |
|
* The delay before firing this timer after a user input event has |
|
* come in. For example, if you want to start your timer 2 seconds |
|
* after the user stops typing, etc. you would pass 2.0 into this |
|
* parameter. Each time the user types a key (or whatever), this |
|
* timer is reset. If we are considered to be idle when an idle |
|
* timer is installed, the first time it fires will be inDelay |
|
* seconds from the time it is installed. So if you installed it |
|
* in the middle of control tracking, say, it wouldn't fire until |
|
* the user stopped tracking. But if you installed it at app |
|
* startup and the user hasn't typed/clicked, it would fire in |
|
* inDelay seconds. |
|
* |
|
* inInterval: |
|
* The timer interval (pass 0 for a one-shot timer, which executes |
|
* once but does not repeat). You may also pass |
|
* kEventDurationForever to create a one-shot timer. |
|
* |
|
* inTimerProc: |
|
* The routine to call when the timer fires. |
|
* |
|
* inTimerData: |
|
* Data to pass to the timer proc when called. |
|
* |
|
* outTimer: |
|
* A reference to the newly installed timer. |
|
* |
|
* Result: |
|
* An operating system status code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
InstallEventLoopIdleTimer( |
|
EventLoopRef inEventLoop, |
|
EventTimerInterval inDelay, |
|
EventTimerInterval inInterval, |
|
EventLoopIdleTimerUPP inTimerProc, |
|
void * inTimerData, |
|
EventLoopTimerRef * outTimer); |
|
|
|
|
|
/* GOING AWAY!!!! DO NOT CALL THIS API!!!!! USE INSTALLEVENTLOOPIDLETIMER ABOVE!!!! */ |
|
/* |
|
* InstallIdleTimer() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
InstallIdleTimer( |
|
EventLoopRef inEventLoop, |
|
EventTimerInterval inDelay, |
|
EventTimerInterval inInterval, |
|
EventLoopTimerUPP inTimerProc, |
|
void * inTimerData, |
|
EventLoopTimerRef * outTimer); |
|
|
|
|
|
/* |
|
* RemoveEventLoopTimer() |
|
* |
|
* Discussion: |
|
* Removes a timer that was previously installed by a call to |
|
* InstallEventLoopTimer. You call this function when you are done |
|
* using a timer. |
|
* |
|
* Parameters: |
|
* |
|
* inTimer: |
|
* The timer to remove. |
|
* |
|
* Result: |
|
* An operating system status code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
RemoveEventLoopTimer(EventLoopTimerRef inTimer); |
|
|
|
|
|
/* |
|
* SetEventLoopTimerNextFireTime() |
|
* |
|
* Discussion: |
|
* This routine is used to 'reset' a timer. It controls the next |
|
* time the timer fires. This will override any interval you might |
|
* have set. For example, if you have a timer that fires every |
|
* second, and you call this function setting the next time to five |
|
* seconds from now, the timer will sleep for five seconds, then |
|
* fire. It will then resume its one-second interval after that. It |
|
* is as if you removed the timer and reinstalled it with a new |
|
* first-fire delay. |
|
* |
|
* Parameters: |
|
* |
|
* inTimer: |
|
* The timer to adjust |
|
* |
|
* inNextFire: |
|
* The interval from the current time to wait until firing the |
|
* timer again. You may pass kEventDurationForever to stop the |
|
* timer from firing at all. |
|
* |
|
* Result: |
|
* An operating system status code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
SetEventLoopTimerNextFireTime( |
|
EventLoopTimerRef inTimer, |
|
EventTimerInterval inNextFire); |
|
|
|
|
|
|
|
|
|
/*======================================================================================*/ |
|
/* EVENT HANDLERS */ |
|
/*======================================================================================*/ |
|
|
|
typedef struct OpaqueEventHandlerRef* EventHandlerRef; |
|
typedef struct OpaqueEventHandlerCallRef* EventHandlerCallRef; |
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o EventHandler specification */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
/* |
|
* EventHandlerProcPtr |
|
* |
|
* Discussion: |
|
* Callback for receiving events sent to a target this callback is |
|
* installed on. |
|
* |
|
* Parameters: |
|
* |
|
* inHandlerCallRef: |
|
* A reference to the current handler call chain. This is sent to |
|
* your handler so that you can call CallNextEventHandler if you |
|
* need to. |
|
* |
|
* inEvent: |
|
* The Event. |
|
* |
|
* inUserData: |
|
* The app-specified data you passed in a call to |
|
* InstallEventHandler. |
|
* |
|
* Result: |
|
* An operating system result code. Returning noErr indicates you |
|
* handled the event. Returning eventNotHandledErr indicates you did |
|
* not handle the event and perhaps the toolbox should take other |
|
* action. |
|
*/ |
|
typedef CALLBACK_API( OSStatus , EventHandlerProcPtr )(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void *inUserData); |
|
typedef STACK_UPP_TYPE(EventHandlerProcPtr) EventHandlerUPP; |
|
/* |
|
* NewEventHandlerUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( EventHandlerUPP ) |
|
NewEventHandlerUPP(EventHandlerProcPtr userRoutine); |
|
#if !OPAQUE_UPP_TYPES |
|
enum { uppEventHandlerProcInfo = 0x00000FF0 }; /* pascal 4_bytes Func(4_bytes, 4_bytes, 4_bytes) */ |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(EventHandlerUPP) NewEventHandlerUPP(EventHandlerProcPtr userRoutine) { return (EventHandlerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppEventHandlerProcInfo, GetCurrentArchitecture()); } |
|
#else |
|
#define NewEventHandlerUPP(userRoutine) (EventHandlerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppEventHandlerProcInfo, GetCurrentArchitecture()) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* DisposeEventHandlerUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( void ) |
|
DisposeEventHandlerUPP(EventHandlerUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) DisposeEventHandlerUPP(EventHandlerUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } |
|
#else |
|
#define DisposeEventHandlerUPP(userUPP) DisposeRoutineDescriptor(userUPP) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* InvokeEventHandlerUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
InvokeEventHandlerUPP( |
|
EventHandlerCallRef inHandlerCallRef, |
|
EventRef inEvent, |
|
void * inUserData, |
|
EventHandlerUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(OSStatus) InvokeEventHandlerUPP(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void * inUserData, EventHandlerUPP userUPP) { return (OSStatus)CALL_THREE_PARAMETER_UPP(userUPP, uppEventHandlerProcInfo, inHandlerCallRef, inEvent, inUserData); } |
|
#else |
|
#define InvokeEventHandlerUPP(inHandlerCallRef, inEvent, inUserData, userUPP) (OSStatus)CALL_THREE_PARAMETER_UPP((userUPP), uppEventHandlerProcInfo, (inHandlerCallRef), (inEvent), (inUserData)) |
|
#endif |
|
#endif |
|
|
|
#if CALL_NOT_IN_CARBON || OLDROUTINENAMES |
|
/* support for pre-Carbon UPP routines: New...Proc and Call...Proc */ |
|
#define NewEventHandlerProc(userRoutine) NewEventHandlerUPP(userRoutine) |
|
#define CallEventHandlerProc(userRoutine, inHandlerCallRef, inEvent, inUserData) InvokeEventHandlerUPP(inHandlerCallRef, inEvent, inUserData, userRoutine) |
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
typedef struct OpaqueEventTargetRef* EventTargetRef; |
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Installing Event Handlers */ |
|
/* */ |
|
/* Use these routines to install event handlers for a specific toolbox object. You may */ |
|
/* pass zero for inNumTypes and NULL for inList if you need to be in a situation where */ |
|
/* you know you will be receiving events, but not exactly which ones at the time you */ |
|
/* are installing the handler. Later, your application can call the Add/Remove routines */ |
|
/* listed below this section. */ |
|
/* */ |
|
/* You can only install a specific handler once. The combination of inHandler and */ |
|
/* inUserData is considered the 'signature' of a handler. Any attempt to install a new */ |
|
/* handler with the same proc and user data as an already-installed handler will result */ |
|
/* in eventHandlerAlreadyInstalledErr. Installing the same proc and user data on a */ |
|
/* different object is legal. */ |
|
/* */ |
|
/* Upon successful completion of this routine, you are returned an EventHandlerRef, */ |
|
/* which you can use in various other calls, and is passed to your event handler. You */ |
|
/* use it to extract information about the handler, such as the target (window, etc.) */ |
|
/* if you have the same handler installed for different objects and need to perform */ |
|
/* actions on the current target (say, call a window manager function). */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
/* |
|
* InstallEventHandler() |
|
* |
|
* Discussion: |
|
* Installs an event handler on a specified target. Your handler |
|
* proc will be called with the events you registered with when an |
|
* event of the corresponding type and class are send to the target |
|
* you are installing your handler on. |
|
* |
|
* Parameters: |
|
* |
|
* inTarget: |
|
* The target to register your handler with. |
|
* |
|
* inHandler: |
|
* A pointer to your handler function. |
|
* |
|
* inNumTypes: |
|
* The number of events you are registering for. |
|
* |
|
* inList: |
|
* A pointer to an array of EventTypeSpec entries representing the |
|
* events you are interested in. |
|
* |
|
* inUserData: |
|
* The value passed in this parameter is passed on to your event |
|
* handler proc when it is called. |
|
* |
|
* outRef: |
|
* Receives an EventHandlerRef, which you can use later to remove |
|
* the handler. You can pass null if you don't want the reference |
|
* - when the target is disposed, the handler will be disposed as |
|
* well. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
InstallEventHandler( |
|
EventTargetRef inTarget, |
|
EventHandlerUPP inHandler, |
|
UInt32 inNumTypes, |
|
const EventTypeSpec * inList, |
|
void * inUserData, |
|
EventHandlerRef * outRef); /* can be NULL */ |
|
|
|
|
|
/* |
|
* InstallStandardEventHandler() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
InstallStandardEventHandler(EventTargetRef inTarget); |
|
|
|
|
|
/* |
|
* RemoveEventHandler() |
|
* |
|
* Discussion: |
|
* Removes an event handler from the target it was bound to. |
|
* |
|
* Parameters: |
|
* |
|
* inHandlerRef: |
|
* The handler ref to remove (returned in a call to |
|
* InstallEventHandler). After you call this function, the handler |
|
* ref is considered to be invalid and can no longer be used. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
RemoveEventHandler(EventHandlerRef inHandlerRef); |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Adjusting set of event types after a handler is created */ |
|
/* */ |
|
/* After installing a handler with the routine above, you can adjust the event type */ |
|
/* list telling the toolbox what events to send to that handler by calling the two */ |
|
/* routines below. If you add an event type twice for the same handler, your handler */ |
|
/* will only be called once, but it will take two RemoveEventType calls to stop your */ |
|
/* handler from being called with that event type. In other words, the install count */ |
|
/* for each event type is maintained by the toolbox. This might allow you, for example */ |
|
/* to have subclasses of a window object register for types without caring if the base */ |
|
/* class has already registered for that type. When the subclass removes its types, it */ |
|
/* can successfully do so without affecting the base class's reception of its event */ |
|
/* types, yielding eternal bliss. */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
/* |
|
* AddEventTypesToHandler() |
|
* |
|
* Discussion: |
|
* Adds additional events to an event handler that has already been |
|
* installed. |
|
* |
|
* Parameters: |
|
* |
|
* inHandlerRef: |
|
* The event handler to add the additional events to. |
|
* |
|
* inNumTypes: |
|
* The number of events to add. |
|
* |
|
* inList: |
|
* A pointer to an array of EventTypeSpec entries. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
AddEventTypesToHandler( |
|
EventHandlerRef inHandlerRef, |
|
UInt32 inNumTypes, |
|
const EventTypeSpec * inList); |
|
|
|
|
|
/* |
|
* RemoveEventTypesFromHandler() |
|
* |
|
* Discussion: |
|
* Removes events from an event handler that has already been |
|
* installed. |
|
* |
|
* Parameters: |
|
* |
|
* inHandlerRef: |
|
* The event handler to remove the events from. |
|
* |
|
* inNumTypes: |
|
* The number of events to remove. |
|
* |
|
* inList: |
|
* A pointer to an array of EventTypeSpec entries. |
|
* |
|
* Result: |
|
* An operating system status code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
RemoveEventTypesFromHandler( |
|
EventHandlerRef inHandlerRef, |
|
UInt32 inNumTypes, |
|
const EventTypeSpec * inList); |
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Explicit Propogation */ |
|
/* */ |
|
/* CallNextEventHandler can be used to call thru to all handlers below the current */ |
|
/* handler being called. You pass the EventHandlerCallRef passed to your EventHandler */ |
|
/* into this call so that we know how to properly forward the event. The result of */ |
|
/* this function should normally be the result of your own handler that you called */ |
|
/* this API from. The typical use of this routine would be to allow the toolbox to do */ |
|
/* its standard processing and then follow up with some type of embellishment. */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
/* |
|
* CallNextEventHandler() |
|
* |
|
* Discussion: |
|
* Calls thru to the event handlers below you in the event handler |
|
* stack of the target to which your handler is bound. You might use |
|
* this to call thru to the default toolbox handling in order to |
|
* post-process the event. You can only call this routine from |
|
* within an event handler. |
|
* |
|
* Parameters: |
|
* |
|
* inCallRef: |
|
* The event handler call ref passed into your event handler. |
|
* |
|
* inEvent: |
|
* The event to pass thru. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
CallNextEventHandler( |
|
EventHandlerCallRef inCallRef, |
|
EventRef inEvent); |
|
|
|
|
|
|
|
/*--------------------------------------------------------------------------------------*/ |
|
/* o Sending Events */ |
|
/*--------------------------------------------------------------------------------------*/ |
|
|
|
/* |
|
* Discussion: |
|
* EventTarget Send Options |
|
*/ |
|
enum { |
|
|
|
/* |
|
* The event should be sent to the target given only, and should not |
|
* propagate to any other target. CallNextEventHandler will do |
|
* nothing in a handler which has received an event sent in this |
|
* manner. |
|
*/ |
|
kEventTargetDontPropagate = (1 << 0), |
|
|
|
/* |
|
* The event is a notification-style event, and should be received by |
|
* all handlers. The result is usually meaningless when sent in this |
|
* manner, though we do maintain the strongest result code while the |
|
* event falls through each handler. This means that if the first |
|
* handler to receive the event returned noErr, and the next returned |
|
* eventNotHandledErr, the result returned would actually be noErr. |
|
* No handler can stop this event from propagating, i.e. the result |
|
* code does not alter event flow. |
|
*/ |
|
kEventTargetSendToAllHandlers = (1 << 1) |
|
}; |
|
|
|
/* |
|
* SendEventToEventTarget() |
|
* |
|
* Discussion: |
|
* Sends an event to the specified event target. |
|
* |
|
* Parameters: |
|
* |
|
* inEvent: |
|
* The event to send. |
|
* |
|
* inTarget: |
|
* The target to send it to. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.1 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
SendEventToEventTarget( |
|
EventRef inEvent, |
|
EventTargetRef inTarget); |
|
|
|
|
|
/* |
|
* SendEventToEventTargetWithOptions() |
|
* |
|
* Discussion: |
|
* Sends an event to the specified event target, optionally |
|
* controlling how the event propagates. See the discussion of the |
|
* event send options above for more detail. |
|
* |
|
* Parameters: |
|
* |
|
* inEvent: |
|
* The event to send. |
|
* |
|
* inTarget: |
|
* The target to send it to. |
|
* |
|
* inOptions: |
|
* The options to modify the send behavior. Passing zero for this |
|
* makes it behave just like SendEventToEventTarget. |
|
* |
|
* Result: |
|
* An operating system result code. |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available in CarbonLib 1.x, is available on Mac OS X version 10.2 and later |
|
* Mac OS X: in version 10.2 and later |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
SendEventToEventTargetWithOptions( |
|
EventRef inEvent, |
|
EventTargetRef inTarget, |
|
OptionBits inOptions); |
|
|
|
|
|
|
|
|
|
#if PRAGMA_STRUCT_ALIGN |
|
#pragma options align=reset |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(pop) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack() |
|
#endif |
|
|
|
#ifdef PRAGMA_IMPORT_OFF |
|
#pragma import off |
|
#elif PRAGMA_IMPORT |
|
#pragma import reset |
|
#endif |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#endif /* __CARBONEVENTSCORE__ */ |
|
|
|
|