From 496892501f8e6639c0c364aa25e7062e8d8c2211 Mon Sep 17 00:00:00 2001 From: Mitchell Livingston Date: Tue, 29 Sep 2009 23:32:29 +0000 Subject: [PATCH] remove beta Growl framework --- macosx/Growl.framework/Growl | 1 - macosx/Growl.framework/Headers | 1 - macosx/Growl.framework/Resources | 1 - macosx/Growl.framework/Versions/A/Growl | Bin 242600 -> 0 bytes .../Versions/A/Headers/Growl.h | 6 - .../A/Headers/GrowlApplicationBridge-Carbon.h | 780 ------------------ .../A/Headers/GrowlApplicationBridge.h | 609 -------------- .../Versions/A/Headers/GrowlDefines.h | 348 -------- .../Versions/A/Resources/Info.plist | 24 - macosx/Growl.framework/Versions/Current | 1 - 10 files changed, 1771 deletions(-) delete mode 120000 macosx/Growl.framework/Growl delete mode 120000 macosx/Growl.framework/Headers delete mode 120000 macosx/Growl.framework/Resources delete mode 100755 macosx/Growl.framework/Versions/A/Growl delete mode 100644 macosx/Growl.framework/Versions/A/Headers/Growl.h delete mode 100644 macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h delete mode 100644 macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h delete mode 100644 macosx/Growl.framework/Versions/A/Headers/GrowlDefines.h delete mode 100644 macosx/Growl.framework/Versions/A/Resources/Info.plist delete mode 120000 macosx/Growl.framework/Versions/Current diff --git a/macosx/Growl.framework/Growl b/macosx/Growl.framework/Growl deleted file mode 120000 index 85956e2d2..000000000 --- a/macosx/Growl.framework/Growl +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Growl \ No newline at end of file diff --git a/macosx/Growl.framework/Headers b/macosx/Growl.framework/Headers deleted file mode 120000 index a177d2a6b..000000000 --- a/macosx/Growl.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/macosx/Growl.framework/Resources b/macosx/Growl.framework/Resources deleted file mode 120000 index 953ee36f3..000000000 --- a/macosx/Growl.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/macosx/Growl.framework/Versions/A/Growl b/macosx/Growl.framework/Versions/A/Growl deleted file mode 100755 index 1920e45d54a2807e98fc8b7e8510ad3f6c20946b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242600 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 DfA+hp diff --git a/macosx/Growl.framework/Versions/A/Headers/Growl.h b/macosx/Growl.framework/Versions/A/Headers/Growl.h deleted file mode 100644 index e2a44255d..000000000 --- a/macosx/Growl.framework/Versions/A/Headers/Growl.h +++ /dev/null @@ -1,6 +0,0 @@ -#include "GrowlDefines.h" - -#ifdef __OBJC__ -# include "GrowlApplicationBridge.h" -#endif -#include "GrowlApplicationBridge-Carbon.h" diff --git a/macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h b/macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h deleted file mode 100644 index d4adefd43..000000000 --- a/macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h +++ /dev/null @@ -1,780 +0,0 @@ -// -// GrowlApplicationBridge-Carbon.h -// Growl -// -// Created by Mac-arena the Bored Zo on Wed Jun 18 2004. -// Based on GrowlApplicationBridge.h by Evan Schoenberg. -// This source code is in the public domain. You may freely link it into any -// program. -// - -#ifndef _GROWLAPPLICATIONBRIDGE_CARBON_H_ -#define _GROWLAPPLICATIONBRIDGE_CARBON_H_ - -#include -#include - -#ifndef GROWL_EXPORT -#define GROWL_EXPORT __attribute__((visibility("default"))) DEPRECATED_ATTRIBUTE -#endif - -/*! @header GrowlApplicationBridge-Carbon.h - * @abstract Declares an API that Carbon applications can use to interact with Growl. - * @discussion GrowlApplicationBridge uses a delegate to provide information //XXX - * to Growl (such as your application's name and what notifications it may - * post) and to provide information to your application (such as that Growl - * is listening for notifications or that a notification has been clicked). - * - * You can set the Growldelegate with Growl_SetDelegate and find out the - * current delegate with Growl_GetDelegate. See struct Growl_Delegate for more - * information about the delegate. - */ - -__BEGIN_DECLS - -/*! @struct Growl_Delegate - * @abstract Delegate to supply GrowlApplicationBridge with information and respond to events. - * @discussion The Growl delegate provides your interface to - * GrowlApplicationBridge. When GrowlApplicationBridge needs information about - * your application, it looks for it in the delegate; when Growl or the user - * does something that you might be interested in, GrowlApplicationBridge - * looks for a callback in the delegate and calls it if present - * (meaning, if it is not NULL). - * XXX on all of that - * @field size The size of the delegate structure. - * @field applicationName The name of your application. - * @field registrationDictionary A dictionary describing your application and the notifications it can send out. - * @field applicationIconData Your application's icon. - * @field growlInstallationWindowTitle The title of the installation window. - * @field growlInstallationInformation Text to display in the installation window. - * @field growlUpdateWindowTitle The title of the update window. - * @field growlUpdateInformation Text to display in the update window. - * @field referenceCount A count of owners of the delegate. - * @field retain Called when GrowlApplicationBridge receives this delegate. - * @field release Called when GrowlApplicationBridge no longer needs this delegate. - * @field growlIsReady Called when GrowlHelperApp is listening for notifications. - * @field growlNotificationWasClicked Called when a Growl notification is clicked. - * @field growlNotificationTimedOut Called when a Growl notification timed out. - */ -struct Growl_Delegate { - /* @discussion This should be sizeof(struct Growl_Delegate). - */ - size_t size; - - /*All of these attributes are optional. - *Optional attributes can be NULL; required attributes that - * are NULL cause setting the Growl delegate to fail. - *XXX - move optional/required status into the discussion for each field - */ - - /* This name is used both internally and in the Growl preferences. - * - * This should remain stable between different versions and incarnations of - * your application. - * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and - * "SurfWriter Lite" are not. - * - * This can be NULL if it is provided elsewhere, namely in an - * auto-discoverable plist file in your app bundle - * (XXX refer to more information on that) or in registrationDictionary. - */ - CFStringRef applicationName; - - /* - * Must contain at least these keys: - * GROWL_NOTIFICATIONS_ALL (CFArray): - * Contains the names of all notifications your application may post. - * - * Can also contain these keys: - * GROWL_NOTIFICATIONS_DEFAULT (CFArray): - * Names of notifications that should be enabled by default. - * If omitted, GROWL_NOTIFICATIONS_ALL will be used. - * GROWL_APP_NAME (CFString): - * Same as the applicationName member of this structure. - * If both are present, the applicationName member shall prevail. - * If this key is present, you may omit applicationName (set it to NULL). - * GROWL_APP_ICON (CFData): - * Same as the iconData member of this structure. - * If both are present, the iconData member shall prevail. - * If this key is present, you may omit iconData (set it to NULL). - * - * If you change the contents of this dictionary after setting the delegate, - * be sure to call Growl_Reregister. - * - * This can be NULL if you have an auto-discoverable plist file in your app - * bundle. (XXX refer to more information on that) - */ - CFDictionaryRef registrationDictionary; - - /* The data can be in any format supported by NSImage. As of - * Mac OS X 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and - * PICT formats. - * - * If this is not supplied, Growl will look up your application's icon by - * its application name. - */ - CFDataRef applicationIconData; - - /* Installer display attributes - * - * These four attributes are used by the Growl installer, if this framework - * supports it. - * For any of these being NULL, a localised default will be - * supplied. - */ - - /* If this is NULL, Growl will use a default, - * localized title. - * - * Only used if you're using Growl-WithInstaller.framework. Otherwise, - * this member is ignored. - */ - CFStringRef growlInstallationWindowTitle; - /* This information may be as long or short as desired (the - * window will be sized to fit it). If Growl is not installed, it will - * be displayed to the user as an explanation of what Growl is and what - * it can do in your application. - * It should probably note that no download is required to install. - * - * If this is NULL, Growl will use a default, localized - * explanation. - * - * Only used if you're using Growl-WithInstaller.framework. Otherwise, - * this member is ignored. - */ - CFStringRef growlInstallationInformation; - /* If this is NULL, Growl will use a default, - * localized title. - * - * Only used if you're using Growl-WithInstaller.framework. Otherwise, - * this member is ignored. - */ - CFStringRef growlUpdateWindowTitle; - /* This information may be as long or short as desired (the - * window will be sized to fit it). If an older version of Growl is - * installed, it will be displayed to the user as an explanation that an - * updated version of Growl is included in your application and - * no download is required. - * - * If this is NULL, Growl will use a default, localized - * explanation. - * - * Only used if you're using Growl-WithInstaller.framework. Otherwise, - * this member is ignored. - */ - CFStringRef growlUpdateInformation; - - /* This member is provided for use by your retain and release - * callbacks (see below). - * - * GrowlApplicationBridge never directly uses this member. Instead, it - * calls your retain callback (if non-NULL) and your release - * callback (if non-NULL). - */ - unsigned referenceCount; - - //Functions. Currently all of these are optional (any of them can be NULL). - - /* When you call Growl_SetDelegate(newDelegate), it will call - * oldDelegate->release(oldDelegate), and then it will call - * newDelegate->retain(newDelegate), and the return value from retain - * is what will be set as the delegate. - * (This means that this member works like CFRetain and -[NSObject retain].) - * This member is optional (it can be NULL). - * For a delegate allocated with malloc, this member would be - * NULL. - * @result A delegate to which GrowlApplicationBridge holds a reference. - */ - void *(*retain)(void *); - /* When you call Growl_SetDelegate(newDelegate), it will call - * oldDelegate->release(oldDelegate), and then it will call - * newDelegate->retain(newDelegate), and the return value from retain - * is what will be set as the delegate. - * (This means that this member works like CFRelease and - * -[NSObject release].) - * This member is optional (it can be NULL). - * For a delegate allocated with malloc, this member might be - * free(3). - */ - void (*release)(void *); - - /* Informs the delegate that Growl (specifically, the GrowlHelperApp) was - * launched successfully (or was already running). The application can - * take actions with the knowledge that Growl is installed and functional. - */ - void (*growlIsReady)(void); - - /* Informs the delegate that a Growl notification was clicked. It is only - * sent for notifications sent with a non-NULL clickContext, - * so if you want to receive a message when a notification is clicked, - * clickContext must not be NULL when calling - * Growl_PostNotification or - * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext. - */ - void (*growlNotificationWasClicked)(CFPropertyListRef clickContext); - - /* Informs the delegate that a Growl notification timed out. It is only - * sent for notifications sent with a non-NULL clickContext, - * so if you want to receive a message when a notification is clicked, - * clickContext must not be NULL when calling - * Growl_PostNotification or - * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext. - */ - void (*growlNotificationTimedOut)(CFPropertyListRef clickContext); -}; - -/*! @struct Growl_Notification - * @abstract Structure describing a Growl notification. - * @discussion XXX - * @field size The size of the notification structure. - * @field name Identifies the notification. - * @field title Short synopsis of the notification. - * @field description Additional text. - * @field iconData An icon for the notification. - * @field priority An indicator of the notification's importance. - * @field reserved Bits reserved for future usage. - * @field isSticky Requests that a notification stay on-screen until dismissed explicitly. - * @field clickContext An identifier to be passed to your click callback when a notification is clicked. - * @field clickCallback A callback to call when the notification is clicked. - */ -struct Growl_Notification { - /* This should be sizeof(struct Growl_Notification). - */ - size_t size; - - /* The notification name distinguishes one type of - * notification from another. The name should be human-readable, as it - * will be displayed in the Growl preference pane. - * - * The name is used in the GROWL_NOTIFICATIONS_ALL and - * GROWL_NOTIFICATIONS_DEFAULT arrays in the registration dictionary, and - * in this member of the Growl_Notification structure. - */ - CFStringRef name; - - /* A notification's title describes the notification briefly. - * It should be easy to read quickly by the user. - */ - CFStringRef title; - - /* The description supplements the title with more - * information. It is usually longer and sometimes involves a list of - * subjects. For example, for a 'Download complete' notification, the - * description might have one filename per line. GrowlMail in Growl 0.6 - * uses a description of '%d new mail(s)' (formatted with the number of - * messages). - */ - CFStringRef description; - - /* The notification icon usually indicates either what - * happened (it may have the same icon as e.g. a toolbar item that - * started the process that led to the notification), or what it happened - * to (e.g. a document icon). - * - * The icon data is optional, so it can be NULL. In that - * case, the application icon is used alone. Not all displays support - * icons. - * - * The data can be in any format supported by NSImage. As of Mac OS X - * 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT form - * ats. - */ - CFDataRef iconData; - - /* Priority is new in Growl 0.6, and is represented as a - * signed integer from -2 to +2. 0 is Normal priority, -2 is Very Low - * priority, and +2 is Very High priority. - * - * Not all displays support priority. If you do not wish to assign a - * priority to your notification, assign 0. - */ - signed int priority; - - /* These bits are not used in Growl 0.6. Set them to 0. - */ - unsigned reserved: 31; - - /* When the sticky bit is clear, in most displays, - * notifications disappear after a certain amount of time. Sticky - * notifications, however, remain on-screen until the user dismisses them - * explicitly, usually by clicking them. - * - * Sticky notifications were introduced in Growl 0.6. Most notifications - * should not be sticky. Not all displays support sticky notifications, - * and the user may choose in Growl's preference pane to force the - * notification to be sticky or non-sticky, in which case the sticky bit - * in the notification will be ignored. - */ - unsigned isSticky: 1; - - /* If this is not NULL, and your click callback - * is not NULL either, this will be passed to the callback - * when your notification is clicked by the user. - * - * Click feedback was introduced in Growl 0.6, and it is optional. Not - * all displays support click feedback. - */ - CFPropertyListRef clickContext; - - /* If this is not NULL, it will be called instead - * of the Growl delegate's click callback when clickContext is - * non-NULL and the notification is clicked on by the user. - * - * Click feedback was introduced in Growl 0.6, and it is optional. Not - * all displays support click feedback. - * - * The per-notification click callback is not yet supported as of Growl - * 0.7. - */ - void (*clickCallback)(CFPropertyListRef clickContext); - - CFStringRef identifier; -}; - -#pragma mark - -#pragma mark Easy initialisers - -/*! @defined InitGrowlDelegate - * @abstract Callable macro. Initializes a Growl delegate structure to defaults. - * @discussion Call with a pointer to a struct Growl_Delegate. All of the - * members of the structure will be set to 0 or NULL, except for - * size (which will be set to sizeof(struct Growl_Delegate)) and - * referenceCount (which will be set to 1). - */ -#define InitGrowlDelegate(delegate) \ - do { \ - if (delegate) { \ - (delegate)->size = sizeof(struct Growl_Delegate); \ - (delegate)->applicationName = NULL; \ - (delegate)->registrationDictionary = NULL; \ - (delegate)->applicationIconData = NULL; \ - (delegate)->growlInstallationWindowTitle = NULL; \ - (delegate)->growlInstallationInformation = NULL; \ - (delegate)->growlUpdateWindowTitle = NULL; \ - (delegate)->growlUpdateInformation = NULL; \ - (delegate)->referenceCount = 1U; \ - (delegate)->retain = NULL; \ - (delegate)->release = NULL; \ - (delegate)->growlIsReady = NULL; \ - (delegate)->growlNotificationWasClicked = NULL; \ - (delegate)->growlNotificationTimedOut = NULL; \ - } \ - } while(0) - -/*! @defined InitGrowlNotification - * @abstract Callable macro. Initializes a Growl notification structure to defaults. - * @discussion Call with a pointer to a struct Growl_Notification. All of - * the members of the structure will be set to 0 or NULL, except - * for size (which will be set to - * sizeof(struct Growl_Notification)). - */ -#define InitGrowlNotification(notification) \ - do { \ - if (notification) { \ - (notification)->size = sizeof(struct Growl_Notification); \ - (notification)->name = NULL; \ - (notification)->title = NULL; \ - (notification)->description = NULL; \ - (notification)->iconData = NULL; \ - (notification)->priority = 0; \ - (notification)->reserved = 0U; \ - (notification)->isSticky = false; \ - (notification)->clickContext = NULL; \ - (notification)->clickCallback = NULL; \ - (notification)->identifier = NULL; \ - } \ - } while(0) - -#pragma mark - -#pragma mark Public API - -// @functiongroup Managing the Growl delegate - -/*! @function Growl_SetDelegate - * @abstract Replaces the current Growl delegate with a new one, or removes - * the Growl delegate. - * @param newDelegate - * @result Returns false and does nothing else if a pointer that was passed in - * is unsatisfactory (because it is non-NULL, but at least one - * required member of it is NULL). Otherwise, sets or unsets the - * delegate and returns true. - * @discussion When newDelegate is non-NULL, sets - * the delegate to newDelegate. When it is NULL, - * the current delegate will be unset, and no delegate will be in place. - * - * It is legal for newDelegate to be the current delegate; - * nothing will happen, and Growl_SetDelegate will return true. It is also - * legal for it to be NULL, as described above; again, it will - * return true. - * - * If there was a delegate in place before the call, Growl_SetDelegate will - * call the old delegate's release member if it was non-NULL. If - * newDelegate is non-NULL, Growl_SetDelegate will - * call newDelegate->retain, and set the delegate to its return - * value. - * - * If you are using Growl-WithInstaller.framework, and an older version of - * Growl is installed on the user's system, the user will automatically be - * prompted to update. - * - * GrowlApplicationBridge currently does not copy this structure, nor does it - * retain any of the CF objects in the structure (it regards the structure as - * a container that retains the objects when they are added and releases them - * when they are removed or the structure is destroyed). Also, - * GrowlApplicationBridge currently does not modify any member of the - * structure, except possibly the referenceCount by calling the retain and - * release members. - */ -GROWL_EXPORT Boolean Growl_SetDelegate(struct Growl_Delegate *newDelegate); - -/*! @function Growl_GetDelegate - * @abstract Returns the current Growl delegate, if any. - * @result The current Growl delegate. - * @discussion Returns the last pointer passed into Growl_SetDelegate, or - * NULL if no such call has been made. - * - * This function follows standard Core Foundation reference-counting rules. - * Because it is a Get function, not a Copy function, it will not retain the - * delegate on your behalf. You are responsible for retaining and releasing - * the delegate as needed. - */ -GROWL_EXPORT struct Growl_Delegate *Growl_GetDelegate(void); - -#pragma mark - - -// @functiongroup Posting Growl notifications - -/*! @function Growl_PostNotification - * @abstract Posts a Growl notification. - * @param notification The notification to post. - * @discussion This is the preferred means for sending a Growl notification. - * The notification name and at least one of the title and description are - * required (all three are preferred). All other parameters may be - * NULL (or 0 or false as appropriate) to accept default values. - * - * If using the Growl-WithInstaller framework, if Growl is not installed the - * user will be prompted to install Growl. - * If the user cancels, this function will have no effect until the next - * application session, at which time when it is called the user will be - * prompted again. The user is also given the option to not be prompted again. - * If the user does choose to install Growl, the requested notification will - * be displayed once Growl is installed and running. - */ -GROWL_EXPORT void Growl_PostNotification(const struct Growl_Notification *notification); - -/*! @function Growl_PostNotificationWithDictionary -* @abstract Notifies using a userInfo dictionary suitable for passing to -* CFDistributedNotificationCenter. -* @param userInfo The dictionary to notify with. -* @discussion Before Growl 0.6, your application would have posted -* notifications using CFDistributedNotificationCenter by creating a userInfo -* dictionary with the notification data. This had the advantage of allowing -* you to add other data to the dictionary for programs besides Growl that -* might be listening. -* -* This function allows you to use such dictionaries without being restricted -* to using CFDistributedNotificationCenter. The keys for this dictionary - * can be found in GrowlDefines.h. -*/ -GROWL_EXPORT void Growl_PostNotificationWithDictionary(CFDictionaryRef userInfo); - -/*! @function Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext - * @abstract Posts a Growl notification using parameter values. - * @param title The title of the notification. - * @param description The description of the notification. - * @param notificationName The name of the notification as listed in the - * registration dictionary. - * @param iconData Data representing a notification icon. Can be NULL. - * @param priority The priority of the notification (-2 to +2, with -2 - * being Very Low and +2 being Very High). - * @param isSticky If true, requests that this notification wait for a - * response from the user. - * @param clickContext An object to pass to the clickCallback, if any. Can - * be NULL, in which case the clickCallback is not called. - * @discussion Creates a temporary Growl_Notification, fills it out with the - * supplied information, and calls Growl_PostNotification on it. - * See struct Growl_Notification and Growl_PostNotification for more - * information. - * - * The icon data can be in any format supported by NSImage. As of Mac OS X - * 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT formats. - */ -GROWL_EXPORT void Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext( - /*inhale*/ - CFStringRef title, - CFStringRef description, - CFStringRef notificationName, - CFDataRef iconData, - signed int priority, - Boolean isSticky, - CFPropertyListRef clickContext); - -#pragma mark - - -// @functiongroup Registering - -/*! @function Growl_RegisterWithDictionary - * @abstract Register your application with Growl without setting a delegate. - * @discussion When you call this function with a dictionary, - * GrowlApplicationBridge registers your application using that dictionary. - * If you pass NULL, GrowlApplicationBridge will ask the delegate - * (if there is one) for a dictionary, and if that doesn't work, it will look - * in your application's bundle for an auto-discoverable plist. - * (XXX refer to more information on that) - * - * If you pass a dictionary to this function, it must include the - * GROWL_APP_NAME key, unless a delegate is set. - * - * This function is mainly an alternative to the delegate system introduced - * with Growl 0.6. Without a delegate, you cannot receive callbacks such as - * growlIsReady (since they are sent to the delegate). You can, - * however, set a delegate after registering without one. - * - * This function was introduced in Growl.framework 0.7. - * @result false if registration failed (e.g. if Growl isn't installed). - */ -GROWL_EXPORT Boolean Growl_RegisterWithDictionary(CFDictionaryRef regDict); - -/*! @function Growl_Reregister - * @abstract Updates your registration with Growl. - * @discussion If your application changes the contents of the - * GROWL_NOTIFICATIONS_ALL key in the registrationDictionary member of the - * Growl delegate, or if it changes the value of that member, or if it - * changes the contents of its auto-discoverable plist, call this function - * to have Growl update its registration information for your application. - * - * Otherwise, this function does not normally need to be called. If you're - * using a delegate, your application will be registered when you set the - * delegate if both the delegate and its registrationDictionary member are - * non-NULL. - * - * This function is now implemented using - * Growl_RegisterWithDictionary. - */ -GROWL_EXPORT void Growl_Reregister(void); - -#pragma mark - - -/*! @function Growl_SetWillRegisterWhenGrowlIsReady - * @abstract Tells GrowlApplicationBridge to register with Growl when Growl - * launches (or not). - * @discussion When Growl has started listening for notifications, it posts a - * GROWL_IS_READY notification on the Distributed Notification - * Center. GrowlApplicationBridge listens for this notification, using it to - * perform various tasks (such as calling your delegate's - * growlIsReady callback, if it has one). If this function is - * called with true, one of those tasks will be to reregister - * with Growl (in the manner of Growl_Reregister). - * - * This attribute is automatically set back to false - * (the default) after every GROWL_IS_READY notification. - * @param flag true if you want GrowlApplicationBridge to register with - * Growl when next it is ready; false if not. - */ -GROWL_EXPORT void Growl_SetWillRegisterWhenGrowlIsReady(Boolean flag); -/*! @function Growl_WillRegisterWhenGrowlIsReady - * @abstract Reports whether GrowlApplicationBridge will register with Growl - * when Growl next launches. - * @result true if GrowlApplicationBridge will register with - * Growl when next it posts GROWL_IS_READY; false if not. - */ -GROWL_EXPORT Boolean Growl_WillRegisterWhenGrowlIsReady(void); - -#pragma mark - - -// @functiongroup Obtaining registration dictionaries - -/*! @function Growl_CopyRegistrationDictionaryFromDelegate - * @abstract Asks the delegate for a registration dictionary. - * @discussion If no delegate is set, or if the delegate's - * registrationDictionary member is NULL, this - * function returns NULL. - * - * This function does not attempt to clean up the dictionary in any way - for - * example, if it is missing the GROWL_APP_NAME key, the result - * will be missing it too. Use - * Growl_CreateRegistrationDictionaryByFillingInDictionary or - * Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys - * to try to fill in missing keys. - * - * This function was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -GROWL_EXPORT CFDictionaryRef Growl_CopyRegistrationDictionaryFromDelegate(void); - -/*! @function Growl_CopyRegistrationDictionaryFromBundle - * @abstract Looks in a bundle for a registration dictionary. - * @discussion This function looks in a bundle for an auto-discoverable - * registration dictionary file using CFBundleCopyResourceURL. - * If it finds one, it loads the file using CFPropertyList and - * returns the result. - * - * If you pass NULL as the bundle, the main bundle is examined. - * - * This function does not attempt to clean up the dictionary in any way - for - * example, if it is missing the GROWL_APP_NAME key, the result - * will be missing it too. Use - * Growl_CreateRegistrationDictionaryByFillingInDictionary: or - * Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys - * to try to fill in missing keys. - * - * This function was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -GROWL_EXPORT CFDictionaryRef Growl_CopyRegistrationDictionaryFromBundle(CFBundleRef bundle); - -/*! @function Growl_CreateBestRegistrationDictionary - * @abstract Obtains a registration dictionary, filled out to the best of - * GrowlApplicationBridge's knowledge. - * @discussion This function creates a registration dictionary as best - * GrowlApplicationBridge knows how. - * - * First, GrowlApplicationBridge examines the Growl delegate (if there is - * one) and gets the registration dictionary from that. If no such dictionary - * was obtained, GrowlApplicationBridge looks in your application's main - * bundle for an auto-discoverable registration dictionary file. If that - * doesn't exist either, this function returns NULL. - * - * Second, GrowlApplicationBridge calls - * Growl_CreateRegistrationDictionaryByFillingInDictionary with - * whatever dictionary was obtained. The result of that function is the - * result of this function. - * - * GrowlApplicationBridge uses this function when you call - * Growl_SetDelegate, or when you call - * Growl_RegisterWithDictionary with NULL. - * - * This function was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -GROWL_EXPORT CFDictionaryRef Growl_CreateBestRegistrationDictionary(void); - -#pragma mark - - -// @functiongroup Filling in registration dictionaries - -/*! @function Growl_CreateRegistrationDictionaryByFillingInDictionary - * @abstract Tries to fill in missing keys in a registration dictionary. - * @param regDict The dictionary to fill in. - * @result The dictionary with the keys filled in. - * @discussion This function examines the passed-in dictionary for missing keys, - * and tries to work out correct values for them. As of 0.7, it uses: - * - * Key Value - * --- ----- - * GROWL_APP_NAME CFBundleExecutableName - * GROWL_APP_ICON The icon of the application. - * GROWL_APP_LOCATION The location of the application. - * GROWL_NOTIFICATIONS_DEFAULT GROWL_NOTIFICATIONS_ALL - * - * Keys are only filled in if missing; if a key is present in the dictionary, - * its value will not be changed. - * - * This function was introduced in Growl.framework 0.7. - */ -GROWL_EXPORT CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionary(CFDictionaryRef regDict); -/*! @function Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys - * @abstract Tries to fill in missing keys in a registration dictionary. - * @param regDict The dictionary to fill in. - * @param keys The keys to fill in. If NULL, any missing keys are filled in. - * @result The dictionary with the keys filled in. - * @discussion This function examines the passed-in dictionary for missing keys, - * and tries to work out correct values for them. As of 0.7, it uses: - * - * Key Value - * --- ----- - * GROWL_APP_NAME CFBundleExecutableName - * GROWL_APP_ICON The icon of the application. - * GROWL_APP_LOCATION The location of the application. - * GROWL_NOTIFICATIONS_DEFAULT GROWL_NOTIFICATIONS_ALL - * - * Only those keys that are listed in keys will be filled in. - * Other missing keys are ignored. Also, keys are only filled in if missing; - * if a key is present in the dictionary, its value will not be changed. - * - * This function was introduced in Growl.framework 0.7. - */ -GROWL_EXPORT CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys(CFDictionaryRef regDict, CFSetRef keys); - -/*! @brief Tries to fill in missing keys in a notification dictionary. - * @param notifDict The dictionary to fill in. - * @return The dictionary with the keys filled in. This will be a separate instance from \a notifDict. - * @discussion This function examines the \a notifDict for missing keys, and - * tries to get them from the last known registration dictionary. As of 1.1, - * the keys that it will look for are: - * - * \li GROWL_APP_NAME - * \li GROWL_APP_ICON - * - * @since Growl.framework 1.1 - */ -GROWL_EXPORT CFDictionaryRef Growl_CreateNotificationDictionaryByFillingInDictionary(CFDictionaryRef notifDict); - -#pragma mark - - -// @functiongroup Querying Growl's status - -/*! @function Growl_IsInstalled - * @abstract Determines whether the Growl prefpane and its helper app are - * installed. - * @result Returns true if Growl is installed, false otherwise. - */ -GROWL_EXPORT Boolean Growl_IsInstalled(void); - -/*! @function Growl_IsRunning - * @abstract Cycles through the process list to find whether GrowlHelperApp - * is running. - * @result Returns true if Growl is running, false otherwise. - */ -GROWL_EXPORT Boolean Growl_IsRunning(void); - -#pragma mark - - -// @functiongroup Launching Growl - -/*! @typedef GrowlLaunchCallback - * @abstract Callback to notify you that Growl is running. - * @param context The context pointer passed to Growl_LaunchIfInstalled. - * @discussion Growl_LaunchIfInstalled calls this callback function if Growl - * was already running or if it launched Growl successfully. - */ -typedef void (*GrowlLaunchCallback)(void *context); - -/*! @function Growl_LaunchIfInstalled - * @abstract Launches GrowlHelperApp if it is not already running. - * @param callback A callback function which will be called if Growl was successfully - * launched or was already running. Can be NULL. - * @param context The context pointer to pass to the callback. Can be NULL. - * @result Returns true if Growl was successfully launched or was already - * running; returns false and does not call the callback otherwise. - * @discussion Returns true and calls the callback (if the callback is not - * NULL) if the Growl helper app began launching or was already - * running. Returns false and performs no other action if Growl could not be - * launched (e.g. because the Growl preference pane is not properly installed). - * - * If Growl_CreateBestRegistrationDictionary returns - * non-NULL, this function will register with Growl atomically. - * - * The callback should take a single argument; this is to allow applications - * to have context-relevant information passed back. It is perfectly - * acceptable for context to be NULL. The callback itself can be - * NULL if you don't want one. - */ -GROWL_EXPORT Boolean Growl_LaunchIfInstalled(GrowlLaunchCallback callback, void *context); - -#pragma mark - -#pragma mark Constants - -/*! @defined GROWL_PREFPANE_BUNDLE_IDENTIFIER - * @abstract The CFBundleIdentifier of the Growl preference pane bundle. - * @discussion GrowlApplicationBridge uses this to determine whether Growl is - * currently installed, by searching for the Growl preference pane. Your - * application probably does not need to use this macro itself. - */ -#ifndef GROWL_PREFPANE_BUNDLE_IDENTIFIER -#define GROWL_PREFPANE_BUNDLE_IDENTIFIER CFSTR("com.growl.prefpanel") -#endif - -__END_DECLS - -#endif /* _GROWLAPPLICATIONBRIDGE_CARBON_H_ */ diff --git a/macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h b/macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h deleted file mode 100644 index 4341f3fbd..000000000 --- a/macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h +++ /dev/null @@ -1,609 +0,0 @@ -// -// GrowlApplicationBridge.h -// Growl -// -// Created by Evan Schoenberg on Wed Jun 16 2004. -// Copyright 2004-2006 The Growl Project. All rights reserved. -// - -/*! - * @header GrowlApplicationBridge.h - * @abstract Defines the GrowlApplicationBridge class. - * @discussion This header defines the GrowlApplicationBridge class as well as - * the GROWL_PREFPANE_BUNDLE_IDENTIFIER constant. - */ - -#ifndef __GrowlApplicationBridge_h__ -#define __GrowlApplicationBridge_h__ - -#import -#import -#import "GrowlDefines.h" - -//Forward declarations -@protocol GrowlApplicationBridgeDelegate; - -//Internal notification when the user chooses not to install (to avoid continuing to cache notifications awaiting installation) -#define GROWL_USER_CHOSE_NOT_TO_INSTALL_NOTIFICATION @"User chose not to install" - -//------------------------------------------------------------------------------ -#pragma mark - - -/*! - * @class GrowlApplicationBridge - * @abstract A class used to interface with Growl. - * @discussion This class provides a means to interface with Growl. - * - * Currently it provides a way to detect if Growl is installed and launch the - * GrowlHelperApp if it's not already running. - */ -@interface GrowlApplicationBridge : NSObject { - -} - -/*! - * @method isGrowlInstalled - * @abstract Detects whether Growl is installed. - * @discussion Determines if the Growl prefpane and its helper app are installed. - * @result Returns YES if Growl is installed, NO otherwise. - */ -+ (BOOL) isGrowlInstalled; - -/*! - * @method isGrowlRunning - * @abstract Detects whether GrowlHelperApp is currently running. - * @discussion Cycles through the process list to find whether GrowlHelperApp is running and returns its findings. - * @result Returns YES if GrowlHelperApp is running, NO otherwise. - */ -+ (BOOL) isGrowlRunning; - -#pragma mark - - -/*! - * @method setGrowlDelegate: - * @abstract Set the object which will be responsible for providing and receiving Growl information. - * @discussion This must be called before using GrowlApplicationBridge. - * - * The methods in the GrowlApplicationBridgeDelegate protocol are required - * and return the basic information needed to register with Growl. - * - * The methods in the GrowlApplicationBridgeDelegate_InformalProtocol - * informal protocol are individually optional. They provide a greater - * degree of interaction between the application and growl such as informing - * the application when one of its Growl notifications is clicked by the user. - * - * The methods in the GrowlApplicationBridgeDelegate_Installation_InformalProtocol - * informal protocol are individually optional and are only applicable when - * using the Growl-WithInstaller.framework which allows for automated Growl - * installation. - * - * When this method is called, data will be collected from inDelegate, Growl - * will be launched if it is not already running, and the application will be - * registered with Growl. - * - * If using the Growl-WithInstaller framework, if Growl is already installed - * but this copy of the framework has an updated version of Growl, the user - * will be prompted to update automatically. - * - * @param inDelegate The delegate for the GrowlApplicationBridge. It must conform to the GrowlApplicationBridgeDelegate protocol. - */ -+ (void) setGrowlDelegate:(NSObject *)inDelegate; - -/*! - * @method growlDelegate - * @abstract Return the object responsible for providing and receiving Growl information. - * @discussion See setGrowlDelegate: for details. - * @result The Growl delegate. - */ -+ (NSObject *) growlDelegate; - -#pragma mark - - -/*! - * @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext: - * @abstract Send a Growl notification. - * @discussion This is the preferred means for sending a Growl notification. - * The notification name and at least one of the title and description are - * required (all three are preferred). All other parameters may be - * nil (or 0 or NO as appropriate) to accept default values. - * - * If using the Growl-WithInstaller framework, if Growl is not installed the - * user will be prompted to install Growl. If the user cancels, this method - * will have no effect until the next application session, at which time when - * it is called the user will be prompted again. The user is also given the - * option to not be prompted again. If the user does choose to install Growl, - * the requested notification will be displayed once Growl is installed and - * running. - * - * @param title The title of the notification displayed to the user. - * @param description The full description of the notification displayed to the user. - * @param notifName The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane. - * @param iconData NSData object to show with the notification as its icon. If nil, the application's icon will be used instead. - * @param priority The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority. - * @param isSticky If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications. - * @param clickContext A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of NSString, NSArray, NSNumber, NSDictionary, and NSData types). - */ -+ (void) notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - iconData:(NSData *)iconData - priority:(signed int)priority - isSticky:(BOOL)isSticky - clickContext:(id)clickContext; - -/*! - * @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:identifier: - * @abstract Send a Growl notification. - * @discussion This is the preferred means for sending a Growl notification. - * The notification name and at least one of the title and description are - * required (all three are preferred). All other parameters may be - * nil (or 0 or NO as appropriate) to accept default values. - * - * If using the Growl-WithInstaller framework, if Growl is not installed the - * user will be prompted to install Growl. If the user cancels, this method - * will have no effect until the next application session, at which time when - * it is called the user will be prompted again. The user is also given the - * option to not be prompted again. If the user does choose to install Growl, - * the requested notification will be displayed once Growl is installed and - * running. - * - * @param title The title of the notification displayed to the user. - * @param description The full description of the notification displayed to the user. - * @param notifName The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane. - * @param iconData NSData object to show with the notification as its icon. If nil, the application's icon will be used instead. - * @param priority The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority. - * @param isSticky If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications. - * @param clickContext A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of NSString, NSArray, NSNumber, NSDictionary, and NSData types). - * @param identifier An identifier for this notification. Notifications with equal identifiers are coalesced. - */ -+ (void) notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - iconData:(NSData *)iconData - priority:(signed int)priority - isSticky:(BOOL)isSticky - clickContext:(id)clickContext - identifier:(NSString *)identifier; - -/*! - * @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:identifier: - * @abstract Send a Growl notification. - * @discussion This is the preferred means for sending a Growl notification. - * The notification name and at least one of the title and description are - * required (all three are preferred). All other parameters may be - * nil (or 0 or NO as appropriate) to accept default values. - * - * If using the Growl-WithInstaller framework, if Growl is not installed the - * user will be prompted to install Growl. If the user cancels, this method - * will have no effect until the next application session, at which time when - * it is called the user will be prompted again. The user is also given the - * option to not be prompted again. If the user does choose to install Growl, - * the requested notification will be displayed once Growl is installed and - * running. - * - * @param title The title of the notification displayed to the user. - * @param description The full description of the notification displayed to the user. - * @param notifName The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane. - * @param iconData NSData object to show with the notification as its icon. If nil, the application's icon will be used instead. - * @param priority The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority. - * @param isSticky If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications. - * @param clickContext A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of NSString, NSArray, NSNumber, NSDictionary, and NSData types). - * @param identifier An identifier for this notification. Notifications with equal identifiers are coalesced. - */ -+ (void) notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - iconData:(NSData *)iconData - priority:(signed int)priority - isSticky:(BOOL)isSticky - clickContext:(id)clickContext - identifier:(NSString *)identifier; - -/*! @method notifyWithDictionary: - * @abstract Notifies using a userInfo dictionary suitable for passing to - * NSDistributedNotificationCenter. - * @param userInfo The dictionary to notify with. - * @discussion Before Growl 0.6, your application would have posted - * notifications using NSDistributedNotificationCenter by - * creating a userInfo dictionary with the notification data. This had the - * advantage of allowing you to add other data to the dictionary for programs - * besides Growl that might be listening. - * - * This method allows you to use such dictionaries without being restricted - * to using NSDistributedNotificationCenter. The keys for this dictionary - * can be found in GrowlDefines.h. - */ -+ (void) notifyWithDictionary:(NSDictionary *)userInfo; - -#pragma mark - - -/*! @method registerWithDictionary: - * @abstract Register your application with Growl without setting a delegate. - * @discussion When you call this method with a dictionary, - * GrowlApplicationBridge registers your application using that dictionary. - * If you pass nil, GrowlApplicationBridge will ask the delegate - * (if there is one) for a dictionary, and if that doesn't work, it will look - * in your application's bundle for an auto-discoverable plist. - * (XXX refer to more information on that) - * - * If you pass a dictionary to this method, it must include the - * GROWL_APP_NAME key, unless a delegate is set. - * - * This method is mainly an alternative to the delegate system introduced - * with Growl 0.6. Without a delegate, you cannot receive callbacks such as - * -growlIsReady (since they are sent to the delegate). You can, - * however, set a delegate after registering without one. - * - * This method was introduced in Growl.framework 0.7. - */ -+ (BOOL) registerWithDictionary:(NSDictionary *)regDict; - -/*! @method reregisterGrowlNotifications - * @abstract Reregister the notifications for this application. - * @discussion This method does not normally need to be called. If your - * application changes what notifications it is registering with Growl, call - * this method to have the Growl delegate's - * -registrationDictionaryForGrowl method called again and the - * Growl registration information updated. - * - * This method is now implemented using -registerWithDictionary:. - */ -+ (void) reregisterGrowlNotifications; - -#pragma mark - - -/*! @method setWillRegisterWhenGrowlIsReady: - * @abstract Tells GrowlApplicationBridge to register with Growl when Growl - * launches (or not). - * @discussion When Growl has started listening for notifications, it posts a - * GROWL_IS_READY notification on the Distributed Notification - * Center. GrowlApplicationBridge listens for this notification, using it to - * perform various tasks (such as calling your delegate's - * -growlIsReady method, if it has one). If this method is - * called with YES, one of those tasks will be to reregister - * with Growl (in the manner of -reregisterGrowlNotifications). - * - * This attribute is automatically set back to NO (the default) - * after every GROWL_IS_READY notification. - * @param flag YES if you want GrowlApplicationBridge to register with - * Growl when next it is ready; NO if not. - */ -+ (void) setWillRegisterWhenGrowlIsReady:(BOOL)flag; -/*! @method willRegisterWhenGrowlIsReady - * @abstract Reports whether GrowlApplicationBridge will register with Growl - * when Growl next launches. - * @result YES if GrowlApplicationBridge will register with Growl - * when next it posts GROWL_IS_READY; NO if not. - */ -+ (BOOL) willRegisterWhenGrowlIsReady; - -#pragma mark - - -/*! @method registrationDictionaryFromDelegate - * @abstract Asks the delegate for a registration dictionary. - * @discussion If no delegate is set, or if the delegate's - * -registrationDictionaryForGrowl method returns - * nil, this method returns nil. - * - * This method does not attempt to clean up the dictionary in any way - for - * example, if it is missing the GROWL_APP_NAME key, the result - * will be missing it too. Use +[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:] or - * +[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:restrictToKeys:] to try - * to fill in missing keys. - * - * This method was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -+ (NSDictionary *) registrationDictionaryFromDelegate; - -/*! @method registrationDictionaryFromBundle: - * @abstract Looks in a bundle for a registration dictionary. - * @discussion This method looks in a bundle for an auto-discoverable - * registration dictionary file using -[NSBundle - * pathForResource:ofType:]. If it finds one, it loads the file using - * +[NSDictionary dictionaryWithContentsOfFile:] and returns the - * result. - * - * If you pass nil as the bundle, the main bundle is examined. - * - * This method does not attempt to clean up the dictionary in any way - for - * example, if it is missing the GROWL_APP_NAME key, the result - * will be missing it too. Use +[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:] or - * +[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:restrictToKeys:] to try - * to fill in missing keys. - * - * This method was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -+ (NSDictionary *) registrationDictionaryFromBundle:(NSBundle *)bundle; - -/*! @method bestRegistrationDictionary - * @abstract Obtains a registration dictionary, filled out to the best of - * GrowlApplicationBridge's knowledge. - * @discussion This method creates a registration dictionary as best - * GrowlApplicationBridge knows how. - * - * First, GrowlApplicationBridge contacts the Growl delegate (if there is - * one) and gets the registration dictionary from that. If no such dictionary - * was obtained, GrowlApplicationBridge looks in your application's main - * bundle for an auto-discoverable registration dictionary file. If that - * doesn't exist either, this method returns nil. - * - * Second, GrowlApplicationBridge calls - * +registrationDictionaryByFillingInDictionary: with whatever - * dictionary was obtained. The result of that method is the result of this - * method. - * - * GrowlApplicationBridge uses this method when you call - * +setGrowlDelegate:, or when you call - * +registerWithDictionary: with nil. - * - * This method was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -+ (NSDictionary *) bestRegistrationDictionary; - -#pragma mark - - -/*! @method registrationDictionaryByFillingInDictionary: - * @abstract Tries to fill in missing keys in a registration dictionary. - * @discussion This method examines the passed-in dictionary for missing keys, - * and tries to work out correct values for them. As of 0.7, it uses: - * - * Key Value - * --- ----- - * GROWL_APP_NAME CFBundleExecutableName - * GROWL_APP_ICON The icon of the application. - * GROWL_APP_LOCATION The location of the application. - * GROWL_NOTIFICATIONS_DEFAULT GROWL_NOTIFICATIONS_ALL - * - * Keys are only filled in if missing; if a key is present in the dictionary, - * its value will not be changed. - * - * This method was introduced in Growl.framework 0.7. - * @param regDict The dictionary to fill in. - * @result The dictionary with the keys filled in. This is an autoreleased - * copy of regDict. - */ -+ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict; -/*! @method registrationDictionaryByFillingInDictionary:restrictToKeys: - * @abstract Tries to fill in missing keys in a registration dictionary. - * @discussion This method examines the passed-in dictionary for missing keys, - * and tries to work out correct values for them. As of 0.7, it uses: - * - * Key Value - * --- ----- - * GROWL_APP_NAME CFBundleExecutableName - * GROWL_APP_ICON The icon of the application. - * GROWL_APP_LOCATION The location of the application. - * GROWL_NOTIFICATIONS_DEFAULT GROWL_NOTIFICATIONS_ALL - * - * Only those keys that are listed in keys will be filled in. - * Other missing keys are ignored. Also, keys are only filled in if missing; - * if a key is present in the dictionary, its value will not be changed. - * - * This method was introduced in Growl.framework 0.7. - * @param regDict The dictionary to fill in. - * @param keys The keys to fill in. If nil, any missing keys are filled in. - * @result The dictionary with the keys filled in. This is an autoreleased - * copy of regDict. - */ -+ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict restrictToKeys:(NSSet *)keys; - -/*! @brief Tries to fill in missing keys in a notification dictionary. - * @param notifDict The dictionary to fill in. - * @return The dictionary with the keys filled in. This will be a separate instance from \a notifDict. - * @discussion This function examines the \a notifDict for missing keys, and - * tries to get them from the last known registration dictionary. As of 1.1, - * the keys that it will look for are: - * - * \li GROWL_APP_NAME - * \li GROWL_APP_ICON - * - * @since Growl.framework 1.1 - */ -+ (NSDictionary *) notificationDictionaryByFillingInDictionary:(NSDictionary *)regDict; - -+ (NSDictionary *) frameworkInfoDictionary; -@end - -//------------------------------------------------------------------------------ -#pragma mark - - -/*! - * @protocol GrowlApplicationBridgeDelegate - * @abstract Required protocol for the Growl delegate. - * @discussion The methods in this protocol are required and are called - * automatically as needed by GrowlApplicationBridge. See - * +[GrowlApplicationBridge setGrowlDelegate:]. - * See also GrowlApplicationBridgeDelegate_InformalProtocol. - */ - -@protocol GrowlApplicationBridgeDelegate - -// -registrationDictionaryForGrowl has moved to the informal protocol as of 0.7. - -@end - -//------------------------------------------------------------------------------ -#pragma mark - - -/*! - * @category NSObject(GrowlApplicationBridgeDelegate_InformalProtocol) - * @abstract Methods which may be optionally implemented by the GrowlDelegate. - * @discussion The methods in this informal protocol will only be called if implemented by the delegate. - */ -@interface NSObject (GrowlApplicationBridgeDelegate_InformalProtocol) - -/*! - * @method registrationDictionaryForGrowl - * @abstract Return the dictionary used to register this application with Growl. - * @discussion The returned dictionary gives Growl the complete list of - * notifications this application will ever send, and it also specifies which - * notifications should be enabled by default. Each is specified by an array - * of NSString objects. - * - * For most applications, these two arrays can be the same (if all sent - * notifications should be displayed by default). - * - * The NSString objects of these arrays will correspond to the - * notificationName: parameter passed in - * +[GrowlApplicationBridge - * notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:] calls. - * - * The dictionary should have the required key object pairs: - * key: GROWL_NOTIFICATIONS_ALL object: NSArray of NSString objects - * key: GROWL_NOTIFICATIONS_DEFAULT object: NSArray of NSString objects - * - * The dictionary may have the following key object pairs: - * key: GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES object: NSDictionary of key: notification name object: human-readable notification name - * - * You do not need to implement this method if you have an auto-discoverable - * plist file in your app bundle. (XXX refer to more information on that) - * - * @result The NSDictionary to use for registration. - */ -- (NSDictionary *) registrationDictionaryForGrowl; - -/*! - * @method applicationNameForGrowl - * @abstract Return the name of this application which will be used for Growl bookkeeping. - * @discussion This name is used both internally and in the Growl preferences. - * - * This should remain stable between different versions and incarnations of - * your application. - * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and - * "SurfWriter Lite" are not. - * - * You do not need to implement this method if you are providing the - * application name elsewhere, meaning in an auto-discoverable plist file in - * your app bundle (XXX refer to more information on that) or in the result - * of -registrationDictionaryForGrowl. - * - * @result The name of the application using Growl. - */ -- (NSString *) applicationNameForGrowl; - -/*! - * @method applicationIconForGrowl - * @abstract Return the NSImage to treat as the application icon. - * @discussion The delegate may optionally return an NSImage - * object to use as the application icon. If this method is not implemented, - * {{{-applicationIconDataForGrowl}}} is tried. If that method is not - * implemented, the application's own icon is used. Neither method is - * generally needed. - * @result The NSImage to treat as the application icon. - */ -- (NSImage *) applicationIconForGrowl; - -/*! - * @method applicationIconDataForGrowl - * @abstract Return the NSData to treat as the application icon. - * @discussion The delegate may optionally return an NSData - * object to use as the application icon; if this is not implemented, the - * application's own icon is used. This is not generally needed. - * @result The NSData to treat as the application icon. - * @deprecated In version 1.1, in favor of {{{-applicationIconForGrowl}}}. - */ -- (NSData *) applicationIconDataForGrowl; - -/*! - * @method growlIsReady - * @abstract Informs the delegate that Growl has launched. - * @discussion Informs the delegate that Growl (specifically, the - * GrowlHelperApp) was launched successfully. The application can take actions - * with the knowledge that Growl is installed and functional. - */ -- (void) growlIsReady; - -/*! - * @method growlNotificationWasClicked: - * @abstract Informs the delegate that a Growl notification was clicked. - * @discussion Informs the delegate that a Growl notification was clicked. It - * is only sent for notifications sent with a non-nil - * clickContext, so if you want to receive a message when a notification is - * clicked, clickContext must not be nil when calling - * +[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]. - * @param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]. - */ -- (void) growlNotificationWasClicked:(id)clickContext; - -/*! - * @method growlNotificationTimedOut: - * @abstract Informs the delegate that a Growl notification timed out. - * @discussion Informs the delegate that a Growl notification timed out. It - * is only sent for notifications sent with a non-nil - * clickContext, so if you want to receive a message when a notification is - * clicked, clickContext must not be nil when calling - * +[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]. - * @param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]. - */ -- (void) growlNotificationTimedOut:(id)clickContext; - -@end - -#pragma mark - -/*! - * @category NSObject(GrowlApplicationBridgeDelegate_Installation_InformalProtocol) - * @abstract Methods which may be optionally implemented by the Growl delegate when used with Growl-WithInstaller.framework. - * @discussion The methods in this informal protocol will only be called if - * implemented by the delegate. They allow greater control of the information - * presented to the user when installing or upgrading Growl from within your - * application when using Growl-WithInstaller.framework. - */ -@interface NSObject (GrowlApplicationBridgeDelegate_Installation_InformalProtocol) - -/*! - * @method growlInstallationWindowTitle - * @abstract Return the title of the installation window. - * @discussion If not implemented, Growl will use a default, localized title. - * @result An NSString object to use as the title. - */ -- (NSString *)growlInstallationWindowTitle; - -/*! - * @method growlUpdateWindowTitle - * @abstract Return the title of the upgrade window. - * @discussion If not implemented, Growl will use a default, localized title. - * @result An NSString object to use as the title. - */ -- (NSString *)growlUpdateWindowTitle; - -/*! - * @method growlInstallationInformation - * @abstract Return the information to display when installing. - * @discussion This information may be as long or short as desired (the window - * will be sized to fit it). It will be displayed to the user as an - * explanation of what Growl is and what it can do in your application. It - * should probably note that no download is required to install. - * - * If this is not implemented, Growl will use a default, localized explanation. - * @result An NSAttributedString object to display. - */ -- (NSAttributedString *)growlInstallationInformation; - -/*! - * @method growlUpdateInformation - * @abstract Return the information to display when upgrading. - * @discussion This information may be as long or short as desired (the window - * will be sized to fit it). It will be displayed to the user as an - * explanation that an updated version of Growl is included in your - * application and no download is required. - * - * If this is not implemented, Growl will use a default, localized explanation. - * @result An NSAttributedString object to display. - */ -- (NSAttributedString *)growlUpdateInformation; - -@end - -//private -@interface GrowlApplicationBridge (GrowlInstallationPrompt_private) -+ (void) _userChoseNotToInstallGrowl; -@end - -#endif /* __GrowlApplicationBridge_h__ */ diff --git a/macosx/Growl.framework/Versions/A/Headers/GrowlDefines.h b/macosx/Growl.framework/Versions/A/Headers/GrowlDefines.h deleted file mode 100644 index 2b971cfe5..000000000 --- a/macosx/Growl.framework/Versions/A/Headers/GrowlDefines.h +++ /dev/null @@ -1,348 +0,0 @@ -// -// GrowlDefines.h -// - -#ifndef _GROWLDEFINES_H -#define _GROWLDEFINES_H - -#ifdef __OBJC__ -#define XSTR(x) (@x) -#define STRING_TYPE NSString * -#else -#define XSTR CFSTR -#define STRING_TYPE CFStringRef -#endif - -/*! @header GrowlDefines.h - * @abstract Defines all the notification keys. - * @discussion Defines all the keys used for registration with Growl and for - * Growl notifications. - * - * Most applications should use the functions or methods of Growl.framework - * instead of posting notifications such as those described here. - * @updated 2004-01-25 - */ - -// UserInfo Keys for Registration -#pragma mark UserInfo Keys for Registration - -/*! @group Registration userInfo keys */ -/* @abstract Keys for the userInfo dictionary of a GROWL_APP_REGISTRATION distributed notification. - * @discussion The values of these keys describe the application and the - * notifications it may post. - * - * Your application must register with Growl before it can post Growl - * notifications (and have them not be ignored). However, as of Growl 0.6, - * posting GROWL_APP_REGISTRATION notifications directly is no longer the - * preferred way to register your application. Your application should instead - * use Growl.framework's delegate system. - * See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for - * more information. - */ - -/*! @defined GROWL_APP_NAME - * @abstract The name of your application. - * @discussion The name of your application. This should remain stable between - * different versions and incarnations of your application. - * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and - * "SurfWriter Lite" are not. - */ -#define GROWL_APP_NAME XSTR("ApplicationName") -/*! @defined GROWL_APP_ID - * @abstract The bundle identifier of your application. - * @discussion The bundle identifier of your application. This key should - * be unique for your application while there may be several applications - * with the same GROWL_APP_NAME. - * This key is optional. - */ -#define GROWL_APP_ID XSTR("ApplicationId") -/*! @defined GROWL_APP_ICON - * @abstract The image data for your application's icon. - * @discussion Image data representing your application's icon. This may be - * superimposed on a notification icon as a badge, used as the notification - * icon when a notification-specific icon is not supplied, or ignored - * altogether, depending on the display. Must be in a format supported by - * NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_APP_ICON XSTR("ApplicationIcon") -/*! @defined GROWL_NOTIFICATIONS_DEFAULT - * @abstract The array of notifications to turn on by default. - * @discussion These are the names of the notifications that should be enabled - * by default when your application registers for the first time. If your - * application reregisters, Growl will look here for any new notification - * names found in GROWL_NOTIFICATIONS_ALL, but ignore any others. - */ -#define GROWL_NOTIFICATIONS_DEFAULT XSTR("DefaultNotifications") -/*! @defined GROWL_NOTIFICATIONS_ALL - * @abstract The array of all notifications your application can send. - * @discussion These are the names of all of the notifications that your - * application may post. See GROWL_NOTIFICATION_NAME for a discussion of good - * notification names. - */ -#define GROWL_NOTIFICATIONS_ALL XSTR("AllNotifications") -/*! @defined GROWL_NOTIFICATIONS_HUMAN_READABLE_DESCRIPTIONS - * @abstract A dictionary of human-readable names for your notifications. - * @discussion By default, the Growl UI will display notifications by the names given in GROWL_NOTIFICATIONS_ALL - * which correspond to the GROWL_NOTIFICATION_NAME. This dictionary specifies the human-readable name to display. - * The keys of the dictionary are GROWL_NOTIFICATION_NAME strings; the objects are the human-readable versions. - * For any GROWL_NOTIFICATION_NAME not specific in this dictionary, the GROWL_NOTIFICATION_NAME will be displayed. - * - * This key is optional. - */ -#define GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES XSTR("HumanReadableNames") -/*! @defined GROWL_NOTIFICATIONS_DESCRIPTIONS -* @abstract A dictionary of descriptions of _when_ each notification occurs -* @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are -* descriptions of _when_ each notification occurs, such as "You received a new mail message" or -* "A file finished downloading". -* -* This key is optional. -*/ -#define GROWL_NOTIFICATIONS_DESCRIPTIONS XSTR("NotificationDescriptions") - -/*! @defined GROWL_TICKET_VERSION - * @abstract The version of your registration ticket. - * @discussion Include this key in a ticket plist file that you put in your - * application bundle for auto-discovery. The current ticket version is 1. - */ -#define GROWL_TICKET_VERSION XSTR("TicketVersion") -// UserInfo Keys for Notifications -#pragma mark UserInfo Keys for Notifications - -/*! @group Notification userInfo keys */ -/* @abstract Keys for the userInfo dictionary of a GROWL_NOTIFICATION distributed notification. - * @discussion The values of these keys describe the content of a Growl - * notification. - * - * Not all of these keys are supported by all displays. Only the name, title, - * and description of a notification are universal. Most of the built-in - * displays do support all of these keys, and most other visual displays - * probably will also. But, as of 0.6, the Log, MailMe, and Speech displays - * support only textual data. - */ - -/*! @defined GROWL_NOTIFICATION_NAME - * @abstract The name of the notification. - * @discussion The name of the notification. Note that if you do not define - * GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES when registering your ticket originally this name - * will the one displayed within the Growl preference pane and should be human-readable. - */ -#define GROWL_NOTIFICATION_NAME XSTR("NotificationName") -/*! @defined GROWL_NOTIFICATION_TITLE - * @abstract The title to display in the notification. - * @discussion The title of the notification. Should be very brief. - * The title usually says what happened, e.g. "Download complete". - */ -#define GROWL_NOTIFICATION_TITLE XSTR("NotificationTitle") -/*! @defined GROWL_NOTIFICATION_DESCRIPTION - * @abstract The description to display in the notification. - * @discussion The description should be longer and more verbose than the title. - * The description usually tells the subject of the action, - * e.g. "Growl-0.6.dmg downloaded in 5.02 minutes". - */ -#define GROWL_NOTIFICATION_DESCRIPTION XSTR("NotificationDescription") -/*! @defined GROWL_NOTIFICATION_ICON - * @discussion Image data for the notification icon. Must be in a format - * supported by NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_ICON XSTR("NotificationIcon") -/*! @defined GROWL_NOTIFICATION_APP_ICON - * @discussion Image data for the application icon, in case GROWL_APP_ICON does - * not apply for some reason. Must be in a format supported by NSImage, such - * as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_APP_ICON XSTR("NotificationAppIcon") -/*! @defined GROWL_NOTIFICATION_PRIORITY - * @discussion The priority of the notification as an integer number from - * -2 to +2 (+2 being highest). - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_PRIORITY XSTR("NotificationPriority") -/*! @defined GROWL_NOTIFICATION_STICKY - * @discussion A Boolean number controlling whether the notification is sticky. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_STICKY XSTR("NotificationSticky") -/*! @defined GROWL_NOTIFICATION_CLICK_CONTEXT - * @abstract Identifies which notification was clicked. - * @discussion An identifier for the notification for clicking purposes. - * - * This will be passed back to the application when the notification is - * clicked. It must be plist-encodable (a data, dictionary, array, number, or - * string object), and it should be unique for each notification you post. - * A good click context would be a UUID string returned by NSProcessInfo or - * CFUUID. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_CLICK_CONTEXT XSTR("NotificationClickContext") - -/*! @defined GROWL_DISPLAY_PLUGIN - * @discussion The name of a display plugin which should be used for this notification. - * Optional. If this key is not set or the specified display plugin does not - * exist, the display plugin stored in the application ticket is used. This key - * allows applications to use different default display plugins for their - * notifications. The user can still override those settings in the preference - * pane. - */ -#define GROWL_DISPLAY_PLUGIN XSTR("NotificationDisplayPlugin") - -/*! @defined GROWL_NOTIFICATION_IDENTIFIER - * @abstract An identifier for the notification for coalescing purposes. - * Notifications with the same identifier fall into the same class; only - * the last notification of a class is displayed on the screen. If a - * notification of the same class is currently being displayed, it is - * replaced by this notification. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_IDENTIFIER XSTR("GrowlNotificationIdentifier") - -/*! @defined GROWL_APP_PID - * @abstract The process identifier of the process which sends this - * notification. If this field is set, the application will only receive - * clicked and timed out notifications which originate from this process. - * - * Optional. - */ -#define GROWL_APP_PID XSTR("ApplicationPID") - -/*! @defined GROWL_NOTIFICATION_PROGRESS -* @abstract If this key is set, it should contain a double value wrapped -* in a NSNumber which describes some sort of progress (from 0.0 to 100.0). -* If this is key is not set, no progress bar is shown. -* -* Optional. Not supported by all display plugins. -*/ -#define GROWL_NOTIFICATION_PROGRESS XSTR("NotificationProgress") - -// Notifications -#pragma mark Notifications - -/*! @group Notification names */ -/* @abstract Names of distributed notifications used by Growl. - * @discussion These are notifications used by applications (directly or - * indirectly) to interact with Growl, and by Growl for interaction between - * its components. - * - * Most of these should no longer be used in Growl 0.6 and later, in favor of - * Growl.framework's GrowlApplicationBridge APIs. - */ - -/*! @defined GROWL_APP_REGISTRATION - * @abstract The distributed notification for registering your application. - * @discussion This is the name of the distributed notification that can be - * used to register applications with Growl. - * - * The userInfo dictionary for this notification can contain these keys: - *
    - *
  • GROWL_APP_NAME
  • - *
  • GROWL_APP_ICON
  • - *
  • GROWL_NOTIFICATIONS_ALL
  • - *
  • GROWL_NOTIFICATIONS_DEFAULT
  • - *
