Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Moving over code from other repo

Sorry, no commit history
  • Loading branch information...
commit 46af0fc5bdc2db9bd477aa33f2f2c43f553a59ba 1 parent ec28e56
Ullrich Schäfer authored August 10, 2012

Showing 49 changed files with 1,060 additions and 13,025 deletions. Show diff stats Hide diff stats

  1. 57  {source/Growl → }/GrowlDefines.h
  2. 204  {source/Growl → }/GrowlDefinesInternal.h
  3. 20  {source/Growl → }/GrowlDisplayPlugin.h
  4. 55  {source/Growl → }/GrowlDisplayWindowController.h
  5. 79  GrowlNotification.h
  6. 18  {source/Growl → }/GrowlNotificationDisplayBridge.h
  7. 32  {source/Growl → }/GrowlPlugin.h
  8. 55  GrowlPluginPreferenceStrings.h
  9. 179  MountainGrowl.xcodeproj/project.pbxproj
  10. 7  MountainGrowl_Prefix.pch
  11. BIN  de.lproj/Localizable.strings
  12. 2  resources/Info.plist
  13. 2,748  resources/de.lproj/GrowlSamplePrefs.xib
  14. BIN  resources/de.lproj/Localizable.strings
  15. 2,777  resources/en.lproj/GrowlSamplePrefs.xib
  16. BIN  resources/en.lproj/InfoPlist.strings
  17. BIN  resources/en.lproj/Localizable.strings
  18. 2,779  resources/fr.lproj/GrowlSamplePrefs.xib
  19. 2,779  resources/ja.lproj/GrowlSamplePrefs.xib
  20. 34  source/Growl/CFDictionaryAdditions.c
  21. 19  source/Growl/CFDictionaryAdditions.h
  22. 38  source/Growl/CFGrowlDefines.h
  23. 71  source/Growl/GrowlAbstractSingletonObject.h
  24. 72  source/Growl/GrowlApplicationNotification.h
  25. 20  source/Growl/GrowlImageAdditions.h
  26. 95  source/Growl/GrowlImageAdditions.m
  27. 114  source/Growl/GrowlPositionController.h
  28. 60  source/Growl/GrowlPositioningDefines.h
  29. 34  source/Growl/NSWindow+Transforms.h
  30. 14  source/Growl/Transitions/GrowlFadingWindowTransition.h
  31. 22  source/Growl/Transitions/GrowlFlippingWindowTransition.h
  32. 19  source/Growl/Transitions/GrowlScaleWindowTransition.h
  33. 17  source/Growl/Transitions/GrowlShrinkingWindowTransition.h
  34. 22  source/Growl/Transitions/GrowlSlidingWindowTransition.h
  35. 90  source/Growl/Transitions/GrowlWindowTransition.h
  36. 19  source/Growl/Transitions/GrowlWipeWindowTransition.h
  37. 18  source/GrowlSampleDisplay.h
  38. 60  source/GrowlSampleDisplay.m
  39. 80  source/GrowlSamplePrefs.h
  40. 227  source/GrowlSamplePrefs.m
  41. 18  source/GrowlSampleWindowController.h
  42. 122  source/GrowlSampleWindowController.m
  43. 36  source/GrowlSampleWindowView.h
  44. 249  source/GrowlSampleWindowView.m
  45. 22  source/MountainGrowlDisplay.h
  46. 90  source/MountainGrowlDisplay.m
  47. 18  source/MountainGrowlPrefs.h
  48. 39  source/MountainGrowlPrefs.m
  49. 555  source/MountainGrowlPrefs.xib
57  source/Growl/GrowlDefines.h → GrowlDefines.h
@@ -7,10 +7,8 @@
7 7
 
8 8
 #ifdef __OBJC__
9 9
 #define XSTR(x) (@x)
10  
-#define STRING_TYPE NSString *
11 10
 #else
12 11
 #define XSTR CFSTR
13  
-#define STRING_TYPE CFStringRef
14 12
 #endif
15 13
 
16 14
 /*!	@header GrowlDefines.h
@@ -56,7 +54,7 @@
56 54
  *   This key is optional.
57 55
  */
58 56
 #define GROWL_APP_ID					XSTR("ApplicationId")
59  
-/*!	@defined GROWL_APP_ICON
  57
+/*!	@defined GROWL_APP_ICON_DATA
60 58
  *	@abstract The image data for your application's icon.
61 59
  *	@discussion Image data representing your application's icon. This may be
62 60
  *	 superimposed on a notification icon as a badge, used as the notification
@@ -66,7 +64,7 @@
66 64
  *
67 65
  *	 Optional. Not supported by all display plugins.
68 66
  */
69  
-#define GROWL_APP_ICON					XSTR("ApplicationIcon")
  67
+#define GROWL_APP_ICON_DATA				XSTR("ApplicationIcon")
70 68
 /*!	@defined GROWL_NOTIFICATIONS_DEFAULT
71 69
  *	@abstract The array of notifications to turn on by default.
72 70
  *	@discussion These are the names of the notifications that should be enabled
@@ -144,20 +142,20 @@
144 142
  */
145 143
 #define GROWL_NOTIFICATION_DESCRIPTION  	XSTR("NotificationDescription")
146 144
 /*!	@defined GROWL_NOTIFICATION_ICON
147  
- *	@discussion Image data for the notification icon. Must be in a format
  145
+ *	@discussion Image data for the notification icon. Image data must be in a format
148 146
  *	 supported by NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
149 147
  *
150 148
  *	 Optional. Not supported by all display plugins.
151 149
  */
152  
-#define GROWL_NOTIFICATION_ICON			XSTR("NotificationIcon")
  150
+#define GROWL_NOTIFICATION_ICON_DATA			XSTR("NotificationIcon")
153 151
 /*!	@defined GROWL_NOTIFICATION_APP_ICON
154 152
  *	@discussion Image data for the application icon, in case GROWL_APP_ICON does
155  
- *	 not apply for some reason. Must be in a format supported by NSImage, such
  153
+ *	 not apply for some reason. Image data be in a format supported by NSImage, such
156 154
  *	 as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
157 155
  *
158 156
  *	 Optional. Not supported by all display plugins.
159 157
  */
160  
-#define GROWL_NOTIFICATION_APP_ICON		XSTR("NotificationAppIcon")
  158
+#define GROWL_NOTIFICATION_APP_ICON_DATA		XSTR("NotificationAppIcon")
161 159
 /*!	@defined GROWL_NOTIFICATION_PRIORITY
162 160
  *	@discussion The priority of the notification as an integer number from
163 161
  *	 -2 to +2 (+2 being highest).
@@ -185,16 +183,6 @@
185 183
  */
186 184
 #define GROWL_NOTIFICATION_CLICK_CONTEXT			XSTR("NotificationClickContext")
187 185
 
188  
-/*!	@defined GROWL_DISPLAY_PLUGIN
189  
- *	@discussion The name of a display plugin which should be used for this notification.
190  
- *    Optional. If this key is not set or the specified display plugin does not
191  
- *    exist, the display plugin stored in the application ticket is used. This key
192  
- *    allows applications to use different default display plugins for their
193  
- *    notifications. The user can still override those settings in the preference
194  
- *    pane.
195  
- */
196  
-#define GROWL_DISPLAY_PLUGIN				XSTR("NotificationDisplayPlugin")
197  
-
198 186
 /*!	@defined GROWL_NOTIFICATION_IDENTIFIER
199 187
  *	@abstract An identifier for the notification for coalescing purposes.
200 188
  *   Notifications with the same identifier fall into the same class; only
@@ -245,7 +233,7 @@
245 233
  *	 The userInfo dictionary for this notification can contain these keys:
246 234
  *	 <ul>
247 235
  *	 	<li>GROWL_APP_NAME</li>
248  
- *	 	<li>GROWL_APP_ICON</li>
  236
+ *	 	<li>GROWL_APP_ICON_DATA</li>
249 237
  *	 	<li>GROWL_NOTIFICATIONS_ALL</li>
250 238
  *	 	<li>GROWL_NOTIFICATIONS_DEFAULT</li>
251 239
  *	 </ul>
@@ -288,12 +276,6 @@
288 276
  *	 Growl_PostNotification.
289 277
  */
290 278
 #define GROWL_NOTIFICATION				XSTR("GrowlNotification")
291  
-/*!	@defined GROWL_SHUTDOWN
292  
-*	@abstract The distributed notification name that tells Growl to shutdown.
293  
-*	@discussion The Growl preference pane posts this notification when the
294  
-*	 "Stop Growl" button is clicked.
295  
-*/
296  
-#define GROWL_SHUTDOWN					XSTR("GrowlShutdown")
297 279
 /*!	@defined GROWL_PING
298 280
  *	@abstract A distributed notification to check whether Growl is running.
299 281
  *	@discussion This is used by the Growl preference pane. If it receives a
@@ -313,15 +295,26 @@
313 295
  *	 registration dictionary supplied by its delegate.
314 296
  */
