diff --git a/src/Growl.framework/Growl b/src/Growl.framework/Growl deleted file mode 120000 index 85956e2..0000000 --- a/src/Growl.framework/Growl +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Growl \ No newline at end of file diff --git a/src/Growl.framework/Headers b/src/Growl.framework/Headers deleted file mode 120000 index a177d2a..0000000 --- a/src/Growl.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/src/Growl.framework/Resources b/src/Growl.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/src/Growl.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/src/Growl.framework/Versions/A/Growl b/src/Growl.framework/Versions/A/Growl deleted file mode 100755 index e356730..0000000 Binary files a/src/Growl.framework/Versions/A/Growl and /dev/null differ diff --git a/src/Growl.framework/Versions/A/Headers/Growl.h b/src/Growl.framework/Versions/A/Headers/Growl.h deleted file mode 100644 index 7b1a324..0000000 --- a/src/Growl.framework/Versions/A/Headers/Growl.h +++ /dev/null @@ -1,5 +0,0 @@ -#include - -#ifdef __OBJC__ -# include -#endif diff --git a/src/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h b/src/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h deleted file mode 100644 index 3639757..0000000 --- a/src/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h +++ /dev/null @@ -1,567 +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 - -//Forward declarations -@protocol GrowlApplicationBridgeDelegate; - -//------------------------------------------------------------------------------ -#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 this method will forever return YES. - */ -+ (BOOL) isGrowlInstalled __attribute__((deprecated)); - -/*! - * @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; - - -/*! - * @method isMistEnabled - * @abstract Gives the caller a fairly good indication of whether or not built-in notifications(Mist) will be used. - * @discussion since this call makes use of isGrowlRunning it is entirely possible for this value to change between call and - * executing a notification dispatch - * @result Returns YES if Growl isn't reachable and the developer has not opted-out of - * Mist and the user hasn't set the global mist enable key to false. - */ -+ (BOOL)isMistEnabled; - -/*! - * @method setShouldUseBuiltInNotifications - * @abstract opt-out mechanism for the mist notification style in the event growl can't be reached. - * @discussion if growl is unavailable due to not being installed or as a result of being turned off then - * this option can enable/disable a built-in fire and forget display style - * @param should Specifies whether or not the developer wants to opt-in (default) or opt out - * of the built-in Mist style in the event Growl is unreachable. - */ -+ (void)setShouldUseBuiltInNotifications:(BOOL)should; - -/*! - * @method shouldUseBuiltInNotifications - * @abstract returns the current opt-in state of the framework's use of the Mist display style. - * @result Returns NO if the developer opt-ed out of Mist, the default value is YES. - */ -+ (BOOL)shouldUseBuiltInNotifications; - -#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:(id)inDelegate; - -/*! - * @method growlDelegate - * @abstract Return the object responsible for providing and receiving Growl information. - * @discussion See setGrowlDelegate: for details. - * @result The Growl delegate. - */ -+ (id) 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_DATA The data of 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_DATA The data of 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_DATA - * - * @since Growl.framework 1.1 - */ -+ (NSDictionary *) notificationDictionaryByFillingInDictionary:(NSDictionary *)regDict; - -+ (NSDictionary *) frameworkInfoDictionary; - -#pragma mark - - -/*! - *@method growlURLSchemeAvailable - *@abstract Lets the app know whether growl:// is registered on the system, used for certain methods below this - *@return Returns whether growl:// is registered on the system - *@discussion Methods such as openGrowlPreferences rely on the growl:// URL scheme to function - * Further, this method can provide a check on whether Growl is installed, - * however, the framework will not be relying on this method for choosing when/how to notify, - * and it is not recommended that the app rely on it for other than whether to use growl:// methods - *@since Growl.framework 1.4 - */ -+ (BOOL) isGrowlURLSchemeAvailable; - -/*! - * @method openGrowlPreferences: - * @abstract Open Growl preferences, optionally to this app's settings, growl:// method - * @param showApp Whether to show the application's settings, otherwise just opens to the last position - * @return Return's whether opening the URL was succesfull or not. - * @discussion Will launch if Growl is installed, but not running, and open the preferences window - * Uses growl:// URL scheme - * @since Growl.framework 1.4 - */ -+ (BOOL) openGrowlPreferences:(BOOL)showApp; - -@end - -//------------------------------------------------------------------------------ -#pragma mark - - -/*! - * @protocol GrowlApplicationBridgeDelegate - * @abstract Required protocol for the Growl delegate. - * @discussion The methods in this protocol are optional and are called - * automatically as needed by GrowlApplicationBridge. See - * +[GrowlApplicationBridge setGrowlDelegate:]. - * See also GrowlApplicationBridgeDelegate_InformalProtocol. - */ - -@protocol GrowlApplicationBridgeDelegate - -@optional - -/*! - * @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; - - -/*! - * @method hasNetworkClientEntitlement - * @abstract Used only in sandboxed situations since we don't know whether the app has com.apple.security.network.client entitlement - * @discussion GrowlDelegate calls to find out if we have the com.apple.security.network.client entitlement, - * since we can't find this out without hitting the sandbox. We only call it if we detect that the application is sandboxed. - */ -- (BOOL) hasNetworkClientEntitlement; - -@end - -#pragma mark - - -#endif /* __GrowlApplicationBridge_h__ */ diff --git a/src/Growl.framework/Versions/A/Headers/GrowlDefines.h b/src/Growl.framework/Versions/A/Headers/GrowlDefines.h deleted file mode 100644 index 0a196f1..0000000 --- a/src/Growl.framework/Versions/A/Headers/GrowlDefines.h +++ /dev/null @@ -1,386 +0,0 @@ -// -// GrowlDefines.h -// - -#ifndef _GROWLDEFINES_H -#define _GROWLDEFINES_H - -#ifdef __OBJC__ -#define XSTR(x) (@x) -#else -#define XSTR CFSTR -#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_DATA - * @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_DATA 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_NOTIFICATIONS_ICONS - * @abstract A dictionary of icons for each notification - * @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are - * icons for each notification, for GNTP spec - * - * This key is optional. - */ -#define GROWL_NOTIFICATIONS_ICONS XSTR("NotificationIcons") - -/*! @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. Image data 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_DATA 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. Image data 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_DATA 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_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") - -/*! @defined GROWL_NOTIFICATION_ALREADY_SHOWN - * @abstract If this key is set, it should contain a bool value wrapped - * in a NSNumber which describes whether the notification has - * already been displayed, for instance by built in Notification - * Center support. This value can be used to allow display - * plugins to skip a notification, while still allowing Growl - * actions to run on them. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_ALREADY_SHOWN XSTR("AlreadyShown") - - -// 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_DATA
  • - *
  • 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_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_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX - * @abstract Part of the name of 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 a distributed notification whose name is in the format: - * [NSString stringWithFormat:@"%@-%d-%@", appName, pid, GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX] - * The GrowlApplicationBridge responds to this notification by calling a callback in its delegate. - */ -#define GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX XSTR("GrowlClicked!") - -/*! @defined GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX - * @abstract Part of the name of the distributed notification sent when a supported notification times out without being clicked. - * @discussion When a Growl notification with a click context times out, Growl posts a distributed notification - * whose name is in the format: - * [NSString stringWithFormat:@"%@-%d-%@", appName, pid, GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX] - * The GrowlApplicationBridge responds to this notification by calling a callback in its delegate. - * NOTE: The user may have actually clicked the 'close' button; this triggers an *immediate* time-out of the notification. - */ -#define GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX XSTR("GrowlTimedOut!") - -/*! @defined GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_ON - * @abstract The distributed notification sent when the Notification Center support is toggled on in Growl 2.0 - * @discussion When the user enables Notification Center support in Growl 2.0, this notification is sent - * to inform all running apps that they should now speak to Notification Center directly. - */ -#define GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_ON XSTR("GrowlNotificationCenterOn!") - -/*! @defined GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_OFF - * @abstract The distributed notification sent when the Notification Center support is toggled off in Growl 2.0 - * @discussion When the user enables Notification Center support in Growl 2.0, this notification is sent - * to inform all running apps that they should no longer speak to Notification Center directly. - */ -#define GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_OFF XSTR("GrowlNotificationCenterOff!") - -/*! @defined GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_QUERY - * @abstract The distributed notification sent by an application to query Growl 2.0's notification center support. - * @discussion When an app starts up, it will send this query to get Growl 2.0 to spit out whether notification - * center support is on or off. - */ -#define GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_QUERY XSTR("GrowlNotificationCenterYN?") - - -/*! @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" - -#define GROWL_PLUGIN_CONFIG_ID XSTR("GrowlPluginConfigurationID") - -#endif //ndef _GROWLDEFINES_H diff --git a/src/Growl.framework/Versions/A/Resources/Info.plist b/src/Growl.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 6a90f41..0000000 --- a/src/Growl.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,40 +0,0 @@ - - - - - BuildMachineOSBuild - 12C60 - CFBundleDevelopmentRegion - English - CFBundleExecutable - Growl - CFBundleIdentifier - com.growl.growlframework - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.0.1 - CFBundleSignature - GRRR - CFBundleVersion - 2.0.1 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 4G2008a - DTPlatformVersion - GM - DTSDKBuild - 12C37 - DTSDKName - macosx10.8 - DTXcode - 0452 - DTXcodeBuild - 4G2008a - NSPrincipalClass - GrowlApplicationBridge - - diff --git a/src/Growl.framework/Versions/A/_CodeSignature/CodeResources b/src/Growl.framework/Versions/A/_CodeSignature/CodeResources deleted file mode 100644 index 420b594..0000000 --- a/src/Growl.framework/Versions/A/_CodeSignature/CodeResources +++ /dev/null @@ -1,34 +0,0 @@ - - - - - files - - Resources/Info.plist - - VZb3f8My4te/5JwcjfvotgCXTAs= - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^version.plist$ - - - - diff --git a/src/Growl.framework/Versions/Current b/src/Growl.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/src/Growl.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/src/PSMTabBarControl.framework/Versions/A/Headers/PSMTabBarControl.h b/src/PSMTabBarControl.framework/Versions/A/Headers/PSMTabBarControl.h index 93684ef..c855263 100644 --- a/src/PSMTabBarControl.framework/Versions/A/Headers/PSMTabBarControl.h +++ b/src/PSMTabBarControl.framework/Versions/A/Headers/PSMTabBarControl.h @@ -7,117 +7,284 @@ // /* - This view provides a control interface to manage a regular NSTabView. It looks and works like the tabbed browsing interface of many popular browsers. + This view provides a control interface to manage a regular NSTabView. It looks and works like the tabbed browsing interface of many popular browsers. */ #import -#define kPSMTabBarControlHeight 22 +#define PSMTabDragDidEndNotification @ "PSMTabDragDidEndNotification" +#define PSMTabDragDidBeginNotification @ "PSMTabDragDidBeginNotification" + +#define kPSMTabBarControlHeight 22 // internal cell border -#define MARGIN_X 6 -#define MARGIN_Y 3 +#define MARGIN_X 6 +#define MARGIN_Y 3 // padding between objects -#define kPSMTabBarCellPadding 4 +#define kPSMTabBarCellPadding 4 // fixed size objects -#define kPSMMinimumTitleWidth 30 -#define kPSMTabBarIndicatorWidth 16.0 -#define kPSMTabBarIconWidth 16.0 -#define kPSMHideAnimationSteps 2.0 +#define kPSMMinimumTitleWidth 30 +#define kPSMTabBarIndicatorWidth 16.0 +#define kPSMTabBarIconWidth 16.0 +#define kPSMHideAnimationSteps 3.0 +#define kPSMObjectCounterMinWidth 20.0 +#define kPSMObjectCounterRadius 7.0 +#define kPSMTabBarControlSourceListHeight 28 + +// Value used in _currentStep to indicate that resizing operation is not in progress +#define kPSMIsNotBeingResized -1 + +// Value used in _currentStep when a resizing operation has just been started +#define kPSMStartResizeAnimation 0 @class PSMOverflowPopUpButton; @class PSMRolloverButton; @class PSMTabBarCell; +@class PSMTabBarController; @protocol PSMTabStyle; -enum { - PSMTab_SelectedMask = 1 << 1, - PSMTab_LeftIsSelectedMask = 1 << 2, - PSMTab_RightIsSelectedMask = 1 << 3, - PSMTab_PositionLeftMask = 1 << 4, - PSMTab_PositionMiddleMask = 1 << 5, - PSMTab_PositionRightMask = 1 << 6, - PSMTab_PositionSingleMask = 1 << 7 -}; - -@interface PSMTabBarControl : NSControl { - - // control basics - NSMutableArray *_cells; // the cells that draw the tabs - IBOutlet NSTabView *tabView; // the tab view being navigated - PSMOverflowPopUpButton *_overflowPopUpButton; // for too many tabs - PSMRolloverButton *_addTabButton; - - // drawing style - id style; - BOOL _canCloseOnlyTab; - BOOL _hideForSingleTab; - BOOL _showAddTabButton; - BOOL _sizeCellsToFit; - - // cell width - int _cellMinWidth; - int _cellMaxWidth; - int _cellOptimumWidth; - - // animation for hide/show - int _currentStep; - BOOL _isHidden; - BOOL _hideIndicators; - IBOutlet id partnerView; // gets resized when hide/show - BOOL _awakenedFromNib; - - // drag and drop - NSEvent *_lastMouseDownEvent; // keep this for dragging reference - BOOL _allowsDragBetweenWindows; - - // MVC help - IBOutlet id delegate; +typedef enum PSMTabBarOrientation : NSInteger { + PSMTabBarHorizontalOrientation, + PSMTabBarVerticalOrientation +} PSMTabBarOrientation; + +typedef enum PSMTabBarTearOffStyle : NSInteger { + PSMTabBarTearOffAlphaWindow, + PSMTabBarTearOffMiniwindow +} PSMTabBarTearOffStyle; + +typedef enum PSMTabStateMask : NSInteger { + PSMTab_SelectedMask = 1 << 1, + PSMTab_LeftIsSelectedMask = 1 << 2, + PSMTab_RightIsSelectedMask = 1 << 3, + PSMTab_PositionLeftMask = 1 << 4, + PSMTab_PositionMiddleMask = 1 << 5, + PSMTab_PositionRightMask = 1 << 6, + PSMTab_PositionSingleMask = 1 << 7, +} PSMTabStateMask; + +@protocol PSMTabBarControlDelegate; + +@interface PSMTabBarControl : NSControl { + + // control basics + NSMutableArray *_cells; // the cells that draw the tabs + IBOutlet NSTabView *tabView; // the tab view being navigated + PSMOverflowPopUpButton *_overflowPopUpButton; // for too many tabs + PSMRolloverButton *_addTabButton; + PSMTabBarController *_controller; + + // Spring-loading. + NSTimer *_springTimer; + NSTabViewItem *_tabViewItemWithSpring; + + // drawing style + id style; + BOOL _canCloseOnlyTab; + BOOL _disableTabClose; + BOOL _hideForSingleTab; + BOOL _showAddTabButton; + BOOL _sizeCellsToFit; + BOOL _useOverflowMenu; + BOOL _alwaysShowActiveTab; + BOOL _allowsScrubbing; + NSInteger _resizeAreaCompensation; + PSMTabBarOrientation _orientation; + BOOL _automaticallyAnimates; + NSTimer *_animationTimer; + PSMTabBarTearOffStyle _tearOffStyle; + + // behavior + BOOL _allowsBackgroundTabClosing; + BOOL _selectsTabsOnMouseDown; + + // vertical tab resizing + BOOL _allowsResizing; + BOOL _resizing; + + // cell width + NSInteger _cellMinWidth; + NSInteger _cellMaxWidth; + NSInteger _cellOptimumWidth; + + // animation for hide/show + NSInteger _currentStep; + BOOL _isHidden; + IBOutlet id partnerView; // gets resized when hide/show + BOOL _awakenedFromNib; + NSInteger _tabBarWidth; + NSTimer *_showHideAnimationTimer; + + // drag and drop + NSEvent *_lastMouseDownEvent; // keep this for dragging reference + BOOL _didDrag; + BOOL _closeClicked; + + // MVC help + IBOutlet id delegate; } -// control characteristics +#pragma mark Control Characteristics + + (NSBundle *)bundle; +- (CGFloat)availableCellWidth; +- (CGFloat)availableCellHeight; +- (NSRect)genericCellRect; +- (BOOL)isWindowActive; + +#pragma mark Style Class Registry + ++ (void)registerDefaultTabStyleClasses; ++ (void)registerTabStyleClass:(Class )aStyleClass; ++ (void)unregisterTabStyleClass:(Class )aStyleClass; ++ (NSArray *)registeredTabStyleClasses; ++ (Class )registeredClassForStyleName:(NSString *)name; -// control configuration +#pragma mark Cell Management (KVC Compliant) + +- (NSArray *)cells; +- (void)addCell:(PSMTabBarCell *)aCell; +- (void)insertCell:(PSMTabBarCell *)aCell atIndex:(NSUInteger)index; +- (void)removeCellAtIndex:(NSUInteger)index; +- (void)replaceCellAtIndex:(NSUInteger)index withCell:(PSMTabBarCell *)aCell; + +#pragma mark Control Configuration + +- (PSMTabBarOrientation)orientation; +- (void)setOrientation:(PSMTabBarOrientation)value; - (BOOL)canCloseOnlyTab; - (void)setCanCloseOnlyTab:(BOOL)value; +- (BOOL)disableTabClose; +- (void)setDisableTabClose:(BOOL)value; +- (id)style; +- (void)setStyle:(id )newStyle; - (NSString *)styleName; - (void)setStyleNamed:(NSString *)name; - (BOOL)hideForSingleTab; - (void)setHideForSingleTab:(BOOL)value; - (BOOL)showAddTabButton; - (void)setShowAddTabButton:(BOOL)value; -- (int)cellMinWidth; -- (void)setCellMinWidth:(int)value; -- (int)cellMaxWidth; -- (void)setCellMaxWidth:(int)value; -- (int)cellOptimumWidth; -- (void)setCellOptimumWidth:(int)value; +- (NSInteger)cellMinWidth; +- (void)setCellMinWidth:(NSInteger)value; +- (NSInteger)cellMaxWidth; +- (void)setCellMaxWidth:(NSInteger)value; +- (NSInteger)cellOptimumWidth; +- (void)setCellOptimumWidth:(NSInteger)value; - (BOOL)sizeCellsToFit; - (void)setSizeCellsToFit:(BOOL)value; -- (BOOL)allowsDragBetweenWindows; -- (void)setAllowsDragBetweenWindows:(BOOL)flag; +- (BOOL)useOverflowMenu; +- (void)setUseOverflowMenu:(BOOL)value; +- (BOOL)allowsBackgroundTabClosing; +- (void)setAllowsBackgroundTabClosing:(BOOL)value; +- (BOOL)allowsResizing; +- (void)setAllowsResizing:(BOOL)value; +- (BOOL)selectsTabsOnMouseDown; +- (void)setSelectsTabsOnMouseDown:(BOOL)value; +- (BOOL)automaticallyAnimates; +- (void)setAutomaticallyAnimates:(BOOL)value; +- (BOOL)alwaysShowActiveTab; +- (void)setAlwaysShowActiveTab:(BOOL)value; +- (BOOL)allowsScrubbing; +- (void)setAllowsScrubbing:(BOOL)value; +- (PSMTabBarTearOffStyle)tearOffStyle; +- (void)setTearOffStyle:(PSMTabBarTearOffStyle)tearOffStyle; +- (CGFloat)heightOfTabCells; + +#pragma mark Accessors -// accessors - (NSTabView *)tabView; - (void)setTabView:(NSTabView *)view; -- (id)delegate; -- (void)setDelegate:(id)object; +- (id)delegate; +- (void)setDelegate:(id)object; - (id)partnerView; - (void)setPartnerView:(id)view; -// the buttons +#pragma mark - +#pragma mark Determining Sizes + +- (NSSize)addTabButtonSize; +- (NSRect)addTabButtonRect; +- (NSSize)overflowButtonSize; +- (NSRect)overflowButtonRect; + +#pragma mark - +#pragma mark Determining Margins + +- (CGFloat)rightMargin; +- (CGFloat)leftMargin; +- (CGFloat)topMargin; +- (CGFloat)bottomMargin; + +#pragma mark The Buttons + - (PSMRolloverButton *)addTabButton; - (PSMOverflowPopUpButton *)overflowPopUpButton; + +#pragma mark Tab Information + - (NSMutableArray *)representedTabViewItems; +- (NSUInteger)numberOfVisibleTabs; +- (PSMTabBarCell *)lastVisibleTab; -// special effects -- (void)hideTabBar:(BOOL)hide animate:(BOOL)animate; +#pragma mark Special Effects + +- (void)hideTabBar:(BOOL) hide animate:(BOOL)animate; +- (BOOL)isTabBarHidden; +- (BOOL)isAnimating; + +// internal bindings methods also used by the tab drag assistant +- (void)bindPropertiesForCell:(PSMTabBarCell *)cell andTabViewItem:(NSTabViewItem *)item; +- (void)removeTabForCell:(PSMTabBarCell *)cell; @end +@protocol PSMTabBarControlDelegate + +@optional -@interface NSObject (TabBarControlDelegateMethods) +//Standard NSTabView methods - (BOOL)tabView:(NSTabView *)aTabView shouldCloseTabViewItem:(NSTabViewItem *)tabViewItem; - (void)tabView:(NSTabView *)aTabView willCloseTabViewItem:(NSTabViewItem *)tabViewItem; - (void)tabView:(NSTabView *)aTabView didCloseTabViewItem:(NSTabViewItem *)tabViewItem; -@end \ No newline at end of file +- (void)tabView:(NSTabView *)aTabView didDetachTabViewItem:(NSTabViewItem *)tabViewItem; + +//"Spring-loaded" tabs methods +- (NSArray *)allowedDraggedTypesForTabView:(NSTabView *)aTabView; +- (void)tabView:(NSTabView *)aTabView acceptedDraggingInfo:(id ) draggingInfo onTabViewItem:(NSTabViewItem *)tabViewItem; + +//Contextual menu method +- (NSMenu *)tabView:(NSTabView *)aTabView menuForTabViewItem:(NSTabViewItem *)tabViewItem; + +//Event method +- (void)tabView:(NSTabView *)aTabView tabViewItem:(NSTabViewItem *)tabViewItem event:(NSEvent *)event; + +//Drag and drop methods +- (BOOL)tabView:(NSTabView *)aTabView shouldDragTabViewItem:(NSTabViewItem *)tabViewItem fromTabBar:(PSMTabBarControl *)tabBarControl; +- (BOOL)tabView:(NSTabView *)aTabView shouldDropTabViewItem:(NSTabViewItem *)tabViewItem inTabBar:(PSMTabBarControl *)tabBarControl; +- (BOOL)tabView:(NSTabView *)aTabView shouldAllowTabViewItem:(NSTabViewItem *)tabViewItem toLeaveTabBar:(PSMTabBarControl *)tabBarControl; +- (void)tabView:(NSTabView*)aTabView didDropTabViewItem:(NSTabViewItem *)tabViewItem inTabBar:(PSMTabBarControl *)tabBarControl; + + +//Tear-off tabs methods +- (NSImage *)tabView:(NSTabView *)aTabView imageForTabViewItem:(NSTabViewItem *)tabViewItem offset:(NSSize *)offset styleMask:(NSUInteger *)styleMask; +- (PSMTabBarControl *)tabView:(NSTabView *)aTabView newTabBarForDraggedTabViewItem:(NSTabViewItem *)tabViewItem atPoint:(NSPoint)point; +- (void)tabView:(NSTabView *)aTabView closeWindowForLastTabViewItem:(NSTabViewItem *)tabViewItem; + +//Overflow menu validation +- (BOOL)tabView:(NSTabView *)aTabView validateOverflowMenuItem:(NSMenuItem *)menuItem forTabViewItem:(NSTabViewItem *)tabViewItem; +- (void)tabView:(NSTabView *)aTabView tabViewItem:(NSTabViewItem *)tabViewItem isInOverflowMenu:(BOOL)inOverflowMenu; + +//tab bar hiding methods +- (void)tabView:(NSTabView *)aTabView tabBarDidHide:(PSMTabBarControl *)tabBarControl; +- (void)tabView:(NSTabView *)aTabView tabBarDidUnhide:(PSMTabBarControl *)tabBarControl; +- (CGFloat)desiredWidthForVerticalTabBar:(PSMTabBarControl *)tabBarControl; + +//closing +- (BOOL)tabView:(NSTabView *)aTabView disableTabCloseForTabViewItem:(NSTabViewItem *)tabViewItem; + +//tooltips +- (NSString *)tabView:(NSTabView *)aTabView toolTipForTabViewItem:(NSTabViewItem *)tabViewItem; + +//accessibility +- (NSString *)accessibilityStringForTabView:(NSTabView *)aTabView objectCount:(NSInteger)objectCount; + +@end diff --git a/src/PSMTabBarControl.framework/Versions/A/PSMTabBarControl b/src/PSMTabBarControl.framework/Versions/A/PSMTabBarControl index f72694c..8a1a171 100755 Binary files a/src/PSMTabBarControl.framework/Versions/A/PSMTabBarControl and b/src/PSMTabBarControl.framework/Versions/A/PSMTabBarControl differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabClose_Front.tif b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabClose_Front.tif deleted file mode 100644 index a221ac7..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabClose_Front.tif and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabClose_Front_Pressed.tif b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabClose_Front_Pressed.tif deleted file mode 100644 index 104799d..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabClose_Front_Pressed.tif and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabClose_Front_Rollover.tif b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabClose_Front_Rollover.tif deleted file mode 100644 index cd86fa5..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabClose_Front_Rollover.tif and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabNew.png b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabNew.png deleted file mode 100644 index 843b3c3..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabNew.png and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabNewPressed.png b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabNewPressed.png deleted file mode 100644 index 469438d..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabNewPressed.png and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabNewRollover.png b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabNewRollover.png deleted file mode 100644 index f728511..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabNewRollover.png and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsBackground.png b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsBackground.png index 456ca61..0f973f8 100644 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsBackground.png and b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsBackground.png differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDown.png b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDown.png index 2db28ae..7095234 100644 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDown.png and b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDown.png differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDownGraphite.png b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDownGraphite.png index 787520e..15bcc19 100644 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDownGraphite.png and b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDownGraphite.png differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDownNonKey.png b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDownNonKey.png index 34a57ff..9344847 100644 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDownNonKey.png and b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsDownNonKey.png differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsSeparator.png b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsSeparator.png index f7cc1d0..be82692 100644 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsSeparator.png and b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsSeparator.png differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsSeparatorDown.png b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsSeparatorDown.png index 79dbf2a..8f30371 100644 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsSeparatorDown.png and b/src/PSMTabBarControl.framework/Versions/A/Resources/AquaTabsSeparatorDown.png differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/Info.plist b/src/PSMTabBarControl.framework/Versions/A/Resources/Info.plist index 1504618..653e7dd 100644 --- a/src/PSMTabBarControl.framework/Versions/A/Resources/Info.plist +++ b/src/PSMTabBarControl.framework/Versions/A/Resources/Info.plist @@ -2,6 +2,8 @@ + BuildMachineOSBuild + 20D74 CFBundleDevelopmentRegion English CFBundleExecutable @@ -10,13 +12,35 @@ com.positivespinmedia.PSMTabBarControlFramework CFBundleInfoDictionaryVersion 6.0 + CFBundleName + PSMTabBarControl CFBundlePackageType FMWK CFBundleSignature - PSM1 + ???? + CFBundleSupportedPlatforms + + MacOSX + CFBundleVersion - 1.1 - NSPrincipalClass - PSMTabBarControl + 1.0 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 12D4e + DTPlatformName + macosx + DTPlatformVersion + 11.1 + DTSDKBuild + 20C63 + DTSDKName + macosx11.1 + DTXcode + 1240 + DTXcodeBuild + 12D4e + LSMinimumSystemVersion + 10.10 diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/TabClose_Front.tif b/src/PSMTabBarControl.framework/Versions/A/Resources/TabClose_Front.tif deleted file mode 100644 index abdea19..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/TabClose_Front.tif and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/TabClose_Front_Pressed.tif b/src/PSMTabBarControl.framework/Versions/A/Resources/TabClose_Front_Pressed.tif deleted file mode 100644 index 125cf7e..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/TabClose_Front_Pressed.tif and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/TabClose_Front_Rollover.tif b/src/PSMTabBarControl.framework/Versions/A/Resources/TabClose_Front_Rollover.tif deleted file mode 100644 index 3d2bcb6..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/TabClose_Front_Rollover.tif and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/TabControlRep.tif b/src/PSMTabBarControl.framework/Versions/A/Resources/TabControlRep.tif deleted file mode 100644 index 6ad0f40..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/TabControlRep.tif and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/TabIcon.tif b/src/PSMTabBarControl.framework/Versions/A/Resources/TabIcon.tif deleted file mode 100644 index 55e08f1..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/TabIcon.tif and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetal.png b/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetal.png index 5b83018..be02d70 100644 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetal.png and b/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetal.png differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetalPressed.png b/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetalPressed.png index b18f6d4..18118ec 100644 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetalPressed.png and b/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetalPressed.png differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetalRollover.png b/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetalRollover.png index 083f00a..208c964 100644 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetalRollover.png and b/src/PSMTabBarControl.framework/Versions/A/Resources/TabNewMetalRollover.png differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/overflowImage.tiff b/src/PSMTabBarControl.framework/Versions/A/Resources/overflowImage.tiff old mode 100755 new mode 100644 index dc4b184..6349d79 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/overflowImage.tiff and b/src/PSMTabBarControl.framework/Versions/A/Resources/overflowImage.tiff differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/overflowImagePressed.tif b/src/PSMTabBarControl.framework/Versions/A/Resources/overflowImagePressed.tif deleted file mode 100755 index f6ad227..0000000 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/overflowImagePressed.tif and /dev/null differ diff --git a/src/PSMTabBarControl.framework/Versions/A/Resources/pi.png b/src/PSMTabBarControl.framework/Versions/A/Resources/pi.png index e3ff079..9cd5753 100644 Binary files a/src/PSMTabBarControl.framework/Versions/A/Resources/pi.png and b/src/PSMTabBarControl.framework/Versions/A/Resources/pi.png differ diff --git a/src/WLBookmarkPortalItem.m b/src/WLBookmarkPortalItem.m index a9f269c..9646843 100644 --- a/src/WLBookmarkPortalItem.m +++ b/src/WLBookmarkPortalItem.m @@ -6,7 +6,7 @@ // Copyright 2009 Xi Wang. All rights reserved. // -#import +//#import #import "WLBookmarkPortalItem.h" #import "WLSite.h" #import "WLMainFrameController.h" diff --git a/src/WLEffectView.h b/src/WLEffectView.h index e2b28c4..95ac332 100644 --- a/src/WLEffectView.h +++ b/src/WLEffectView.h @@ -7,7 +7,7 @@ // #import -#import +//#import #define DEFAULT_POPUP_BOX_FONT @"Helvetica" #define DEFAULT_POPUP_MENU_FONT @"Lucida Grande" diff --git a/src/WLGrowlBridge.h b/src/WLGrowlBridge.h deleted file mode 100644 index 3a1e61b..0000000 --- a/src/WLGrowlBridge.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// TYGrowlBridge.h -// Welly -// -// Created by aqua9 on 20/3/2008. -// Copyright 2008 TANG Yang. All rights reserved. -// - -#import -#import - -NSString *const WLGrowlNotificationNameFileTransfer; -NSString *const WLGrowlNotificationNameEXIFInformation; -NSString *const WLGrowlNotificationNameNewMessageReceived; -NSString *const WLGrowlNotificationNameNewArticleAlertReceived; - -#define kGrowlNotificationNameFileTransfer NSLocalizedString(WLGrowlNotificationNameFileTransfer, @"Growl Notification Name") -#define kGrowlNotificationNameEXIFInformation NSLocalizedString(WLGrowlNotificationNameEXIFInformation, @"Growl Notification Name") -#define kGrowlNotificationNameNewMessageReceived NSLocalizedString(WLGrowlNotificationNameNewMessageReceived, @"Growl Notification Name") - -@interface WLGrowlBridge : NSObject - -+ (BOOL)isMistEnabled; - -// iconData:nil priority:0 isSticky:NO -+ (void)notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName; - -// iconData:nil priority:0 -// identifier can be any object, not restricted to NSString -+ (void)notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - isSticky:(BOOL)isSticky - identifier:(id)identifier; - -+ (void)notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - isSticky:(BOOL)isSticky - clickTarget:(id)clickContext - clickSelector:(SEL)clickSelector - identifier:(id)identifier; - -@end diff --git a/src/WLGrowlBridge.m b/src/WLGrowlBridge.m deleted file mode 100644 index 745c23f..0000000 --- a/src/WLGrowlBridge.m +++ /dev/null @@ -1,121 +0,0 @@ -// -// WLGrowlBridge.m -// Welly -// -// Created by aqua9 on 20/3/2008. -// Copyright 2008 TANG Yang. All rights reserved. -// -// Modified by boost @ 9# -// Extend for convenience. - -#import "WLGrowlBridge.h" -#import "WLConnection.h" - -NSString *const WLGrowlNotificationNameFileTransfer = @"File Transfer"; -NSString *const WLGrowlNotificationNameEXIFInformation = @"EXIF Information"; -NSString *const WLGrowlNotificationNameNewMessageReceived = @"New Message Received"; - -NSString *const WLGrowlClickTargetKeyName = @"ClickTarget"; -NSString *const WLGrowlClickSelectorKeyName = @"ClickSelector"; -NSString *const WLGrowlClickObjectKeyName = @"ClickRepresentedObject"; - -@implementation WLGrowlBridge - -+ (void)initialize { - static WLGrowlBridge *sTYGrowlBridge = nil; - if (sTYGrowlBridge == nil) { - sTYGrowlBridge = [[WLGrowlBridge alloc] init]; - [GrowlApplicationBridge setGrowlDelegate:sTYGrowlBridge]; - } -} - -- (NSDictionary *)registrationDictionaryForGrowl { - NSArray *notifications = [NSArray arrayWithObjects:kGrowlNotificationNameFileTransfer, kGrowlNotificationNameEXIFInformation, kGrowlNotificationNameNewMessageReceived, nil]; - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - [dict setObject:notifications forKey: GROWL_NOTIFICATIONS_ALL]; - [dict setObject:notifications forKey: GROWL_NOTIFICATIONS_DEFAULT]; - return dict; -} - -+ (BOOL)isMistEnabled { - return [GrowlApplicationBridge isMistEnabled]; -} - -+ (void)notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName { - [GrowlApplicationBridge notifyWithTitle:title - description:description - notificationName:notifName - iconData:nil - priority:0 - isSticky:NO - clickContext:nil]; -} - -+ (void)notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - isSticky:(BOOL)isSticky - identifier:(id)identifier { - if ([GrowlApplicationBridge isMistEnabled]) { - NSLog(@"isMistEnabled"); - } else { - NSLog(@"no"); - } - - // hack identifier that must be a string - NSString *stringId = [[NSNumber numberWithLong:(long)identifier] stringValue]; - [GrowlApplicationBridge notifyWithTitle:title - description:description - notificationName:notifName - iconData:nil - priority:0 - isSticky:isSticky - clickContext:nil - identifier:stringId]; -} - -+ (void)notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - isSticky:(BOOL)isSticky - clickTarget:(id)target - clickSelector:(SEL)selector - identifier:(id)identifier { - // capsulate target, selector and object. - // Note: Growl only accepts pure p-list contents as click context - // i.e. only occurs NSDictionary, NSString, NSNumber, NSArray - NSDictionary *clickContext = @{WLGrowlClickTargetKeyName:[NSNumber numberWithUnsignedLong:target], WLGrowlClickSelectorKeyName:NSStringFromSelector(selector), WLGrowlClickObjectKeyName:[NSNumber numberWithUnsignedLong:identifier]}; - - // hack identifier that must be a string - NSString *stringId = [[NSNumber numberWithLong:(long)identifier] stringValue]; - [GrowlApplicationBridge notifyWithTitle:title - description:description - notificationName:notifName - iconData:nil - priority:0 - isSticky:isSticky - clickContext:clickContext - identifier:stringId]; -} - -- (void)growlNotificationWasClicked:(id)contextId { - NSDictionary *context = (NSDictionary *)contextId; - // encapsulate target/selector/object - id target = [[context objectForKey:WLGrowlClickTargetKeyName] unsignedLongValue]; - SEL selector = NSSelectorFromString([context objectForKey:WLGrowlClickSelectorKeyName]); - id object = [[context objectForKey:WLGrowlClickObjectKeyName] unsignedLongValue]; - - // perform action - if([contextId isKindOfClass:[WLConnection class]]){ - [target performSelector:selector withObject:object]; - } -} - -- (void)growlNotificationTimedOut:(id)contextId { - // deal with the event that the notification disappear - // Just do nothing -} - -@end diff --git a/src/WLMessageDelegate.m b/src/WLMessageDelegate.m index e396e57..99e66ae 100644 --- a/src/WLMessageDelegate.m +++ b/src/WLMessageDelegate.m @@ -12,7 +12,6 @@ #import "WLSite.h" #import "WLTabView.h" #import "WLMainFrameController.h" -#import "WLGrowlBridge.h" #import "WLArticle.h" NSString *const WLAutoReplyGrowlTipFormat = @"AutoReplyGrowlTipFormat"; @@ -73,17 +72,7 @@ - (void)connectionDidReceiveNewMessage:(NSString *)message description = [NSString stringWithFormat:NSLocalizedString(WLAutoReplyGrowlTipFormat, @"Auto Reply"), message]; } else { description = message; - } - - // should invoke growl notification - [WLGrowlBridge notifyWithTitle:callerName - description:description - notificationName:kGrowlNotificationNameNewMessageReceived - isSticky:NO - clickTarget:self - clickSelector:@selector(didClickGrowlNewMessage:) - identifier:_connection]; - + } } } diff --git a/src/WLPreviewController.m b/src/WLPreviewController.m index d7761e7..45e4383 100644 --- a/src/WLPreviewController.m +++ b/src/WLPreviewController.m @@ -8,7 +8,6 @@ #import "WLPreviewController.h" #import "WLQuickLookBridge.h" -#import "WLGrowlBridge.h" #import "WLGlobalConfig.h" NSString *const WLGIFToHTMLFormat = @"