- * - * No longer recommended as of Growl 0.6. An alternate method of registering - * is to use Growl.framework's delegate system. - * See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for - * more information. - */ -#define GROWL_APP_REGISTRATION XSTR("GrowlApplicationRegistrationNotification") -/*! @defined GROWL_APP_REGISTRATION_CONF - * @abstract The distributed notification for confirming registration. - * @discussion The name of the distributed notification sent to confirm the - * registration. Used by the Growl preference pane. Your application probably - * does not need to use this notification. - */ -#define GROWL_APP_REGISTRATION_CONF XSTR("GrowlApplicationRegistrationConfirmationNotification") -/*! @defined GROWL_NOTIFICATION - * @abstract The distributed notification for Growl notifications. - * @discussion This is what it all comes down to. This is the name of the - * distributed notification that your application posts to actually send a - * Growl notification. - * - * The userInfo dictionary for this notification can contain these keys: - *
    - *
  • GROWL_NOTIFICATION_NAME (required)
  • - *
  • GROWL_NOTIFICATION_TITLE (required)
  • - *
  • GROWL_NOTIFICATION_DESCRIPTION (required)
  • - *
  • GROWL_NOTIFICATION_ICON
  • - *
  • GROWL_NOTIFICATION_APP_ICON
  • - *
  • GROWL_NOTIFICATION_PRIORITY
  • - *
  • GROWL_NOTIFICATION_STICKY
  • - *
  • GROWL_NOTIFICATION_CLICK_CONTEXT
  • - *
  • GROWL_APP_NAME (required)
  • - *