315 297
 #define GROWL_IS_READY					XSTR("Lend Me Some Sugar; I Am Your Neighbor!")
316  
-/*!	@defined GROWL_NOTIFICATION_CLICKED
317  
- *	@abstract The distributed notification sent when a supported notification is clicked.
  298
+
  299
+
  300
+/*!	@defined GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX
  301
+ *	@abstract Part of the name of the distributed notification sent when a supported notification is clicked.
318 302
  *	@discussion When a Growl notification with a click context is clicked on by
319  
- *	 the user, Growl posts this distributed notification.
320  
- *	 The GrowlApplicationBridge responds to this notification by calling a
321  
- *	 callback in its delegate.
  303
+ *	 the user, Growl posts a distributed notification whose name is in the format:
  304
+ *        [NSString stringWithFormat:@"%@-%d-%@", appName, pid, GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX]
  305
+ *	 The GrowlApplicationBridge responds to this notification by calling a callback in its delegate.
  306
+ */
  307
+#define GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX		XSTR("GrowlClicked!")
  308
+
  309
+/*!	@defined GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX
  310
+ *	@abstract Part of the name of the distributed notification sent when a supported notification times out without being clicked.
  311
+ *	@discussion When a Growl notification with a click context times out, Growl posts a distributed notification
  312
+ *	 whose name is in the format:
  313
+ *		  [NSString stringWithFormat:@"%@-%d-%@", appName, pid, GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX]
  314
+ *	 The GrowlApplicationBridge responds to this notification by calling a callback in its delegate.
  315
+ *   NOTE: The user may have actually clicked the 'close' button; this triggers an *immediate* time-out of the notification.
322 316
  */
323  
-#define GROWL_NOTIFICATION_CLICKED		XSTR("GrowlClicked!")
324  
-#define GROWL_NOTIFICATION_TIMED_OUT	XSTR("GrowlTimedOut!")
  317
+#define GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX		XSTR("GrowlTimedOut!")
325 318
 
326 319
 /*!	@group Other symbols */
327 320
 /* Symbols which don't fit into any of the other categories. */
204  source/Growl/GrowlDefinesInternal.h → GrowlDefinesInternal.h
@@ -30,26 +30,6 @@
30 30
  */
31 31
 
32 32
 /*!
33  
- * @defined NSInteger
34  
- * @abstract Typedef to int so Growl will compile on pre-10.5 SDKs.
35  
- */
36  
-#ifndef NSINTEGER_DEFINED
37  
-typedef int NSInteger;
38  
-typedef unsigned int NSUInteger;
39  
-#define NSINTEGER_DEFINED
40  
-#endif
41  
-
42  
-/*!
43  
- * @defined CGFloat
44  
- * @abstract Typedef to float so Growl will compile on pre-10.5 SDKs.
45  
- */
46  
-#ifndef CGFLOAT_DEFINED
47  
-typedef float CGFloat;
48  
-#define CGFLOAT_IS_DOUBLE 0
49  
-#define CGFLOAT_DEFINED
50  
-#endif
51  
-
52  
-/*!
53 33
  * @defined GrowlCGFloatCeiling()
54 34
  * @abstract Macro for the ceil() function that uses a different precision depending on the CPU architecture.
55 35
  */
@@ -71,15 +51,15 @@ typedef float CGFloat;
71 51
 #define GrowlCGFloatFloor(x) floorf(x)
72 52
 #endif
73 53
 
74  
-/*!	@defined	GROWL_TCP_PORT
75  
- *	@abstract	The TCP listen port for Growl notification servers.
  54
+/*!	@defined	GROWL_TCP_DO_PORT
  55
+ *	@abstract	The TCP listen port for Growl's DirectObject-based notification servers.
76 56
  */
77  
-#define GROWL_TCP_PORT	23052
  57
+#define GROWL_TCP_DO_PORT	23052
78 58
 
79  
-/*!	@defined	GROWL_UDP_PORT
80  
- *	@abstract	The UDP listen port for Growl notification servers.
  59
+/*!	@defined	GROWL_TCP_PORT
  60
+ *	@abstract	The TCP listen port for Growl's protocol-based notification servers.
81 61
  */
82  
-#define GROWL_UDP_PORT	9887
  62
+#define GROWL_TCP_PORT	23053
83 63
 
84 64
 /*!	@defined	GROWL_PROTOCOL_VERSION
85 65
  *	@abstract	The current version of the Growl network-notifications protocol (without encryption).
@@ -116,124 +96,27 @@ typedef float CGFloat;
116 96
 */
117 97
 #define GROWL_TYPE_NOTIFICATION_NOAUTH	5
118 98
 
119  
-#define ATTRIBUTE_PACKED __attribute((packed))
120  
-
121  
-/*!	@struct	GrowlNetworkPacket
122  
- *	@abstract	This struct is a header common to all incoming Growl network
123  
- *	 packets which identifies the type and version of the packet.
  99
+/*! @defined GROWL_NOTIFICATION_CLICKED
  100
+ *  @abstract Posted to the default notification center when the user clicks a notification
124 101
  */
125  
-struct GrowlNetworkPacket {
126  
-	unsigned char version;
127  
-	unsigned char type;
128  
-} ATTRIBUTE_PACKED;
  102
+#define GROWL_NOTIFICATION_CLICKED		@"GrowlNotificationClicked(Internal)"
129 103
 
130  
-/*!
131  
- * @struct GrowlNetworkRegistration
132  
- * @abstract The format of a registration packet.
133  
- * @discussion A Growl client that wants to register with a Growl server sends
134  
- * a packet in this format.
135  
- * @field common The Growl packet header.
136  
- * @field appNameLen The name of the application that is registering.
137  
- * @field numAllNotifications The number of notifications in the list.
138  
- * @field numDefaultNotifications The number of notifications in the list that are enabled by default.
139  
- * @field data Variable-sized data.
140  
- */
141  
-struct GrowlNetworkRegistration {
142  
-	struct GrowlNetworkPacket common;
143  
-	/*	This name is used both internally and in the Growl
144  
-	 *	 preferences.
145  
-	 *
146  
-	 *	 The application name should remain stable between different versions
147  
-	 *	 and incarnations of your application.
148  
-	 *	 For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0"
149  
-	 *	 and "SurfWriter Lite" are not.
150  
-	 *
151  
-	 *	 In addition to being unsigned, the application name length is in
152  
-	 *	 network byte order.
153  
-	 */
154  
-	unsigned short appNameLen;
155  
-	/*	These names are used both internally and in the Growl
156  
-	 *	 preferences. For this reason, they should be human-readable.
157  
-	 */
158  
-	unsigned char numAllNotifications;
159  
-
160  
-	unsigned char numDefaultNotifications;
161  
-	/*	The variable-sized data of a registration is:
162  
-	 *	 - The application name, in UTF-8 encoding, for appNameLen bytes.
163  
-	 *	 - The list of all notification names.
164  
-	 *	 - The list of default notifications, as 8-bit unsigned indices into the list of all notifications.
165  
-	 *	 - The MD5/SHA256 checksum of all the data preceding the checksum.
166  
-	 *
167  
-	 *	 Each notification name is encoded as:
168  
-	 *	 - Length: two bytes, unsigned, network byte order.
169  
-	 *	 - Name: As many bytes of UTF-8-encoded text as the length says.
170  
-	 *	 And there are numAllNotifications of these.
171  
-	 */
172  
-	unsigned char data[];
173  
-} ATTRIBUTE_PACKED;
  104
+/*! @defined GROWL_NOTIFICATION_TIMED_OUT
  105
+ *  @abstract Posted to the default notification center when a notification times out (or is closed via the close button)
  106
+ */
  107
+#define GROWL_NOTIFICATION_TIMED_OUT	@"GrowlNotificationTimedOut(Internal)"
174 108
 