"; @@ -183,13 +182,7 @@ - (void)showLoadingWindow { // Window delegate for _window, finallize the download - (BOOL)windowShouldClose:(id)window { NSURL *URL = [[_download request] URL]; - // Show the canceled message - if (![WLGrowlBridge isMistEnabled]) - [WLGrowlBridge notifyWithTitle:[URL absoluteString] - description:NSLocalizedString(@"Canceled", @"Download canceled") - notificationName:kGrowlNotificationNameFileTransfer - isSticky:NO - identifier:_download]; + // Remove current url from the url list [sURLs removeObject:URL]; // Cancel the download @@ -206,12 +199,7 @@ - (BOOL)windowShouldClose:(id)window { #pragma mark NSURLDownloadDelegate protocol - (void)downloadDidBegin:(NSURLDownload *)download { -// if (![WLGrowlBridge isMistEnabled]) -// [WLGrowlBridge notifyWithTitle:[[[download request] URL] absoluteString] -// description:NSLocalizedString(@"Connecting", @"Download begin") -// notificationName:kGrowlNotificationNameFileTransfer -// isSticky:YES -// identifier:download]; + } - (void)download:(NSURLDownload *)download didReceiveResponse:(NSURLResponse *)response { @@ -225,12 +213,6 @@ - (void)download:(NSURLDownload *)download didReceiveResponse:(NSURLResponse *)r NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); _filename = [[NSString alloc] initWithData:data encoding:encoding]; [pool release]; -// if (![WLGrowlBridge isMistEnabled]) -// [WLGrowlBridge notifyWithTitle:_filename -// description:[self stringFromTransfer] -// notificationName:kGrowlNotificationNameFileTransfer -// isSticky:YES -// identifier:download]; // set local path NSString *cacheDir = [WLGlobalConfig cacheDirectory]; @@ -355,12 +337,6 @@ - (void)downloadDidFinish:(NSURLDownload *)download { [props appendFormat:NSLocalizedString(@"tiffStringFormat", "\nManufacturer and Model: \n%@ %@"), makeName, modelName]; } - if([props length]) - [WLGrowlBridge notifyWithTitle:_filename - description:props - notificationName:kGrowlNotificationNameEXIFInformation - isSticky:NO - identifier:download]; // release [pool release]; CFRelease(exifSource); @@ -374,14 +350,7 @@ - (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error { NSURL *URL = [[download request] URL]; [sURLs removeObject:URL]; [[NSWorkspace sharedWorkspace] openURL:URL]; -// if (![WLGrowlBridge isMistEnabled]) -// [WLGrowlBridge notifyWithTitle:[URL absoluteString] -// description:NSLocalizedString(@"Opening browser", "Download failed or unsupported formats") -// notificationName:kGrowlNotificationNameFileTransfer -// isSticky:NO -// identifier:download]; - // Commented out by K.O.ed: Don't release here, release when the delegate dealloc. - //[download release]; + } @end diff --git a/src/Welly.xcodeproj/project.pbxproj b/src/Welly.xcodeproj/project.pbxproj index 4392540..5a8951b 100644 --- a/src/Welly.xcodeproj/project.pbxproj +++ b/src/Welly.xcodeproj/project.pbxproj @@ -25,13 +25,10 @@ 1841E73E0F7BD280002DCBA8 /* WLProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1841E73D0F7BD280002DCBA8 /* WLProxy.m */; }; 185680E60F25E23B00A1F4F3 /* password.tif in Resources */ = {isa = PBXBuildFile; fileRef = 185680E50F25E23B00A1F4F3 /* password.tif */; }; 186E810F0F218C10007D73BC /* WLComposePanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 186E810E0F218C10007D73BC /* WLComposePanelController.m */; }; - 18A685A80D9414D900CA423A /* WLGrowlBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 18A685A70D9414D900CA423A /* WLGrowlBridge.m */; }; 18BB9B870D98ECE500387145 /* IPSeeker.m in Sources */ = {isa = PBXBuildFile; fileRef = 18BB9B860D98ECE500387145 /* IPSeeker.m */; }; 18F813960F45A93A002FF48C /* WLFeedGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F813950F45A93A002FF48C /* WLFeedGenerator.m */; }; 5A09016D0DBCDD1600AC08F4 /* WLMainFrameController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A09016C0DBCDD1600AC08F4 /* WLMainFrameController.m */; }; 5A1BA6F60F6EA8BA003489CF /* WLURLManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A1BA6F50F6EA8BA003489CF /* WLURLManager.m */; }; - 5A38820C0E1D44E50098FA04 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97325FDCFA39411CA2CEA /* Foundation.framework */; }; - 5A38820D0E1D44E60098FA04 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97324FDCFA39411CA2CEA /* AppKit.framework */; }; 5A40C3C6118ADED400487AE9 /* WLTabViewItemController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A40C3C5118ADED400487AE9 /* WLTabViewItemController.m */; }; 5A43E8750F2E9B570002116B /* WLButtonAreaHotspotHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A43E8740F2E9B570002116B /* WLButtonAreaHotspotHandler.m */; }; 5A43E87F0F2E9D270002116B /* WLMouseHotspotHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A43E87E0F2E9D270002116B /* WLMouseHotspotHandler.m */; }; @@ -77,8 +74,6 @@ 81FEAD320EFE91BD0051C867 /* waiting.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 81FEAD310EFE91BD0051C867 /* waiting.pdf */; }; 85137B330D02192800833909 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 85137B320D02192800833909 /* Credits.rtf */; }; 85145AAE0AB40192009FC710 /* WLTerminal.m in Sources */ = {isa = PBXBuildFile; fileRef = 85145AAD0AB40192009FC710 /* WLTerminal.m */; }; - 8540F7250CEB43FF003B17D1 /* PSMTabBarControl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8540F7240CEB43FF003B17D1 /* PSMTabBarControl.framework */; }; - 8540F7310CEB4428003B17D1 /* PSMTabBarControl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8540F7240CEB43FF003B17D1 /* PSMTabBarControl.framework */; }; 8570AD5F0A3923A900838442 /* WLTerminalView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8570AD5E0A3923A900838442 /* WLTerminalView.m */; }; 8579CA2A0CF21D3D005A8353 /* WLSite.m in Sources */ = {isa = PBXBuildFile; fileRef = 8579CA290CF21D3D005A8353 /* WLSite.m */; }; 857EAE4F0CF1D89300777C15 /* offline.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 857EAE4E0CF1D89300777C15 /* offline.pdf */; }; @@ -88,7 +83,6 @@ 85957EAF0CFF1176006E5E08 /* sleep.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 85957EAE0CFF1176006E5E08 /* sleep.pdf */; }; 85A0E73D0D06B72900ACA26F /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 85A0E73B0D06B72900ACA26F /* Localizable.strings */; }; 85AE9DAE0CB15D220045317F /* bookmark.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 85AE9DAD0CB15D220045317F /* bookmark.pdf */; }; - 85D259470D21039D002BD294 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85D259460D21039D002BD294 /* IOKit.framework */; }; 85E7825C0D057E8400BDA3FB /* YLEmoticon.m in Sources */ = {isa = PBXBuildFile; fileRef = 85E7825B0D057E8400BDA3FB /* YLEmoticon.m */; }; 85ED52290D0920E6003296D4 /* CommonType.m in Sources */ = {isa = PBXBuildFile; fileRef = 85ED52280D0920E6003296D4 /* CommonType.m */; }; 85ED53220D092B5F003296D4 /* WLConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 85ED53210D092B5F003296D4 /* WLConnection.m */; }; @@ -97,13 +91,19 @@ 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; - D64A480B11E90350008ACEBD /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D64A480A11E90350008ACEBD /* Growl.framework */; }; - D64A480E11E90356008ACEBD /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = D64A480A11E90350008ACEBD /* Growl.framework */; }; DF0C69551F7A9D730007742D /* WLPostPushDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0C69541F7A9D730007742D /* WLPostPushDelegate.m */; }; DF0C69581F7D23AA0007742D /* PostPushPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF0C695A1F7D23AA0007742D /* PostPushPanel.xib */; }; DF13FCC21F825EE0005E8D12 /* usock2wsock in Resources */ = {isa = PBXBuildFile; fileRef = DF13FCC11F825EDD005E8D12 /* usock2wsock */; }; DF2086471FFFE34B00F8084F /* WLCommentHotspotHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = DF2086461FFFE34B00F8084F /* WLCommentHotspotHandler.m */; }; DF23C0A01F764362000A472E /* telnet in Resources */ = {isa = PBXBuildFile; fileRef = DF23C09F1F764358000A472E /* telnet */; }; + DF267C0525E60CDB006A800A /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF98AC4625612C6200F36B19 /* Quartz.framework */; }; + DF267C0725E60CEF006A800A /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF267C0625E60CEF006A800A /* AppKit.framework */; }; + DF267C0925E60D49006A800A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF267C0825E60D49006A800A /* Foundation.framework */; }; + DF267C0B25E60D51006A800A /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF267C0A25E60D51006A800A /* IOKit.framework */; }; + DF267C0C25E60DC0006A800A /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFF2CCC91F78132C00530892 /* Sparkle.framework */; }; + DF267C0D25E60DC0006A800A /* Sparkle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DFF2CCC91F78132C00530892 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + DF267C1225E61104006A800A /* PSMTabBarControl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8540F7240CEB43FF003B17D1 /* PSMTabBarControl.framework */; }; + DF267C1325E61104006A800A /* PSMTabBarControl.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8540F7240CEB43FF003B17D1 /* PSMTabBarControl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; DF45920C1F75972200162626 /* proxy.sh in Resources */ = {isa = PBXBuildFile; fileRef = DF45920B1F75972200162626 /* proxy.sh */; }; DF5927611FA079A3005C72FF /* WLArticle.m in Sources */ = {isa = PBXBuildFile; fileRef = DF5927601FA079A2005C72FF /* WLArticle.m */; }; DF5927641FA079BA005C72FF /* WLTrackArticlePanel.m in Sources */ = {isa = PBXBuildFile; fileRef = DF5927631FA079BA005C72FF /* WLTrackArticlePanel.m */; }; @@ -118,29 +118,26 @@ DF59277D1FA0B723005C72FF /* WLTrackArticlePanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF59277F1FA0B723005C72FF /* WLTrackArticlePanel.xib */; }; DF8ACCE81FA8730D009EF52F /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = DF8ACCE71FA8730D009EF52F /* libc++.tbd */; }; DF8ACCEA1FA87315009EF52F /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = DF8ACCE91FA87315009EF52F /* libz.tbd */; }; - DF98AC4725612C6200F36B19 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF98AC4625612C6200F36B19 /* Quartz.framework */; }; DFB599891FA252F700C556B0 /* STHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = DFB599871FA252F700C556B0 /* STHTTPRequest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; DFB5998F1FA25B8200C556B0 /* HTMLNode.m in Sources */ = {isa = PBXBuildFile; fileRef = DFB5998B1FA25B8200C556B0 /* HTMLNode.m */; }; DFB599901FA25B8200C556B0 /* HTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = DFB5998D1FA25B8200C556B0 /* HTMLParser.m */; }; DFB599921FA25C7200C556B0 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = DFB599911FA25C7200C556B0 /* libxml2.tbd */; }; - DFF2CCCA1F78133B00530892 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFF2CCC91F78132C00530892 /* Sparkle.framework */; }; - DFF2CCCB1F78135000530892 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DFF2CCC91F78132C00530892 /* Sparkle.framework */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; DFF2CCCD1F7814BF00530892 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = DFF2CCCC1F7814B500530892 /* dsa_pub.pem */; }; DFF2CCD11F7825AB00530892 /* qqwry170910.dat in Resources */ = {isa = PBXBuildFile; fileRef = DFF2CCD01F7825A800530892 /* qqwry170910.dat */; }; DFFEA0791F92610D00942F6C /* LongScreenshotPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = DFFEA07B1F92610D00942F6C /* LongScreenshotPanel.xib */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ - 8540F7350CEB4435003B17D1 /* CopyFiles */ = { + DF267C0425E60BF3006A800A /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( - D64A480E11E90356008ACEBD /* Growl.framework in CopyFiles */, - 8540F7310CEB4428003B17D1 /* PSMTabBarControl.framework in CopyFiles */, - DFF2CCCB1F78135000530892 /* Sparkle.framework in CopyFiles */, + DF267C0D25E60DC0006A800A /* Sparkle.framework in Embed Frameworks */, + DF267C1325E61104006A800A /* PSMTabBarControl.framework in Embed Frameworks */, ); + name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ @@ -183,8 +180,6 @@ 185680E50F25E23B00A1F4F3 /* password.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = password.tif; sourceTree = ""; }; 186E810D0F218C10007D73BC /* WLComposePanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WLComposePanelController.h; sourceTree = ""; }; 186E810E0F218C10007D73BC /* WLComposePanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WLComposePanelController.m; sourceTree = ""; }; - 18A685A60D9414D900CA423A /* WLGrowlBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WLGrowlBridge.h; sourceTree = ""; }; - 18A685A70D9414D900CA423A /* WLGrowlBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WLGrowlBridge.m; sourceTree = ""; }; 18BB9B850D98ECE500387145 /* IPSeeker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IPSeeker.h; sourceTree = ""; }; 18BB9B860D98ECE500387145 /* IPSeeker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IPSeeker.m; sourceTree = ""; }; 18F813940F45A93A002FF48C /* WLFeedGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WLFeedGenerator.h; sourceTree = ""; }; @@ -331,6 +326,9 @@ DF2086461FFFE34B00F8084F /* WLCommentHotspotHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WLCommentHotspotHandler.m; sourceTree = ""; }; DF2086481FFFE36600F8084F /* WLCommentHotspotHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WLCommentHotspotHandler.h; sourceTree = ""; }; DF23C09F1F764358000A472E /* telnet */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = telnet; sourceTree = ""; }; + DF267C0625E60CEF006A800A /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + DF267C0825E60D49006A800A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + DF267C0A25E60D51006A800A /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; DF45920B1F75972200162626 /* proxy.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = proxy.sh; sourceTree = ""; }; DF59275F1FA079A2005C72FF /* WLArticle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WLArticle.h; sourceTree = ""; }; DF5927601FA079A2005C72FF /* WLArticle.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WLArticle.m; sourceTree = ""; }; @@ -376,20 +374,19 @@ files = ( DF59277C1FA0A945005C72FF /* libsqlite3.tbd in Frameworks */, 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, - 8540F7250CEB43FF003B17D1 /* PSMTabBarControl.framework in Frameworks */, - DF98AC4725612C6200F36B19 /* Quartz.framework in Frameworks */, DFB599921FA25C7200C556B0 /* libxml2.tbd in Frameworks */, DF8ACCE81FA8730D009EF52F /* libc++.tbd in Frameworks */, - 85D259470D21039D002BD294 /* IOKit.framework in Frameworks */, 5AB1BDBF0E18F26C0094C370 /* System.framework in Frameworks */, + DF267C0925E60D49006A800A /* Foundation.framework in Frameworks */, DF8ACCEA1FA87315009EF52F /* libz.tbd in Frameworks */, - 5A38820C0E1D44E50098FA04 /* Foundation.framework in Frameworks */, - 5A38820D0E1D44E60098FA04 /* AppKit.framework in Frameworks */, + DF267C0C25E60DC0006A800A /* Sparkle.framework in Frameworks */, 81624CE20E2F8F89009C9987 /* Carbon.framework in Frameworks */, - DFF2CCCA1F78133B00530892 /* Sparkle.framework in Frameworks */, + DF267C0B25E60D51006A800A /* IOKit.framework in Frameworks */, + DF267C0525E60CDB006A800A /* Quartz.framework in Frameworks */, + DF267C0725E60CEF006A800A /* AppKit.framework in Frameworks */, + DF267C1225E61104006A800A /* PSMTabBarControl.framework in Frameworks */, 160D6D4B0EE2E5B900CDC416 /* Security.framework in Frameworks */, 161DF769106DE2780003E85A /* SystemConfiguration.framework in Frameworks */, - D64A480B11E90350008ACEBD /* Growl.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -512,6 +509,9 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( + DF267C0A25E60D51006A800A /* IOKit.framework */, + DF267C0825E60D49006A800A /* Foundation.framework */, + DF267C0625E60CEF006A800A /* AppKit.framework */, DF98AC4625612C6200F36B19 /* Quartz.framework */, DF8ACCE91FA87315009EF52F /* libz.tbd */, DF8ACCE71FA8730D009EF52F /* libc++.tbd */, @@ -715,8 +715,6 @@ 5AF9DE45118B365A00E288A9 /* Message */ = { isa = PBXGroup; children = ( - 18A685A60D9414D900CA423A /* WLGrowlBridge.h */, - 18A685A70D9414D900CA423A /* WLGrowlBridge.m */, 5AF8CA5B0D9CDB0000DFB5AB /* WLMessageDelegate.h */, 5AF8CA5C0D9CDB0000DFB5AB /* WLMessageDelegate.m */, ); @@ -887,10 +885,10 @@ isa = PBXNativeTarget; buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Welly" */; buildPhases = ( - 8540F7350CEB4435003B17D1 /* CopyFiles */, 8D1107290486CEB800E47090 /* Resources */, 8D11072C0486CEB800E47090 /* Sources */, 8D11072E0486CEB800E47090 /* Frameworks */, + DF267C0425E60BF3006A800A /* Embed Frameworks */, ); buildRules = ( ); @@ -908,7 +906,7 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1220; + LastUpgradeCheck = 1240; ORGANIZATIONNAME = "Welly Group"; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Welly" */; @@ -995,7 +993,6 @@ 85ED52290D0920E6003296D4 /* CommonType.m in Sources */, DF2086471FFFE34B00F8084F /* WLCommentHotspotHandler.m in Sources */, 85ED53220D092B5F003296D4 /* WLConnection.m in Sources */, - 18A685A80D9414D900CA423A /* WLGrowlBridge.m in Sources */, 18BB9B870D98ECE500387145 /* IPSeeker.m in Sources */, 5AF8CA5D0D9CDB0000DFB5AB /* WLMessageDelegate.m in Sources */, 5A09016D0DBCDD1600AC08F4 /* WLMainFrameController.m in Sources */, @@ -1204,7 +1201,7 @@ ); INFOPLIST_FILE = Info.plist; INSTALL_PATH = /Applications; - LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks @executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; MARKETING_VERSION = 3.1.2; OTHER_CFLAGS = "-D__DUMPPACKET__"; @@ -1242,7 +1239,7 @@ ); INFOPLIST_FILE = Info.plist; INSTALL_PATH = /Applications; - LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks @executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; MARKETING_VERSION = 3.1.2; OTHER_CODE_SIGN_FLAGS = "--deep"; @@ -1270,14 +1267,14 @@ PREBINDING = NO; RUN_CLANG_STATIC_ANALYZER = NO; SDKROOT = ""; - VALID_ARCHS = x86_64; + VALID_ARCHS = "arm64 x86_64"; }; name = Debug; }; C01FCF5008A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ARCHS = "$(ARCHS_STANDARD)"; ENABLE_OPENMP_SUPPORT = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_C_LANGUAGE_STANDARD = c99; @@ -1291,7 +1288,7 @@ PREBINDING = NO; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = ""; - VALID_ARCHS = x86_64; + VALID_ARCHS = "arm64 x86_64"; }; name = Release; }; diff --git a/src/telnet b/src/telnet index 97ba619..1ad7187 100755 Binary files a/src/telnet and b/src/telnet differ diff --git a/src/usock2wsock b/src/usock2wsock index 1c2d947..7d12c31 100755 Binary files a/src/usock2wsock and b/src/usock2wsock differ