From b12a6116f76e9d2fa29f61df19d5f67aff4dc153 Mon Sep 17 00:00:00 2001 From: Mitchell Livingston Date: Sun, 19 Jul 2009 15:22:24 +0000 Subject: [PATCH] remove current Growl... --- macosx/Growl.framework/Growl | 1 - macosx/Growl.framework/Headers | 1 - macosx/Growl.framework/Resources | 1 - macosx/Growl.framework/Versions/A/Growl | Bin 134116 -> 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 c84facc511317135d99e9d52f3820f95e4d5dca1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134116 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 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 e35663f63..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"))) -#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 02a348a71..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.1.5 - CFBundleSignature - GRRR - CFBundleVersion - 1.1.5 - 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