175  
-/*!
176  
- * @struct GrowlNetworkNotification
177  
- * @abstract The format of a notification packet.
178  
- * @discussion	A Growl client that wants to post a notification to a Growl
179  
- * server sends a packet in this format.
180  
- * @field common The Growl packet header.
181  
- * @field flags The priority number and the sticky bit.
182  
- * @field nameLen The length of the notification name.
183  
- * @field titleLen The length of the notification title.
184  
- * @field descriptionLen The length of the notification description.
185  
- * @field appNameLen The length of the application name.
186  
- * @field data Variable-sized data.
187  
- */
188  
-struct GrowlNetworkNotification {
189  
-	struct GrowlNetworkPacket common;
190  
-	/*!
191  
-	 * @struct GrowlNetworkNotificationFlags
192  
-	 * @abstract Various flags.
193  
-	 * @discussion This 16-bit packed structure contains the priority as a
194  
-	 *  signed 3-bit integer from -2 to +2, and the sticky flag as a single bit.
195  
-	 *  The high 12 bits of the structure are reserved for future use.
196  
-	 * @field reserved reserved for future use.
197  
-	 * @field priority the priority as a signed 3-bit integer from -2 to +2.
198  
-	 * @field sticky the sticky flag.
199  
-	 */
200  
-	struct GrowlNetworkNotificationFlags {
201  
-#ifdef __BIG_ENDIAN__
202  
-		unsigned reserved: 12;
203  
-		signed   priority: 3;
204  
-		unsigned sticky:   1;
205  
-#else
206  
-		unsigned sticky:   1;
207  
-		signed   priority: 3;
208  
-		unsigned reserved: 12;
209  
-#endif
210  
-	} ATTRIBUTE_PACKED flags; //size = 16 (12 + 3 + 1)
211  
-
212  
-	/*	In addition to being unsigned, the notification name length
213  
-	 *	 is in network byte order.
214  
-	 */
215  
-	unsigned short nameLen;
216  
-	/*	@discussion	In addition to being unsigned, the title length is in
217  
-	 *	 network byte order.
218  
-	 */
219  
-	unsigned short titleLen;
220  
-	/*	In addition to being unsigned, the description length is in
221  
-	 *	 network byte order.
222  
-	 */
223  
-	unsigned short descriptionLen;
224  
-	/*	In addition to being unsigned, the application name length
225  
-	 *	 is in network byte order.
226  
-	 */
227  
-	unsigned short appNameLen;
228  
-	/*	The variable-sized data of a notification is:
229  
-	 *	 - Notification name, in UTF-8 encoding, for nameLen bytes.
230  
-	 *	 - Title, in UTF-8 encoding, for titleLen bytes.
231  
-	 *	 - Description, in UTF-8 encoding, for descriptionLen bytes.
232  
-	 *	 - Application name, in UTF-8 encoding, for appNameLen bytes.
233  
-	 *	 - The MD5/SHA256 checksum of all the data preceding the checksum.
234  
-	 */
235  
-	unsigned char data[];
236  
-} ATTRIBUTE_PACKED;
  109
+#define GROWL_NOTIFICATION_CLICK_CONTENT_TYPE			@"NotificationCallbackClickContextType"
  110
+#define GROWL_NOTIFICATION_CALLBACK_URL_TARGET			@"NotificationCallbackURLTarget"
  111
+#define GROWL_NOTIFICATION_CALLBACK_URL_TARGET_METHOD	@"NotificationCallbackURLTargetMethod"
  112
+#define GROWL_NOTIFICATION_INTERNAL_ID					@"Growl Internal Notification ID"
  113
+#define GROWL_NOTIFICATION_GNTP_RECEIVED				@"GNTP Notification Received Headers"
  114
+#define GROWL_NOTIFICATION_GNTP_SENT_BY					@"GNTP Notification Sent-By"
  115
+#define GROWL_GNTP_ORIGIN_MACHINE						@"GNTP Origin-Machine-Name"
  116
+#define GROWL_GNTP_ORIGIN_SOFTWARE_NAME					@"GNTP Origin-Software-Name"
  117
+#define GROWL_GNTP_ORIGIN_SOFTWARE_VERSION				@"GNTP Origin-Software-Version"
  118
+#define GROWL_GNTP_ORIGIN_PLATFORM_NAME					@"GNTP Origin-Platform-Name"
  119
+#define GROWL_GNTP_ORIGIN_PLATFORM_VERSION				@"GNTP Origin-Platform-Versin"
237 120
 
238 121
 /*!	@defined	GrowlEnabledKey
239 122
  *	@abstract	Preference key controlling whether Growl is enabled.
@@ -255,6 +138,11 @@ struct GrowlNetworkNotification {
255 138
  */
256 139
 #define GROWL_SCREENSHOT_MODE			XSTR("ScreenshotMode")
257 140
 
  141
+/*!	@defined	GROWL_CLICK_HANDLER_ENABLED
  142
+ *	@abstract	An NSNumber boolean indicating whether click notifications should be sent to the originating application
  143
+ */
  144
+#define GROWL_CLICK_HANDLER_ENABLED		XSTR("ClickHandlerEnabled")
  145
+
258 146
 /*!	@defined	GROWL_APP_LOCATION
259 147
  *	@abstract	The location of this application.
260 148
  *	@discussion	Contains either the POSIX path to the application, or a file-data dictionary (as used by the Dock).
@@ -262,12 +150,12 @@ struct GrowlNetworkNotification {
262 150
  */
263 151
 #define GROWL_APP_LOCATION				XSTR("AppLocation")
264 152
 
265  
-/*!	@defined	GROWL_REMOTE_ADDRESS
  153
+/*!	@defined	GROWL_UDP_REMOTE_ADDRESS
266 154
  *	@abstract	The address of the host who sent this notification/registration.
267 155
  *	@discussion	Contains an NSData with the address of the remote host who
268 156
  *    sent this notification/registration.
269 157
  */
270  
-#define GROWL_REMOTE_ADDRESS			XSTR("RemoteAddress")
  158
+#define GROWL_UDP_REMOTE_ADDRESS			XSTR("RemoteAddress")
271 159
 
272 160
 /*!
273 161
  *	@defined    GROWL_PREFPANE_BUNDLE_IDENTIFIER
@@ -471,6 +359,11 @@ struct GrowlNetworkNotification {
471 359
 	CFRelease(floatValue); } while(0)
472 360
 #endif
473 361
 
  362
+/*!	@defined	GROWL_CLOSE_NOTIFICATION
  363
+ *	@abstract	Notification to close a Growl notification
  364
+ *	@discussion	The object of this notification is the GROWL_NOTIFICATION_INTERNAL_ID of the notification
  365
+ */
  366
+#define GROWL_CLOSE_NOTIFICATION XSTR("GrowlCloseNotification")
474 367
 
475 368
 /*!	@defined	GROWL_CLOSE_ALL_NOTIFICATIONS
476 369
  *	@abstract	Notification to close all Growl notifications
@@ -487,4 +380,29 @@ struct GrowlNetworkNotification {
487 380
  */
488 381
 #define FLOAT_EQ(x,y) (((y - FLT_EPSILON) < x) && (x < (y + FLT_EPSILON)))
489 382
 
  383
+#if GROWLHELPERAPP
  384
+extern NSString *const GrowlErrorDomain;
  385
+
  386
+enum {
  387
+	GrowlPluginErrorMinimum = 1000,
  388
+	GrowlPluginErrorMaximum = GrowlPluginErrorMinimum + 999,
  389
+	
  390
+	GrowlDisplayErrorMinimum = GrowlPluginErrorMaximum  + 1,
  391
+	GrowlDisplayErrorMaximum = GrowlDisplayErrorMinimum + 999,
  392
+	
  393
+	GrowlPathwayErrorMinimum = GrowlDisplayErrorMaximum + 1,
  394
+	GrowlPathwayErrorMaximum = GrowlPathwayErrorMinimum + 999,
  395
+};
  396
+
  397
+enum GrowlPathwayErrorCode {
  398
+	//A pathway that can be toggled on or off could not be toggled on.
  399
+	GrowlPathwayErrorCouldNotEnable = GrowlPathwayErrorMinimum,
  400
+	//A pathway that can be toggled on or off could not be toggled off.
  401
+	GrowlPathwayErrorCouldNotDisable,
  402
+};
  403
+
  404
+#endif
  405
+
  406
+#define GrowlVisualDisplayWindowLevel NSStatusWindowLevel
  407
+
490 408
 #endif //ndef _GROWL_GROWLDEFINESINTERNAL_H
20  source/Growl/GrowlDisplayPlugin.h → GrowlDisplayPlugin.h
@@ -2,14 +2,14 @@
2 2
 //	GrowlDisplayPlugin.h
3 3
 //	Growl
4 4
 //
5  
-//	Created by Mac-arena the Bored Zo on 2005-06-01.
  5
+//	Created by Peter Hosey on 2005-06-01.
6 6
 //	Copyright 2005-2006 The Growl Project. All rights reserved.
7 7
 //
8 8
 
9 9
 #import <Cocoa/Cocoa.h>
10 10
 #import "GrowlPlugin.h"
11 11
 
12  
-@class GrowlApplicationNotification, GrowlNotificationDisplayBridge;
  12
+@class GrowlNotification, GrowlNotificationDisplayBridge;
13 13
 @class GrowlDisplayWindowController;
14 14
 
15 15
 //Info.plist keys for plug-in bundles.
@@ -38,19 +38,9 @@ extern NSString *GrowlDisplayPluginInfoKeyWindowNibName;
38 38
  *	@abstract	Display a notification to the user.
39 39
  *	@param	notification	The notification to display.
40 40
  *  @discussion Unless you have a specific reason to override this method you should not do so.
41  
- *  All the magic should happen in <code>configureBridge:</code>
  41
+ *  All the magic should happen in the window controller's <code>setNotification:</code>
42 42
  */
