From adb6e4ba3c8a0e85662aea04fc13860f4d6ae021 Mon Sep 17 00:00:00 2001 From: Hylke Bons Date: Sun, 29 May 2011 19:57:26 +0100 Subject: [PATCH] mac: bundle Growl framework --- SparkleShare/Mac/Growl.framework/Growl | 1 + SparkleShare/Mac/Growl.framework/Headers | 1 + SparkleShare/Mac/Growl.framework/Resources | 1 + .../Mac/Growl.framework/Versions/A/Growl | Bin 0 -> 259708 bytes .../Versions/A/Headers/Growl.h | 6 + .../A/Headers/GrowlApplicationBridge-Carbon.h | 780 ++++++++++++++++++ .../A/Headers/GrowlApplicationBridge.h | 575 +++++++++++++ .../Versions/A/Headers/GrowlDefines.h | 348 ++++++++ .../Versions/A/Resources/Info.plist | 40 + .../Mac/Growl.framework/Versions/Current | 1 + 10 files changed, 1753 insertions(+) create mode 120000 SparkleShare/Mac/Growl.framework/Growl create mode 120000 SparkleShare/Mac/Growl.framework/Headers create mode 120000 SparkleShare/Mac/Growl.framework/Resources create mode 100755 SparkleShare/Mac/Growl.framework/Versions/A/Growl create mode 100644 SparkleShare/Mac/Growl.framework/Versions/A/Headers/Growl.h create mode 100644 SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h create mode 100644 SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h create mode 100644 SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlDefines.h create mode 100644 SparkleShare/Mac/Growl.framework/Versions/A/Resources/Info.plist create mode 120000 SparkleShare/Mac/Growl.framework/Versions/Current diff --git a/SparkleShare/Mac/Growl.framework/Growl b/SparkleShare/Mac/Growl.framework/Growl new file mode 120000 index 00000000..85956e2d --- /dev/null +++ b/SparkleShare/Mac/Growl.framework/Growl @@ -0,0 +1 @@ +Versions/Current/Growl \ No newline at end of file diff --git a/SparkleShare/Mac/Growl.framework/Headers b/SparkleShare/Mac/Growl.framework/Headers new file mode 120000 index 00000000..a177d2a6 --- /dev/null +++ b/SparkleShare/Mac/Growl.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/SparkleShare/Mac/Growl.framework/Resources b/SparkleShare/Mac/Growl.framework/Resources new file mode 120000 index 00000000..953ee36f --- /dev/null +++ b/SparkleShare/Mac/Growl.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/SparkleShare/Mac/Growl.framework/Versions/A/Growl b/SparkleShare/Mac/Growl.framework/Versions/A/Growl new file mode 100755 index 0000000000000000000000000000000000000000..f1f19445045be29dbd44491a37c53985786a6575 GIT binary patch literal 259708 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[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 literal 0 HcmV?d00001 diff --git a/SparkleShare/Mac/Growl.framework/Versions/A/Headers/Growl.h b/SparkleShare/Mac/Growl.framework/Versions/A/Headers/Growl.h new file mode 100644 index 00000000..e2a44255 --- /dev/null +++ b/SparkleShare/Mac/Growl.framework/Versions/A/Headers/Growl.h @@ -0,0 +1,6 @@ +#include "GrowlDefines.h" + +#ifdef __OBJC__ +# include "GrowlApplicationBridge.h" +#endif +#include "GrowlApplicationBridge-Carbon.h" diff --git a/SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h b/SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h new file mode 100644 index 00000000..e7213dbe --- /dev/null +++ b/SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h @@ -0,0 +1,780 @@ +// +// GrowlApplicationBridge-Carbon.h +// Growl +// +// Created by Peter Hosey 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/SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h b/SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h new file mode 100644 index 00000000..1e39f8d6 --- /dev/null +++ b/SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h @@ -0,0 +1,575 @@ +// +// 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 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/SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlDefines.h b/SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlDefines.h new file mode 100644 index 00000000..2b971cfe --- /dev/null +++ b/SparkleShare/Mac/Growl.framework/Versions/A/Headers/GrowlDefines.h @@ -0,0 +1,348 @@ +// +// 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/SparkleShare/Mac/Growl.framework/Versions/A/Resources/Info.plist b/SparkleShare/Mac/Growl.framework/Versions/A/Resources/Info.plist new file mode 100644 index 00000000..ed723599 --- /dev/null +++ b/SparkleShare/Mac/Growl.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,40 @@ + + + + + BuildMachineOSBuild + 10J869 + CFBundleDevelopmentRegion + English + CFBundleExecutable + Growl + CFBundleIdentifier + com.growl.growlframework + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.2.2 + CFBundleSignature + GRRR + CFBundleVersion + 1.2.2 + DTCompiler + 4.0 + DTPlatformBuild + 10M2518 + DTPlatformVersion + PG + DTSDKBuild + 9L31a + DTSDKName + macosx10.5 + DTXcode + 0400 + DTXcodeBuild + 10M2518 + NSPrincipalClass + GrowlApplicationBridge + + diff --git a/SparkleShare/Mac/Growl.framework/Versions/Current b/SparkleShare/Mac/Growl.framework/Versions/Current new file mode 120000 index 00000000..8c7e5a66 --- /dev/null +++ b/SparkleShare/Mac/Growl.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file