- * - * No longer recommended as of Growl 0.6. Three alternate methods of posting - * notifications are +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:], - * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext, and - * Growl_PostNotification. - */ -#define GROWL_NOTIFICATION XSTR("GrowlNotification") -/*! @defined GROWL_SHUTDOWN -* @abstract The distributed notification name that tells Growl to shutdown. -* @discussion The Growl preference pane posts this notification when the -* "Stop Growl" button is clicked. -*/ -#define GROWL_SHUTDOWN XSTR("GrowlShutdown") -/*! @defined GROWL_PING - * @abstract A distributed notification to check whether Growl is running. - * @discussion This is used by the Growl preference pane. If it receives a - * GROWL_PONG, the preference pane takes this to mean that Growl is running. - */ -#define GROWL_PING XSTR("Honey, Mind Taking Out The Trash") -/*! @defined GROWL_PONG - * @abstract The distributed notification sent in reply to GROWL_PING. - * @discussion GrowlHelperApp posts this in reply to GROWL_PING. - */ -#define GROWL_PONG XSTR("What Do You Want From Me, Woman") -/*! @defined GROWL_IS_READY - * @abstract The distributed notification sent when Growl starts up. - * @discussion GrowlHelperApp posts this when it has begin listening on all of - * its sources for new notifications. GrowlApplicationBridge (in - * Growl.framework), upon receiving this notification, reregisters using the - * registration dictionary supplied by its delegate. - */ -#define GROWL_IS_READY XSTR("Lend Me Some Sugar; I Am Your Neighbor!") -/*! @defined GROWL_NOTIFICATION_CLICKED - * @abstract The distributed notification sent when a supported notification is clicked. - * @discussion When a Growl notification with a click context is clicked on by - * the user, Growl posts this distributed notification. - * The GrowlApplicationBridge responds to this notification by calling a - * callback in its delegate. - */ -#define GROWL_NOTIFICATION_CLICKED XSTR("GrowlClicked!") -#define GROWL_NOTIFICATION_TIMED_OUT XSTR("GrowlTimedOut!") - -/*! @group Other symbols */ -/* Symbols which don't fit into any of the other categories. */ - -/*! @defined GROWL_KEY_CLICKED_CONTEXT - * @abstract Used internally as the key for the clickedContext passed over DNC. - * @discussion This key is used in GROWL_NOTIFICATION_CLICKED, and contains the - * click context that was supplied in the original notification. - */ -#define GROWL_KEY_CLICKED_CONTEXT XSTR("ClickedContext") -/*! @defined GROWL_REG_DICT_EXTENSION - * @abstract The filename extension for registration dictionaries. - * @discussion The GrowlApplicationBridge in Growl.framework registers with - * Growl by creating a file with the extension of .(GROWL_REG_DICT_EXTENSION) - * and opening it in the GrowlHelperApp. This happens whether or not Growl is - * running; if it was stopped, it quits immediately without listening for - * notifications. - */ -#define GROWL_REG_DICT_EXTENSION XSTR("growlRegDict") - - -#define GROWL_POSITION_PREFERENCE_KEY @"GrowlSelectedPosition" - -#endif //ndef _GROWLDEFINES_H diff --git a/macosx/Growl.framework/Versions/A/Resources/Info.plist b/macosx/Growl.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 855072304..000000000 --- a/macosx/Growl.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - Growl - CFBundleIdentifier - com.growl.growlframework - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.2.0b1 - CFBundleSignature - GRRR - CFBundleVersion - 1.2.0b1 - NSPrincipalClass - GrowlApplicationBridge - - diff --git a/macosx/Growl.framework/Versions/Current b/macosx/Growl.framework/Versions/Current deleted file mode 120000 index 8c7e5a667..000000000 --- a/macosx/Growl.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file