43  
-- (void) displayNotification:(GrowlApplicationNotification *)notification;
44  
-
45  
-/*!	@method	configureBridge:
46  
- *	@abstract	Configures the chosen bridge before a notificaion is displayed.
47  
- *	@param	bridge	The bridge to configure.
48  
- *  @discussion This is the place where the magic happens.  Override this method and do any
49  
- *  specific configuration here.  This is the last port-of-call before a notification is displayed.
50  
- *  The default implementation does nothing so it is important that you override and provide an
51  
- *  implementation.
52  
- */
53  
-- (void) configureBridge:(GrowlNotificationDisplayBridge *)theBridge;
  43
+- (void) displayNotification:(GrowlNotification *)notification;
54 44
 
55 45
 /*!	@method	windowNibName
56 46
  *	@abstract	Returns the name of the display's sole nib file (resulting in
@@ -72,4 +62,6 @@ extern NSString *GrowlDisplayPluginInfoKeyWindowNibName;
72 62
 /* */
73 63
 - (void) displayWindowControllerDidTakeDownWindow:(GrowlDisplayWindowController *)wc;
74 64
 
  65
+- (BOOL) queuesNotifications;
  66
+
75 67
 @end
55  source/Growl/GrowlDisplayWindowController.h → GrowlDisplayWindowController.h
@@ -2,8 +2,8 @@
2 2
 //  GrowlDisplayWindowController.h
3 3
 //  Display Plugins
4 4
 //
5  
-//  Created by Mac-arena the Bored Zo on 2005-06-03.
6  
-//  Copyright 2004-2006 The Growl Project. All rights reserved.
  5
+//  Created by Peter Hosey on 2005-06-03.
  6
+//  Copyright 2004-2011 The Growl Project, LLC. All rights reserved.
7 7
 //
8 8
 
9 9
 #import <Cocoa/Cocoa.h>
@@ -16,7 +16,7 @@
16 16
 #define GrowlDisplayWindowControllerDidTakeWindowDownNotification	@"GrowlDisplayWindowControllerDidTakeWindowDownNotification"
17 17
 #define GrowlDisplayWindowControllerNotificationBlockedNotification	@"GrowlDisplayWindowControllerNotificationBlockedNotification"
18 18
 
19  
-@class GrowlWindowTransition, GrowlNotificationDisplayBridge, GrowlApplicationNotification, GrowlNotificationView;
  19
+@class GrowlWindowTransition, GrowlNotificationDisplayBridge, GrowlNotification, GrowlNotificationView;
20 20
 
21 21
 typedef enum {
22 22
 	GrowlDisplayUnknownStatus = 0,
@@ -25,13 +25,13 @@ typedef enum {
25 25
 	GrowlDisplayTransitioningOutStatus
26 26
 } GrowlDisplayStatus;
27 27
 
28  
-@interface GrowlDisplayWindowController : NSWindowController {
29  
-	GrowlApplicationNotification    *notification;	/* not sure if this will be needed since binding may work without */
  28
+@interface GrowlDisplayWindowController : NSWindowController <NSWindowDelegate, NSAnimationDelegate> {
  29
+	GrowlNotification    *notification;	/* not sure if this will be needed since binding may work without */
30 30
 	GrowlNotificationDisplayBridge  *bridge;
31 31
 
32 32
 	SEL					             action;
33 33
 	id					             target;
34  
-	id					             clickContext;
  34
+	BOOL							 didClick;
35 35
 	NSNumber			             *clickHandlerEnabled;
36 36
 	NSString			             *appName;
37 37
 	NSNumber			             *appPid;
@@ -39,7 +39,7 @@ typedef enum {
39 39
 	id					             delegate;
40 40
 
41 41
 	BOOL				             ignoresOtherNotifications;
42  
-
  42
+    
43 43
 	CFTimeInterval                   transitionDuration;
44 44
 	NSMapTable                       *startTimes;
45 45
 	NSMapTable                       *endTimes;
@@ -48,11 +48,13 @@ typedef enum {
48 48
 	
49 49
 	CFTimeInterval		             displayDuration;
50 50
 	NSUInteger			             screenNumber;
51  
-	NSUInteger			             screenshotMode: 1;
  51
+	BOOL                             screenshotModeEnabled;
52 52
 
53 53
 	BOOL							 userRequestedClose;
54 54
 
55 55
 	unsigned			             WCReserved: 30;
  56
+    NSInteger failureCount;
  57
+   BOOL                       queuesNotes;
56 58
 }
57 59
 
58 60
 - (id) initWithWindowNibName:(NSString *)windowNibName bridge:(GrowlNotificationDisplayBridge *)displayBridge;
@@ -108,44 +110,23 @@ typedef enum {
108 110
 #pragma mark -
109 111
 
110 112
 /* Not to be called directly...these are managed via bindings */
111  
-- (GrowlApplicationNotification *) notification;
112  
-- (void) setNotification:(GrowlApplicationNotification *)theNotification;
  113
+- (GrowlNotification *) notification;
  114
+- (void) setNotification:(GrowlNotification *)theNotification;
113 115
 
114 116
 /* Used to make an existing window controller update to a new or modified notification */
115  
-- (void) updateToNotification:(GrowlApplicationNotification *)theNotification;
  117
+- (void) updateToNotification:(GrowlNotification *)theNotification;
116 118
 
117 119
 /* Not to be called directly...for KVO compliance only */
118 120
 - (GrowlNotificationDisplayBridge *)bridge;
119 121
 - (void) setBridge:(GrowlNotificationDisplayBridge *)theBridge;
120 122
 
121 123
 /* Subclasses should call this *after* calling -[super initWithWindw:] to set the overall transition duration ... could offer a user pref as well */
122  
-- (CFTimeInterval) transitionDuration;
123  
-- (void) setTransitionDuration:(CFTimeInterval)theTransitionDuration;
124  
-
125  
-- (CFTimeInterval) displayDuration;
126  
-- (void) setDisplayDuration:(CFTimeInterval)newDuration;
127  
-
128  
-- (BOOL) screenshotModeEnabled;
129  
-- (void) setScreenshotModeEnabled:(BOOL) newScreenshotMode;
130 124
 
131 125
 - (NSScreen *) screen;
132 126
 - (void) setScreen:(NSScreen *)newScreen;
133 127
 - (void) setScreenNumber:(NSUInteger)newScreenNumber;
134 128
 
135  
-- (id) target;
136  
-- (void) setTarget:(id)object;
137  
-
138  
-- (SEL) action;
139  
-- (void) setAction:(SEL)selector;
140  
-
141  
-- (NSString *) notifyingApplicationName;
142  
-- (void) setNotifyingApplicationName:(NSString *)inAppName;
143  
-
144  
-- (NSNumber *) notifyingApplicationProcessIdentifier;
145  
-- (void) setNotifyingApplicationProcessIdentifier:(NSNumber *)inAppPid;
146  
-
147 129
 - (id) clickContext;
148  
-- (void) setClickContext:(id) clickContext;
149 130
 
150 131
 - (void) notificationClicked:(id) sender;
151 132
 
@@ -158,9 +139,13 @@ typedef enum {
158 139
 - (NSNumber *) clickHandlerEnabled;
159 140
 - (void) setClickHandlerEnabled:(NSNumber *)flag;
160 141
 
161  
-- (BOOL) ignoresOtherNotifications;
162  
-- (void) setIgnoresOtherNotifications:(BOOL)flag;
163  
-
  142
+@property (nonatomic, assign) BOOL ignoresOtherNotifications;
  143
+@property (nonatomic, assign) SEL action;
  144
+@property (nonatomic, retain) id target;
  145
+@property (nonatomic, assign) BOOL screenshotModeEnabled;
  146
+@property (nonatomic, assign) CFTimeInterval displayDuration;
  147
+@property (nonatomic, assign) CFTimeInterval transitionDuration;
  148
+@property (nonatomic, assign) NSInteger failureCount;
164 149
 @end
165 150
 
166 151
 /*!
79  GrowlNotification.h
... ...
@@ -0,0 +1,79 @@
  1
+//
  2
+//	GrowlNotification.h
  3
+//	Growl
  4
+//
  5
+//	Copyright 2005-2011 The Growl Project. All rights reserved.
  6
+//
  7
+
  8
+@interface GrowlNotification: NSObject
  9
+{
  10
+	NSString *name;
  11
+	NSString *applicationName;
  12
+
  13
+	NSString *title;
  14
+	NSString *messageText;
  15
+
  16
+	NSImage *icon;
  17
+
  18
+	NSString *identifier;
  19
+
  20
+	BOOL sticky;
  21
+	NSInteger priority;
  22
+
  23
+	NSDictionary *auxiliaryDictionary;
  24
+
  25
+	NSDictionary *cachedDictionaryRepresentation;
  26
+}
  27
+
  28
++ (GrowlNotification *) notificationWithDictionary:(NSDictionary *)dict;
  29
+- (GrowlNotification *) initWithDictionary:(NSDictionary *)dict;
  30
+
  31
+//You can pass nil for description.
  32
+- (GrowlNotification *) initWithName:(NSString *)newName
  33
+                                applicationName:(NSString *)newAppName
  34
+                                          title:(NSString *)newTitle
  35
+                                    description:(NSString *)newDesc;
  36
+
  37
+#pragma mark -
  38
+
  39
+/*As of 1.3, this returns:
  40
+ *	*	GROWL_NOTIFICATION_NAME
  41
+ *	*	GROWL_APP_NAME
  42
+ *	*	GROWL_NOTIFICATION_TITLE
  43
+ *	*	GROWL_NOTIFICATION_DESCRIPTION
  44
+ *You can pass this set to -dictionaryRepresentationWithKeys:.
  45
+ */
  46
++ (NSSet *) standardKeys;
  47
+
  48
+//Same as dictionaryRepresentationWithKeys:nil.
  49
+- (NSDictionary *) dictionaryRepresentation;
  50
+
  51
+/*With nil, returns all of the standard keys plus the auxiliary dictionary.
  52
+ *With non-nil, returns only the keys (from internal storage plus the auxiliary
  53
+ *	dictionary) that are in the set.
  54
+ *In other words, returns the intersection of the standard dictionary keys, the
  55
+ *	auxiliary dictionary, and the provided keys.
  56
+ */
  57
+- (NSDictionary *) dictionaryRepresentationWithKeys:(NSSet *)keys;
  58
+
  59
+#pragma mark -
  60
+
  61
+@property(nonatomic, copy) NSString *name;
  62
+@property(nonatomic, copy) NSString *applicationName;
  63
+
  64
+@property(nonatomic, copy) NSString *title;
  65
+@property(nonatomic, copy) NSString *messageText;
  66
+
  67
+//Compatibility alias for messageText.
  68
+- (NSString *) notificationDescription;
  69
+
  70
+@property(nonatomic, copy) NSImage *icon;
  71
+
  72
+@property(nonatomic, copy) NSString *identifier;
  73
+
  74
+@property(nonatomic, assign, getter=isSticky) BOOL sticky;
  75
+@property(nonatomic, assign) NSInteger priority;
  76
+
  77
+@property(nonatomic, copy) NSDictionary *auxiliaryDictionary;
  78
+
  79
+@end
18  source/Growl/GrowlNotificationDisplayBridge.h → GrowlNotificationDisplayBridge.h
@@ -2,13 +2,13 @@
2 2
 //  GrowlNotificationDisplayBridge.h
3 3
 //  Growl
4 4
 //
5  
-//  Created by Mac-arena the Bored Zo on 2005-06-05.
  5
+//  Created by Peter Hosey on 2005-06-05.
6 6
 //  Copyright 2005-2006 The Growl Project. All rights reserved.
7 7
 //
8 8
 
9 9
 #import "GrowlDisplayPlugin.h"
10 10
 
11  
-@class GrowlApplicationNotification, GrowlDisplayWindowController;
  11
+@class GrowlNotification, GrowlDisplayWindowController;
12 12
 
13 13
 /*!	@class	GrowlNotificationDisplayBridge
14 14
  *	@brief	The File's Owner of a display nib.
@@ -22,7 +22,7 @@
22 22
 
23 23
 @interface GrowlNotificationDisplayBridge : NSObject {
24 24
 	GrowlDisplayPlugin           *display;
25  
-	GrowlApplicationNotification *notification;
  25
+	GrowlNotification *notification;
26 26
 	NSString                     *windowNibName;
27 27
 	NSMutableArray               *windowControllers;
28 28
 	Class                        windowControllerClass;
@@ -40,7 +40,7 @@
40 40
  *	@result	An autoreleased display bridge.
41 41
  */
42 42
 + (GrowlNotificationDisplayBridge *) bridgeWithDisplay:(GrowlDisplayPlugin *)newDisplay
43  
-										  notification:(GrowlApplicationNotification *)newNotification
  43
+										  notification:(GrowlNotification *)newNotification
44 44
 								 windowControllerClass:(Class)wcc;
45 45
 
46 46
 /*!	@fn	bridgeWithDisplay:notification:windowNibName:windowControllerClass:
@@ -55,7 +55,7 @@
55 55
  *	@result	An autoreleased display bridge.
56 56
  */
57 57
 + (GrowlNotificationDisplayBridge *) bridgeWithDisplay:(GrowlDisplayPlugin *)newDisplay
58  
-										  notification:(GrowlApplicationNotification *)newNotification
  58
+										  notification:(GrowlNotification *)newNotification
59 59
 										 windowNibName:(NSString *)newWindowNibName
60 60
 								 windowControllerClass:(Class)wcc;
61 61
 
@@ -71,7 +71,7 @@
71 71
  *	@result	An display bridge.
72 72
  */
73 73
 - (id) initWithDisplay:(GrowlDisplayPlugin *)newDisplay
74  
-		  notification:(GrowlApplicationNotification *)newNotification
  74
+		  notification:(GrowlNotification *)newNotification
75 75
  windowControllerClass:(Class)wcc;
76 76
 
77 77
 /*!	@fn	initWithDisplay:notification:windowNibName:windowControllerClass:
@@ -86,7 +86,7 @@
86 86
  *	@result	An display bridge.
87 87
  */
88 88
 - (id) initWithDisplay:(GrowlDisplayPlugin *)newDisplay
89  
-		  notification:(GrowlApplicationNotification *)newNotification
  89
+		  notification:(GrowlNotification *)newNotification
90 90
 		 windowNibName:(NSString *)newWindowNibName
91 91
  windowControllerClass:(Class)wcc;
92 92
 
@@ -124,7 +124,7 @@
124 124
  *
125 125
  *	@return	The notification being displayed.
126 126
  */
127  
-- (GrowlApplicationNotification *) notification;
  127
+- (GrowlNotification *) notification;
128 128
 
129 129
 /*!	@fn	windowNibName
130 130
  *	@brief	Returns the window nib name passed in by \c GrowlDisplayPlugin.
@@ -210,7 +210,7 @@
210 210
  * @par
211 211
  * The notification
212 212
  */
213  
-- (void)setNotification:(GrowlApplicationNotification *)inNotification;
  213
+- (void)setNotification:(GrowlNotification *)inNotification;
214 214
 @end
215 215
 
216 216
 @interface NSArray (GrowlDisplaySearching)
32  source/Growl/GrowlPlugin.h → GrowlPlugin.h
@@ -2,7 +2,7 @@
2 2
 //  GrowlPlugin.h
3 3
 //  Growl
4 4
 //
5  
-//  Created by Mac-arena the Bored Zo on 2005-06-01.
  5
+//  Created by Peter Hosey on 2005-06-01.
6 6
 //  Copyright 2005-2006 The Growl Project. All rights reserved.
7 7
 //
8 8
 
@@ -18,7 +18,7 @@
18 18
 @interface GrowlPlugin : NSObject {
19 19
 	NSString *pluginName, *pluginAuthor, *pluginVersion, *pluginDesc;
20 20
 	NSBundle *pluginBundle;
21  
-	NSString *pluginPathname;
  21
+	NSString *pluginPathName;
22 22
 
23 23
 	NSPreferencePane *preferencePane;
24 24
 	NSString	     *prefDomain;
@@ -42,49 +42,47 @@
42 42
  */
43 43
 - (id) initWithBundle:(NSBundle *)bundle;
44 44
 
45  
-
46 45
 /*!
47 46
  * @method name
48 47
  * @abstract Returns the name of the receiver.
49 48
  */
50  
-- (NSString *) name;
  49
+@property (nonatomic, copy) NSString *name;
51 50
 
52 51
 /*!
53 52
  * @method author
54 53
  * @abstract Returns the author of the receiver.
55 54
  */
56  
-- (NSString *) author;
  55
+@property (nonatomic, copy) NSString *author;
57 56
 
58 57
 /*!
59  
- * @method pluginDescription
60  
- * @abstract Returns the description of the receiver.
  58
+ * @method version
  59
+ * @abstract Returns the version of the receiver.
61 60
  */
62  
-- (NSString *) pluginDescription;
  61
+@property (nonatomic, copy) NSString *version;
63 62
 
64 63
 /*!
65  
- * @method version
66  
- * @abstract Returns the version of the receiver.
  64
+ * @method pluginDescription
  65
+ * @abstract Returns the plugin's description.
67 66
  */
68  
-- (NSString *) version;
  67
+@property (nonatomic, copy) NSString *pluginDescription;
69 68
 
70 69
 /*!
71 70
  * @method bundle
72 71
  * @abstract Returns the bundle of the receiver.
73 72
  */
74  
-- (NSBundle *) bundle;
  73
+@property (nonatomic, retain) NSBundle *bundle;
75 74
 
76 75
 /*!
77 76
  * @method pathname
78 77
  * @abstract Returns the pathname of the receiver.
79 78
  */
80  
-- (NSString *) pathname;
  79
+@property (nonatomic, copy) NSString *pathname;
81 80
 
82 81
 /*!
83  
-* @method pathname
  82
+ * @method pathname
84 83
  * @abstract Returns the string used to access the preference domain of the receiver.
85 84
  */
86  
-- (NSString *) prefDomain;
87  
-
  85
+@property (nonatomic, retain) NSString *prefDomain;
88 86
 
89 87
 /*!	@method	preferencePane
90 88
  *	@abstract	Return an <code>NSPreferencePane</code> instance that manages
@@ -100,6 +98,6 @@
100 98
  *	 The default implementation of this method returns <code>nil</code>.
101 99
  *	@result	The preference pane. Can be <code>nil</code>.
102 100
  */
103  
-- (NSPreferencePane *) preferencePane;
  101
+@property (nonatomic, assign) NSPreferencePane *preferencePane;
104 102
 
105 103
 @end
55  GrowlPluginPreferenceStrings.h
... ...
@@ -0,0 +1,55 @@
  1
+//
  2
+//  GrowlPluginPreferenceStrings.h
  3
+//  Growl
  4
+//
  5
+//  Created by Daniel Siemer on 1/30/12.
  6
+//  Copyright (c) 2012 The Growl Project. All rights reserved.
  7
+//
  8
+
  9
+/* FOR GROWL DEVELOPED COCOA PLUGINS ONLY AT THIS TIME, NOT STABLE */
  10
+
  11
+#import <Foundation/Foundation.h>
  12
+
  13
+#define GrowlDisplayOpacity NSLocalizedStringFromTable(@"Opacity:", @"PluginPrefStrings", @"How clear the display is")
  14
+#define GrowlDisplayDuration NSLocalizedStringFromTable(@"Duration:", @"PluginPrefStrings", @"How long a notification will stay on screen")
  15
+
  16
+#define GrowlDisplayPriority NSLocalizedStringFromTable(@"Priority: (low to high)", @"PluginPrefStrings", @"Label for columns of color wells for various priority levels")
  17
+#define GrowlDisplayTextColor NSLocalizedStringFromTable(@"Text", @"PluginPrefStrings", @"Label for row of color wells for the text element of the plugin")
  18
+#define GrowlDisplayBackgroundColor NSLocalizedStringFromTable(@"Background", @"PluginPrefStrings", @"Label for row of color wells for the background of the plugin")
  19
+
  20
+#define GrowlDisplayLimitLines NSLocalizedStringFromTable(@"Limit to 2-5 lines", @"PluginPrefStrings", @"Checkbox to limit the display to 2-5 lines")
  21
+#define GrowlDisplayScreen NSLocalizedStringFromTable(@"Screen:", @"PluginPrefStrings", @"Label for box to select screen for display to use")
  22
+#define GrowlDisplaySize NSLocalizedStringFromTable(@"Size:", @"PluginPrefStrings", @"Label for pop up box for selecting the size of the display")
  23
+#define GrowlDisplaySizeNormal NSLocalizedStringFromTable(@"Normal", @"PluginPrefStrings", @"Normal size for the display")
  24
+#define GrowlDisplaySizeLarge NSLocalizedStringFromTable(@"Large", @"PluginPrefStrings", @"Large size for the display")
  25
+#define GrowlDisplaySizeSmall NSLocalizedStringFromTable(@"Small", @"PluginPrefStrings", @"Small size for the display")
  26
+
  27
+#define GrowlDisplayFloatingIcon NSLocalizedStringFromTable(@"Floating icon", @"PluginPrefStrings", @"Label for the floating icon checkbox")
  28
+
  29
+#define GrowlDisplayEffect NSLocalizedString(@"Effect:", @"Label for the effect to use")
  30
+#define GrowlDisplayEffectSlide NSLocalizedString(@"Slide", @"A slide effect")
  31
+#define GrowlDisplayEffectFade NSLocalizedString(@"Fade", @"A fade effect")
  32
+
  33
+@interface GrowlPluginPreferenceStrings : NSObject
  34
+
  35
+@property (nonatomic, retain) NSString *growlDisplayOpacity;
  36
+@property (nonatomic, retain) NSString *growlDisplayDuration;
  37
+
  38
+@property (nonatomic, retain) NSString *growlDisplayPriority;
  39
+@property (nonatomic, retain) NSString *growlDisplayTextColor;
  40
+@property (nonatomic, retain) NSString *growlDisplayBackgroundColor;
  41
+
  42
+@property (nonatomic, retain) NSString *growlDisplayLimitLines;
  43
+@property (nonatomic, retain) NSString *growlDisplayScreen;
  44
+@property (nonatomic, retain) NSString *growlDisplaySize;
  45
+@property (nonatomic, retain) NSString *growlDisplaySizeNormal;
  46
+@property (nonatomic, retain) NSString *growlDisplaySizeLarge;
  47
+@property (nonatomic, retain) NSString *growlDisplaySizeSmall;
  48
+
  49
+@property (nonatomic, retain) NSString *growlDisplayFloatingIcon;
  50
+
  51
+@property (nonatomic, retain) NSString *effectLabel;
  52
+@property (nonatomic, retain) NSString *slideEffect;
  53
+@property (nonatomic, retain) NSString *fadeEffect;
  54
+
  55
+@end
179  MountainGrowl.xcodeproj/project.pbxproj
@@ -3,66 +3,41 @@
3 3
 	archiveVersion = 1;
4 4
 	classes = {
5 5
 	};
6  
-	objectVersion = 45;
  6
+	objectVersion = 46;
7 7
 	objects = {
8 8
 
9 9
 /* Begin PBXBuildFile section */
10 10
 		8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
11  
-		932406361077A429008EEF09 /* GrowlSamplePrefs.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9324062E1077A429008EEF09 /* GrowlSamplePrefs.xib */; };
12  
-		932406371077A429008EEF09 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 932406311077A429008EEF09 /* InfoPlist.strings */; };
13  
-		932408901077AF4F008EEF09 /* CFDictionaryAdditions.c in Sources */ = {isa = PBXBuildFile; fileRef = 9324088E1077AF4F008EEF09 /* CFDictionaryAdditions.c */; };
14  
-		932408A41077AF86008EEF09 /* GrowlImageAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 932408A31077AF86008EEF09 /* GrowlImageAdditions.m */; };
15  
-		93596AD60A84222E001C6860 /* GrowlSampleDisplay.m in Sources */ = {isa = PBXBuildFile; fileRef = 93596ACD0A84222E001C6860 /* GrowlSampleDisplay.m */; };
16  
-		93596AD70A84222E001C6860 /* GrowlSamplePrefs.m in Sources */ = {isa = PBXBuildFile; fileRef = 93596ACF0A84222E001C6860 /* GrowlSamplePrefs.m */; };
17  
-		93596AD80A84222E001C6860 /* GrowlSampleWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 93596AD10A84222E001C6860 /* GrowlSampleWindowController.m */; };
18  
-		93596AD90A84222E001C6860 /* GrowlSampleWindowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 93596AD30A84222E001C6860 /* GrowlSampleWindowView.m */; };
19 11
 		93596C160A842461001C6860 /* PreferencePanes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93596C150A842461001C6860 /* PreferencePanes.framework */; };
  12
+		946896D515D3D286006577C2 /* MountainGrowlDisplay.m in Sources */ = {isa = PBXBuildFile; fileRef = 946896D115D3D286006577C2 /* MountainGrowlDisplay.m */; };
  13
+		946896D615D3D286006577C2 /* MountainGrowlPrefs.m in Sources */ = {isa = PBXBuildFile; fileRef = 946896D315D3D286006577C2 /* MountainGrowlPrefs.m */; };
  14
+		946896D715D3D286006577C2 /* MountainGrowlPrefs.xib in Resources */ = {isa = PBXBuildFile; fileRef = 946896D415D3D286006577C2 /* MountainGrowlPrefs.xib */; };
  15
+		94D52B7115D3D313002D6080 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 94D52B6F15D3D313002D6080 /* Localizable.strings */; };
20 16
 /* End PBXBuildFile section */
21 17
 
22 18
 /* Begin PBXFileReference section */
23 19
 		089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
24 20
 		089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
25 21
 		1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
26  
-		32DBCF630370AF2F00C91783 /* Sample_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sample_Prefix.pch; sourceTree = "<group>"; };
  22
+		32DBCF630370AF2F00C91783 /* MountainGrowl_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MountainGrowl_Prefix.pch; sourceTree = "<group>"; };
27 23
 		8D5B49B6048680CD000E48DA /* MountainGrowl.growlView */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MountainGrowl.growlView; sourceTree = BUILT_PRODUCTS_DIR; };
28  
-		9324062F1077A429008EEF09 /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = resources/de.lproj/GrowlSamplePrefs.xib; sourceTree = "<group>"; };
29  
-		932406301077A429008EEF09 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = resources/en.lproj/GrowlSamplePrefs.xib; sourceTree = "<group>"; };
30  
-		932406321077A429008EEF09 /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = resources/en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
31  
-		932406331077A429008EEF09 /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = resources/fr.lproj/GrowlSamplePrefs.xib; sourceTree = "<group>"; };
32 24
 		932406341077A429008EEF09 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = resources/Info.plist; sourceTree = "<group>"; };
33  
-		932406351077A429008EEF09 /* ja */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ja; path = resources/ja.lproj/GrowlSamplePrefs.xib; sourceTree = "<group>"; };
34  
-		932407F21077AABC008EEF09 /* GrowlDisplayPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlDisplayPlugin.h; path = source/Growl/GrowlDisplayPlugin.h; sourceTree = "<group>"; };
35  
-		932407F51077AACC008EEF09 /* GrowlPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlPlugin.h; path = source/Growl/GrowlPlugin.h; sourceTree = "<group>"; };
36  
-		932407FB1077AAF9008EEF09 /* GrowlDisplayWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlDisplayWindowController.h; path = source/Growl/GrowlDisplayWindowController.h; sourceTree = "<group>"; };
37  
-		932407FE1077AB18008EEF09 /* GrowlPositionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlPositionController.h; path = source/Growl/GrowlPositionController.h; sourceTree = "<group>"; };
38  
-		932407FF1077AB28008EEF09 /* GrowlDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlDefines.h; path = source/Growl/GrowlDefines.h; sourceTree = "<group>"; };
39  
-		932408001077AB28008EEF09 /* GrowlDefinesInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlDefinesInternal.h; path = source/Growl/GrowlDefinesInternal.h; sourceTree = "<group>"; };
40  
-		932408031077AB5F008EEF09 /* GrowlAbstractSingletonObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlAbstractSingletonObject.h; path = source/Growl/GrowlAbstractSingletonObject.h; sourceTree = "<group>"; };
41  
-		932408341077ABA2008EEF09 /* GrowlPositioningDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlPositioningDefines.h; path = source/Growl/GrowlPositioningDefines.h; sourceTree = "<group>"; };
42  
-		932408371077ABB5008EEF09 /* NSWindow+Transforms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSWindow+Transforms.h"; path = "source/Growl/NSWindow+Transforms.h"; sourceTree = "<group>"; };
43  
-		9324084E1077AC69008EEF09 /* GrowlApplicationNotification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlApplicationNotification.h; path = source/Growl/GrowlApplicationNotification.h; sourceTree = "<group>"; };
44  
-		932408771077AD8F008EEF09 /* GrowlFadingWindowTransition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlFadingWindowTransition.h; sourceTree = "<group>"; };
45  
-		932408781077AD8F008EEF09 /* GrowlFlippingWindowTransition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlFlippingWindowTransition.h; sourceTree = "<group>"; };
46  
-		932408791077AD8F008EEF09 /* GrowlScaleWindowTransition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlScaleWindowTransition.h; sourceTree = "<group>"; };
47  
-		9324087A1077AD8F008EEF09 /* GrowlShrinkingWindowTransition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlShrinkingWindowTransition.h; sourceTree = "<group>"; };
48  
-		9324087B1077AD8F008EEF09 /* GrowlSlidingWindowTransition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlSlidingWindowTransition.h; sourceTree = "<group>"; };
49  
-		9324087C1077AD8F008EEF09 /* GrowlWindowTransition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlWindowTransition.h; sourceTree = "<group>"; };
50  
-		9324087D1077AD8F008EEF09 /* GrowlWipeWindowTransition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlWipeWindowTransition.h; sourceTree = "<group>"; };
51  
-		9324088E1077AF4F008EEF09 /* CFDictionaryAdditions.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = CFDictionaryAdditions.c; path = source/Growl/CFDictionaryAdditions.c; sourceTree = "<group>"; };
52  
-		9324088F1077AF4F008EEF09 /* CFDictionaryAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CFDictionaryAdditions.h; path = source/Growl/CFDictionaryAdditions.h; sourceTree = "<group>"; };
53  
-		932408931077AF63008EEF09 /* CFGrowlDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CFGrowlDefines.h; path = source/Growl/CFGrowlDefines.h; sourceTree = "<group>"; };
54  
-		932408A21077AF86008EEF09 /* GrowlImageAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlImageAdditions.h; path = source/Growl/GrowlImageAdditions.h; sourceTree = "<group>"; };
55  
-		932408A31077AF86008EEF09 /* GrowlImageAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GrowlImageAdditions.m; path = source/Growl/GrowlImageAdditions.m; sourceTree = "<group>"; };
56  
-		932408AE1077AFB0008EEF09 /* GrowlNotificationDisplayBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GrowlNotificationDisplayBridge.h; path = source/Growl/GrowlNotificationDisplayBridge.h; sourceTree = "<group>"; };
57  
-		93596ACC0A84222E001C6860 /* GrowlSampleDisplay.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GrowlSampleDisplay.h; sourceTree = "<group>"; };
58  
-		93596ACD0A84222E001C6860 /* GrowlSampleDisplay.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = GrowlSampleDisplay.m; sourceTree = "<group>"; };
59  
-		93596ACE0A84222E001C6860 /* GrowlSamplePrefs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GrowlSamplePrefs.h; sourceTree = "<group>"; };
60  
-		93596ACF0A84222E001C6860 /* GrowlSamplePrefs.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = GrowlSamplePrefs.m; sourceTree = "<group>"; };
61  
-		93596AD00A84222E001C6860 /* GrowlSampleWindowController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GrowlSampleWindowController.h; sourceTree = "<group>"; };
62  
-		93596AD10A84222E001C6860 /* GrowlSampleWindowController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = GrowlSampleWindowController.m; sourceTree = "<group>"; };
63  
-		93596AD20A84222E001C6860 /* GrowlSampleWindowView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GrowlSampleWindowView.h; sourceTree = "<group>"; };
64  
-		93596AD30A84222E001C6860 /* GrowlSampleWindowView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = GrowlSampleWindowView.m; sourceTree = "<group>"; };
65 25
 		93596C150A842461001C6860 /* PreferencePanes.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PreferencePanes.framework; path = /System/Library/Frameworks/PreferencePanes.framework; sourceTree = "<absolute>"; };
  26
+		946896D015D3D286006577C2 /* MountainGrowlDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MountainGrowlDisplay.h; sourceTree = "<group>"; };
  27
+		946896D115D3D286006577C2 /* MountainGrowlDisplay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MountainGrowlDisplay.m; sourceTree = "<group>"; };
  28
+		946896D215D3D286006577C2 /* MountainGrowlPrefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MountainGrowlPrefs.h; sourceTree = "<group>"; };
  29
+		946896D315D3D286006577C2 /* MountainGrowlPrefs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MountainGrowlPrefs.m; sourceTree = "<group>"; };
  30
+		946896D415D3D286006577C2 /* MountainGrowlPrefs.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MountainGrowlPrefs.xib; sourceTree = "<group>"; };
  31
+		94D52B7015D3D313002D6080 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = resources/en.lproj/Localizable.strings; sourceTree = "<group>"; };
  32
+		94D52B7215D3D31E002D6080 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
  33
+		94D52BC715D3D5CA002D6080 /* GrowlPluginPreferenceStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlPluginPreferenceStrings.h; sourceTree = "<group>"; };
  34
+		94D52BC815D3D5CA002D6080 /* GrowlDisplayPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlDisplayPlugin.h; sourceTree = "<group>"; };
  35
+		94D52BC915D3D5CA002D6080 /* GrowlDisplayWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlDisplayWindowController.h; sourceTree = "<group>"; };
  36
+		94D52BCA15D3D5CA002D6080 /* GrowlNotificationDisplayBridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlNotificationDisplayBridge.h; sourceTree = "<group>"; };
  37
+		94D52BCC15D3D5E3002D6080 /* GrowlPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrowlPlugin.h; sourceTree = "<group>"; };
  38
+		94D52BCD15D3D678002D6080 /* GrowlNotification.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GrowlNotification.h; sourceTree = "<group>"; };
  39
+		94D52BCE15D3D6EE002D6080 /* GrowlDefines.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GrowlDefines.h; sourceTree = "<group>"; };
  40
+		94D52BCF15D3D72C002D6080 /* GrowlDefinesInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GrowlDefinesInternal.h; sourceTree = "<group>"; };
66 41
 		D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
67 42
 /* End PBXFileReference section */
68 43
 
@@ -104,8 +79,7 @@
104 79
 		089C167CFE841241C02AAC07 /* Resources */ = {
105 80
 			isa = PBXGroup;
106 81
 			children = (
107  
-				9324062E1077A429008EEF09 /* GrowlSamplePrefs.xib */,
108  
-				932406311077A429008EEF09 /* InfoPlist.strings */,
  82
+				94D52B6F15D3D313002D6080 /* Localizable.strings */,
109 83
 				932406341077A429008EEF09 /* Info.plist */,
110 84
 			);
111 85
 			name = Resources;
@@ -141,7 +115,7 @@
141 115
 		32C88E010371C26100C91783 /* Other Sources */ = {
142 116
 			isa = PBXGroup;
143 117
 			children = (
144  
-				32DBCF630370AF2F00C91783 /* Sample_Prefix.pch */,
  118
+				32DBCF630370AF2F00C91783 /* MountainGrowl_Prefix.pch */,
145 119
 			);
146 120
 			name = "Other Sources";
147 121
 			sourceTree = "<group>";
@@ -149,53 +123,26 @@
149 123
 		9324062D1077A400008EEF09 /* Growl */ = {
150 124
 			isa = PBXGroup;
151 125
 			children = (
152  
-				932408761077AD8F008EEF09 /* Transitions */,
153  
-				932407F21077AABC008EEF09 /* GrowlDisplayPlugin.h */,
154  
-				932408AE1077AFB0008EEF09 /* GrowlNotificationDisplayBridge.h */,
155  
-				932407FB1077AAF9008EEF09 /* GrowlDisplayWindowController.h */,
156  
-				932407F51077AACC008EEF09 /* GrowlPlugin.h */,
157  
-				932407FE1077AB18008EEF09 /* GrowlPositionController.h */,
158  
-				932407FF1077AB28008EEF09 /* GrowlDefines.h */,
159  
-				932408001077AB28008EEF09 /* GrowlDefinesInternal.h */,
160  
-				932408031077AB5F008EEF09 /* GrowlAbstractSingletonObject.h */,
161  
-				932408341077ABA2008EEF09 /* GrowlPositioningDefines.h */,
162  
-				932408371077ABB5008EEF09 /* NSWindow+Transforms.h */,
163  
-				9324084E1077AC69008EEF09 /* GrowlApplicationNotification.h */,
164  
-				9324088E1077AF4F008EEF09 /* CFDictionaryAdditions.c */,
165  
-				9324088F1077AF4F008EEF09 /* CFDictionaryAdditions.h */,
166  
-				932408931077AF63008EEF09 /* CFGrowlDefines.h */,
167  
-				932408A21077AF86008EEF09 /* GrowlImageAdditions.h */,
168  
-				932408A31077AF86008EEF09 /* GrowlImageAdditions.m */,
  126
+				94D52BC715D3D5CA002D6080 /* GrowlPluginPreferenceStrings.h */,
  127
+				94D52BC815D3D5CA002D6080 /* GrowlDisplayPlugin.h */,
  128
+				94D52BC915D3D5CA002D6080 /* GrowlDisplayWindowController.h */,
  129
+				94D52BCA15D3D5CA002D6080 /* GrowlNotificationDisplayBridge.h */,
  130
+				94D52BCC15D3D5E3002D6080 /* GrowlPlugin.h */,
  131
+				94D52BCD15D3D678002D6080 /* GrowlNotification.h */,
  132
+				94D52BCE15D3D6EE002D6080 /* GrowlDefines.h */,
  133
+				94D52BCF15D3D72C002D6080 /* GrowlDefinesInternal.h */,
169 134
 			);
170 135
 			name = Growl;
171 136
 			sourceTree = "<group>";
172 137
 		};
173  
-		932408761077AD8F008EEF09 /* Transitions */ = {
174  
-			isa = PBXGroup;
175  
-			children = (
176  
-				932408771077AD8F008EEF09 /* GrowlFadingWindowTransition.h */,
177  
-				932408781077AD8F008EEF09 /* GrowlFlippingWindowTransition.h */,
178  
-				932408791077AD8F008EEF09 /* GrowlScaleWindowTransition.h */,
179  
-				9324087A1077AD8F008EEF09 /* GrowlShrinkingWindowTransition.h */,
180  
-				9324087B1077AD8F008EEF09 /* GrowlSlidingWindowTransition.h */,
181  
-				9324087C1077AD8F008EEF09 /* GrowlWindowTransition.h */,
182  
-				9324087D1077AD8F008EEF09 /* GrowlWipeWindowTransition.h */,
183  
-			);
184  
-			name = Transitions;
185  
-			path = source/Growl/Transitions;
186  
-			sourceTree = "<group>";
187  
-		};
188 138
 		93596AC70A84222E001C6860 /* Source */ = {
189 139
 			isa = PBXGroup;
190 140
 			children = (
191  
-				93596ACC0A84222E001C6860 /* GrowlSampleDisplay.h */,
192  
-				93596ACD0A84222E001C6860 /* GrowlSampleDisplay.m */,
193  
-				93596ACE0A84222E001C6860 /* GrowlSamplePrefs.h */,
194  
-				93596ACF0A84222E001C6860 /* GrowlSamplePrefs.m */,
195  
-				93596AD00A84222E001C6860 /* GrowlSampleWindowController.h */,
196  
-				93596AD10A84222E001C6860 /* GrowlSampleWindowController.m */,
197  
-				93596AD20A84222E001C6860 /* GrowlSampleWindowView.h */,
198  
-				93596AD30A84222E001C6860 /* GrowlSampleWindowView.m */,
  141
+				946896D015D3D286006577C2 /* MountainGrowlDisplay.h */,
  142
+				946896D115D3D286006577C2 /* MountainGrowlDisplay.m */,
  143
+				946896D215D3D286006577C2 /* MountainGrowlPrefs.h */,
  144
+				946896D315D3D286006577C2 /* MountainGrowlPrefs.m */,
  145
+				946896D415D3D286006577C2 /* MountainGrowlPrefs.xib */,
199 146
 			);
200 147
 			path = Source;
201 148
 			sourceTree = "<group>";
@@ -226,8 +173,11 @@
226 173
 /* Begin PBXProject section */
227 174
 		089C1669FE841209C02AAC07 /* Project object */ = {
228 175
 			isa = PBXProject;
  176
+			attributes = {
  177
+				LastUpgradeCheck = 0440;
  178
+			};
229 179
 			buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "MountainGrowl" */;
230  
-			compatibilityVersion = "Xcode 3.1";
  180
+			compatibilityVersion = "Xcode 3.2";
231 181
 			developmentRegion = English;
232 182
 			hasScannedForEncodings = 1;
233 183
 			knownRegions = (
@@ -254,8 +204,8 @@
254 204
 			isa = PBXResourcesBuildPhase;
255 205
 			buildActionMask = 2147483647;
256 206
 			files = (
257  
-				932406361077A429008EEF09 /* GrowlSamplePrefs.xib in Resources */,
258  
-				932406371077A429008EEF09 /* InfoPlist.strings in Resources */,
  207
+				946896D715D3D286006577C2 /* MountainGrowlPrefs.xib in Resources */,
  208
+				94D52B7115D3D313002D6080 /* Localizable.strings in Resources */,
259 209
 			);
260 210
 			runOnlyForDeploymentPostprocessing = 0;
261 211
 		};
@@ -266,35 +216,21 @@
266 216
 			isa = PBXSourcesBuildPhase;
267 217
 			buildActionMask = 2147483647;
268 218
 			files = (
269  
-				93596AD60A84222E001C6860 /* GrowlSampleDisplay.m in Sources */,
270  
-				93596AD70A84222E001C6860 /* GrowlSamplePrefs.m in Sources */,
271  
-				93596AD80A84222E001C6860 /* GrowlSampleWindowController.m in Sources */,
272  
-				93596AD90A84222E001C6860 /* GrowlSampleWindowView.m in Sources */,
273  
-				932408901077AF4F008EEF09 /* CFDictionaryAdditions.c in Sources */,
274  
-				932408A41077AF86008EEF09 /* GrowlImageAdditions.m in Sources */,
  219
+				946896D515D3D286006577C2 /* MountainGrowlDisplay.m in Sources */,
  220
+				946896D615D3D286006577C2 /* MountainGrowlPrefs.m in Sources */,
275 221
 			);
276 222
 			runOnlyForDeploymentPostprocessing = 0;
277 223
 		};
278 224
 /* End PBXSourcesBuildPhase section */
279 225
 
280 226
 /* Begin PBXVariantGroup section */
281  
-		9324062E1077A429008EEF09 /* GrowlSamplePrefs.xib */ = {
282  
-			isa = PBXVariantGroup;
283  
-			children = (
284  
-				9324062F1077A429008EEF09 /* de */,
285  
-				932406301077A429008EEF09 /* en */,
286  
-				932406331077A429008EEF09 /* fr */,
287  
-				932406351077A429008EEF09 /* ja */,
288  
-			);
289  
-			name = GrowlSamplePrefs.xib;
290  
-			sourceTree = "<group>";
291  
-		};
292  
-		932406311077A429008EEF09 /* InfoPlist.strings */ = {
  227
+		94D52B6F15D3D313002D6080 /* Localizable.strings */ = {
293 228
 			isa = PBXVariantGroup;
294 229
 			children = (
295  
-				932406321077A429008EEF09 /* en */,
  230
+				94D52B7015D3D313002D6080 /* en */,
  231
+				94D52B7215D3D31E002D6080 /* de */,
296 232