shithub: choc

Download patch

ref: 1fd0ad08ed4840e681e902bc1b9420a1d41619b4
parent: ec74db92724c181962479703092365b332b70b0a
author: Simon Howard <[email protected]>
date: Sat May 7 19:52:26 EDT 2011

Rework OS X launcher package. Include documentation files within the
application bundle and add a help menu with links. Rework .dmg
generation to generate a file with a "fancy" background image and
overall nicer appearance.

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 2332

--- a/pkg/Makefile.am
+++ b/pkg/Makefile.am
@@ -7,10 +7,13 @@
 osx/Resources/wadfile.png                                               \
 osx/Resources/launcher.nib/designable.nib                               \
 osx/Resources/launcher.nib/keyedobjects.nib                             \
+osx/disk/dir.DS_Store                                                   \
+osx/disk/background.png                                                 \
 osx/GNUmakefile                                                         \
 osx/Info.plist.in       osx/Info-gnustep.plist.in                       \
 osx/PkgInfo                                                             \
 osx/cp-with-libs                                                        \
+osx/dmgfix                                                              \
 osx/main.m                                                              \
 osx/AppController.m     osx/AppController.h                             \
 osx/Execute.m           osx/Execute.h                                   \
--- a/pkg/osx/Execute.h
+++ b/pkg/osx/Execute.h
@@ -26,6 +26,7 @@
 void SetProgramLocation(const char *path);
 void ExecuteProgram(const char *executable, const char *iwad, const char *args);
 void OpenTerminalWindow(const char *doomwadpath);
+void OpenDocumentation(const char *filename);
 
 #endif /* #ifndef LAUNCHER_EXECUTE_H */
 
--- a/pkg/osx/Execute.m
+++ b/pkg/osx/Execute.m
@@ -219,3 +219,13 @@
                                    withApplication: @"Terminal"];
 }
 
+void OpenDocumentation(const char *filename)
+{
+    NSString *path;
+
+    path = [NSString stringWithFormat: @"%s/Documentation/%s",
+                     executable_path, filename];
+
+    [[NSWorkspace sharedWorkspace] openFile: path];
+}
+
--- a/pkg/osx/GNUmakefile
+++ b/pkg/osx/GNUmakefile
@@ -20,10 +20,18 @@
 
 # DMG file containing package:
 
-$(DMG) : $(STAGING_DIR)
+$(DMG) : tmp.dmg
 	rm -f $@
-	hdiutil create -volname "$(PACKAGE_STRING)" -srcdir $(STAGING_DIR) $@
+	./dmgfix "$(realpath tmp.dmg)" "$(PACKAGE_STRING)" "$(PACKAGE_NAME).app"
+	hdiutil convert -format UDZO -o $@ tmp.dmg
+	rm -f tmp.dmg
 
+tmp.dmg : $(STAGING_DIR)
+	rm -f $@
+	hdiutil makehybrid -hfs -hfs-volume-name "$(PACKAGE_STRING)"     \
+	                   -hfs-openfolder $(STAGING_DIR) $(STAGING_DIR) \
+			   -o tmp.dmg
+
 endif
 
 # Staging dir build for package:
@@ -46,12 +54,13 @@
 SRC_INFO_PLIST=Info.plist
 endif
 
+APP_DOC_DIR=$(APP_BIN_DIR)/Documentation
+APP_DOC_RELDIR=$(patsubst $(STAGING_DIR)/%,%,$(APP_DOC_DIR))
+
 $(STAGING_DIR): launcher $(TOPLEVEL_DOCS)
 	rm -rf $(STAGING_DIR)
 	mkdir $(STAGING_DIR)
 
-	cp $(TOPLEVEL_DOCS) "$(STAGING_DIR)"
-
 	mkdir -p "$(APP_TOP_DIR)"
 	cp -R Resources "$(APP_TOP_DIR)"
 	cp PkgInfo "$(APP_TOP_DIR)"
@@ -59,6 +68,13 @@
 
 	mkdir -p "$(APP_BIN_DIR)"
 
+	mkdir -p "$(APP_DOC_DIR)"
+	cp $(TOPLEVEL_DOCS) "$(APP_DOC_DIR)"
+
+	ln -s "$(APP_DOC_RELDIR)/COPYING" "$(STAGING_DIR)/Software License"
+	ln -s "$(APP_DOC_RELDIR)/README" "$(STAGING_DIR)/README"
+	ln -s /Applications "$(STAGING_DIR)"
+
 	cp launcher "$(APP_BIN_DIR)"
 	$(STRIP) "$(APP_BIN_DIR)/launcher"
 
@@ -69,7 +85,7 @@
 
 	$(TOPLEVEL)/man/simplecpp -DPRECOMPILED -D__MACOSX__  \
 	             < $(TOPLEVEL)/man/INSTALL.template       \
-	             > $(STAGING_DIR)/INSTALL
+	             > "$(APP_DOC_DIR)/INSTALL"
 
 	find $(STAGING_DIR) -name .svn -delete -exec rm -rf {} \; || true
 
@@ -76,6 +92,9 @@
 	mkdir -p "$(APP_BIN_DIR)/man/man5" "$(APP_BIN_DIR)/man/man6"
 	cp $(TOPLEVEL)/man/*.5 "$(APP_BIN_DIR)/man/man5"
 	cp $(TOPLEVEL)/man/*.6 "$(APP_BIN_DIR)/man/man6"
+	cp disk/dir.DS_Store $(STAGING_DIR)/.DS_Store
+	cp disk/background.png $(STAGING_DIR)/background.png
+#	setfile -a V $(STAGING_DIR)/background.png
 
 clean : launcher_clean
 	rm -f $(DMG)
--- a/pkg/osx/LauncherManager.h
+++ b/pkg/osx/LauncherManager.h
@@ -45,6 +45,12 @@
          forArgument: (NSString *) args;
 - (void) openTerminal: (id) sender;
 
+- (void) openREADME: (id) sender;
+- (void) openINSTALL: (id) sender;
+- (void) openCMDLINE: (id) sender;
+- (void) openCOPYING: (id) sender;
+- (void) openDocumentation: (id) sender;
+
 @end
 
 #endif /* #ifndef LAUNCHER_LAUNCHERMANAGER_H */
--- a/pkg/osx/LauncherManager.m
+++ b/pkg/osx/LauncherManager.m
@@ -325,6 +325,31 @@
     free(doomwadpath);
 }
 
+- (void) openREADME: (id) sender
+{
+    OpenDocumentation("README");
+}
+
+- (void) openINSTALL: (id) sender
+{
+    OpenDocumentation("INSTALL");
+}
+
+- (void) openCMDLINE: (id) sender
+{
+    OpenDocumentation("CMDLINE");
+}
+
+- (void) openCOPYING: (id) sender
+{
+    OpenDocumentation("COPYING");
+}
+
+- (void) openDocumentation: (id) sender
+{
+    OpenDocumentation("");
+}
+
 - (void) awakeFromNib
 {
     [self->launcherWindow setTitle: @PACKAGE_NAME " Launcher"];
--- a/pkg/osx/Resources/launcher.nib/designable.nib
+++ b/pkg/osx/Resources/launcher.nib/designable.nib
@@ -2,19 +2,19 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
 	<data>
 		<int key="IBDocument.SystemTarget">1060</int>
-		<string key="IBDocument.SystemVersion">10F569</string>
-		<string key="IBDocument.InterfaceBuilderVersion">823</string>
-		<string key="IBDocument.AppKitVersion">1038.29</string>
+		<string key="IBDocument.SystemVersion">10J869</string>
+		<string key="IBDocument.InterfaceBuilderVersion">851</string>
+		<string key="IBDocument.AppKitVersion">1038.35</string>
 		<string key="IBDocument.HIToolboxVersion">461.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">823</string>
+			<string key="NS.object.0">851</string>
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="29"/>
+			<integer value="370"/>
 			<integer value="2"/>
-			<integer value="227"/>
+			<integer value="228"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -600,6 +600,73 @@
 							<string key="NSName">_NSWindowsMenu</string>
 						</object>
 					</object>
+					<object class="NSMenuItem" id="391919375">
+						<reference key="NSMenu" ref="624798014"/>
+						<string key="NSTitle">Help</string>
+						<string key="NSKeyEquiv"/>
+						<int key="NSMnemonicLoc">2147483647</int>
+						<reference key="NSOnImage" ref="819247708"/>
+						<reference key="NSMixedImage" ref="94574589"/>
+						<string key="NSAction">submenuAction:</string>
+						<object class="NSMenu" key="NSSubmenu" id="733442466">
+							<string key="NSTitle">Help</string>
+							<object class="NSMutableArray" key="NSMenuItems">
+								<bool key="EncodedWithXMLCoder">YES</bool>
+								<object class="NSMenuItem" id="860531190">
+									<reference key="NSMenu" ref="733442466"/>
+									<string key="NSTitle">Introduction</string>
+									<string key="NSKeyEquiv">?</string>
+									<int key="NSKeyEquivModMask">1048576</int>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="819247708"/>
+									<reference key="NSMixedImage" ref="94574589"/>
+								</object>
+								<object class="NSMenuItem" id="378926680">
+									<reference key="NSMenu" ref="733442466"/>
+									<string key="NSTitle">Set up guide</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="819247708"/>
+									<reference key="NSMixedImage" ref="94574589"/>
+								</object>
+								<object class="NSMenuItem" id="784926086">
+									<reference key="NSMenu" ref="733442466"/>
+									<string key="NSTitle">Command line reference</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="819247708"/>
+									<reference key="NSMixedImage" ref="94574589"/>
+								</object>
+								<object class="NSMenuItem" id="913959081">
+									<reference key="NSMenu" ref="733442466"/>
+									<string key="NSTitle">More documentation...</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="819247708"/>
+									<reference key="NSMixedImage" ref="94574589"/>
+								</object>
+								<object class="NSMenuItem" id="258703436">
+									<reference key="NSMenu" ref="733442466"/>
+									<bool key="NSIsDisabled">YES</bool>
+									<bool key="NSIsSeparator">YES</bool>
+									<string key="NSTitle"/>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="819247708"/>
+									<reference key="NSMixedImage" ref="94574589"/>
+								</object>
+								<object class="NSMenuItem" id="590365178">
+									<reference key="NSMenu" ref="733442466"/>
+									<string key="NSTitle">Software license</string>
+									<string key="NSKeyEquiv"/>
+									<int key="NSMnemonicLoc">2147483647</int>
+									<reference key="NSOnImage" ref="819247708"/>
+									<reference key="NSMixedImage" ref="94574589"/>
+								</object>
+							</object>
+							<string key="NSName">_NSHelpMenu</string>
+						</object>
+					</object>
 				</object>
 				<string key="NSName">_NSMainMenu</string>
 			</object>
@@ -921,6 +988,26 @@
 								<int key="NSPeriodicInterval">25</int>
 							</object>
 						</object>
+						<object class="NSButton" id="811205099">
+							<reference key="NSNextResponder" ref="145141922"/>
+							<int key="NSvFlags">268</int>
+							<string key="NSFrame">{{17, 16}, {25, 25}}</string>
+							<reference key="NSSuperview" ref="145141922"/>
+							<bool key="NSEnabled">YES</bool>
+							<object class="NSButtonCell" key="NSCell" id="33467307">
+								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags2">134217728</int>
+								<string key="NSContents"/>
+								<reference key="NSSupport" ref="407649812"/>
+								<reference key="NSControlView" ref="811205099"/>
+								<int key="NSButtonFlags">-2038415105</int>
+								<int key="NSButtonFlags2">161</int>
+								<string key="NSAlternateContents"/>
+								<string key="NSKeyEquivalent"/>
+								<int key="NSPeriodicDelay">200</int>
+								<int key="NSPeriodicInterval">25</int>
+							</object>
+						</object>
 					</object>
 					<string key="NSFrameSize">{480, 316}</string>
 					<reference key="NSSuperview"/>
@@ -1312,6 +1399,54 @@
 					</object>
 					<int key="connectionID">322</int>
 				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">openINSTALL:</string>
+						<reference key="source" ref="590266459"/>
+						<reference key="destination" ref="378926680"/>
+					</object>
+					<int key="connectionID">374</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">openCMDLINE:</string>
+						<reference key="source" ref="590266459"/>
+						<reference key="destination" ref="784926086"/>
+					</object>
+					<int key="connectionID">376</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">openDocumentation:</string>
+						<reference key="source" ref="590266459"/>
+						<reference key="destination" ref="913959081"/>
+					</object>
+					<int key="connectionID">378</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">openCOPYING:</string>
+						<reference key="source" ref="590266459"/>
+						<reference key="destination" ref="590365178"/>
+					</object>
+					<int key="connectionID">381</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">openREADME:</string>
+						<reference key="source" ref="590266459"/>
+						<reference key="destination" ref="860531190"/>
+					</object>
+					<int key="connectionID">382</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBActionConnection" key="connection">
+						<string key="label">openINSTALL:</string>
+						<reference key="source" ref="590266459"/>
+						<reference key="destination" ref="811205099"/>
+					</object>
+					<int key="connectionID">385</int>
+				</object>
 			</object>
 			<object class="IBMutableOrderedSet" key="objectRecords">
 				<object class="NSArray" key="orderedObjects">
@@ -1442,7 +1577,8 @@
 							<reference ref="419477060"/>
 							<reference ref="231654028"/>
 							<reference ref="729612487"/>
-						</object>
+							<reference ref="391919375"/>
+						</object>
 						<reference key="parent" ref="0"/>
 						<string key="objectName">MainMenu</string>
 					</object>
@@ -1693,6 +1829,7 @@
 							<reference ref="625273251"/>
 							<reference ref="680095551"/>
 							<reference ref="658359713"/>
+							<reference ref="811205099"/>
 						</object>
 						<reference key="parent" ref="193084417"/>
 					</object>
@@ -2035,6 +2172,73 @@
 						<reference key="object" ref="366010945"/>
 						<reference key="parent" ref="0"/>
 					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">369</int>
+						<reference key="object" ref="391919375"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="733442466"/>
+						</object>
+						<reference key="parent" ref="624798014"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">370</int>
+						<reference key="object" ref="733442466"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="860531190"/>
+							<reference ref="378926680"/>
+							<reference ref="784926086"/>
+							<reference ref="913959081"/>
+							<reference ref="258703436"/>
+							<reference ref="590365178"/>
+						</object>
+						<reference key="parent" ref="391919375"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">371</int>
+						<reference key="object" ref="860531190"/>
+						<reference key="parent" ref="733442466"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">373</int>
+						<reference key="object" ref="378926680"/>
+						<reference key="parent" ref="733442466"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">375</int>
+						<reference key="object" ref="784926086"/>
+						<reference key="parent" ref="733442466"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">377</int>
+						<reference key="object" ref="913959081"/>
+						<reference key="parent" ref="733442466"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">379</int>
+						<reference key="object" ref="258703436"/>
+						<reference key="parent" ref="733442466"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">380</int>
+						<reference key="object" ref="590365178"/>
+						<reference key="parent" ref="733442466"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">383</int>
+						<reference key="object" ref="811205099"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="33467307"/>
+						</object>
+						<reference key="parent" ref="145141922"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">384</int>
+						<reference key="object" ref="33467307"/>
+						<reference key="parent" ref="811205099"/>
+					</object>
 				</object>
 			</object>
 			<object class="NSMutableDictionary" key="flattenedProperties">
@@ -2043,6 +2247,7 @@
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<string>129.IBPluginDependency</string>
 					<string>129.ImportedFromIB2</string>
+					<string>130.IBEditorWindowLastContentRect</string>
 					<string>130.IBPluginDependency</string>
 					<string>130.ImportedFromIB2</string>
 					<string>131.IBPluginDependency</string>
@@ -2131,6 +2336,7 @@
 					<string>238.ImportedFromIB2</string>
 					<string>239.IBPluginDependency</string>
 					<string>239.ImportedFromIB2</string>
+					<string>24.IBEditorWindowLastContentRect</string>
 					<string>24.IBPluginDependency</string>
 					<string>24.ImportedFromIB2</string>
 					<string>240.IBPluginDependency</string>
@@ -2158,6 +2364,7 @@
 					<string>270.ImportedFromIB2</string>
 					<string>274.IBPluginDependency</string>
 					<string>274.ImportedFromIB2</string>
+					<string>275.IBEditorWindowLastContentRect</string>
 					<string>275.IBPluginDependency</string>
 					<string>275.ImportedFromIB2</string>
 					<string>281.IBPluginDependency</string>
@@ -2184,10 +2391,22 @@
 					<string>349.IBPluginDependency</string>
 					<string>350.IBPluginDependency</string>
 					<string>351.IBPluginDependency</string>
+					<string>369.IBPluginDependency</string>
+					<string>370.IBEditorWindowLastContentRect</string>
+					<string>370.IBPluginDependency</string>
+					<string>371.IBPluginDependency</string>
+					<string>373.IBPluginDependency</string>
+					<string>375.IBPluginDependency</string>
+					<string>377.IBPluginDependency</string>
+					<string>379.IBPluginDependency</string>
+					<string>380.IBPluginDependency</string>
+					<string>383.IBPluginDependency</string>
+					<string>384.IBPluginDependency</string>
 					<string>5.IBPluginDependency</string>
 					<string>5.ImportedFromIB2</string>
 					<string>56.IBPluginDependency</string>
 					<string>56.ImportedFromIB2</string>
+					<string>57.IBEditorWindowLastContentRect</string>
 					<string>57.IBPluginDependency</string>
 					<string>57.ImportedFromIB2</string>
 					<string>58.IBPluginDependency</string>
@@ -2199,6 +2418,7 @@
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
+					<string>{{576, 728}, {64, 6}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -2231,9 +2451,9 @@
 						<bytes key="NSTransformStruct">P4AAAL+AAABBiAAAwyEAAA</bytes>
 					</object>
 					<boolean value="YES"/>
-					<string>{{337, 406}, {530, 190}}</string>
+					<string>{{368, 418}, {530, 190}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{337, 406}, {530, 190}}</string>
+					<string>{{368, 418}, {530, 190}}</string>
 					<boolean value="YES"/>
 					<boolean value="YES"/>
 					<boolean value="YES"/>
@@ -2274,13 +2494,13 @@
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABBYAAAwgQAAA</bytes>
+						<bytes key="NSTransformStruct">P4AAAL+AAABBYAAAwigAAA</bytes>
 					</object>
 					<boolean value="YES"/>
 					<boolean value="YES"/>
-					<string>{{329, 484}, {480, 316}}</string>
+					<string>{{421, 438}, {480, 316}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{329, 484}, {480, 316}}</string>
+					<string>{{421, 438}, {480, 316}}</string>
 					<boolean value="YES"/>
 					<boolean value="YES"/>
 					<string>{213, 107}</string>
@@ -2303,6 +2523,7 @@
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
+					<string>{{469, 741}, {194, 73}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -2330,6 +2551,7 @@
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
+					<string>{{425, 661}, {151, 153}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -2340,7 +2562,7 @@
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
-					<string>{{329, 814}, {223, 20}}</string>
+					<string>{{329, 814}, {272, 20}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -2357,9 +2579,21 @@
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>{{540, 701}, {238, 113}}</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
+					<string>{{341, 611}, {235, 203}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -2384,7 +2618,7 @@
 				</object>
 			</object>
 			<nil key="sourceID"/>
-			<int key="maxID">351</int>
+			<int key="maxID">385</int>
 		</object>
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -2410,6 +2644,7 @@
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">FirstResponder</string>
+					<string key="superclassName">NSObject</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBUserSource</string>
 						<string key="minorKey"/>
@@ -2560,6 +2795,11 @@
 						<object class="NSArray" key="dict.sortedKeys">
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<string>launch:</string>
+							<string>openCMDLINE:</string>
+							<string>openCOPYING:</string>
+							<string>openDocumentation:</string>
+							<string>openINSTALL:</string>
+							<string>openREADME:</string>
 							<string>openTerminal:</string>
 							<string>runSetup:</string>
 						</object>
@@ -2568,6 +2808,11 @@
 							<string>id</string>
 							<string>id</string>
 							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
+							<string>id</string>
 						</object>
 					</object>
 					<object class="NSMutableDictionary" key="actionInfosByName">
@@ -2575,6 +2820,11 @@
 						<object class="NSArray" key="dict.sortedKeys">
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<string>launch:</string>
+							<string>openCMDLINE:</string>
+							<string>openCOPYING:</string>
+							<string>openDocumentation:</string>
+							<string>openINSTALL:</string>
+							<string>openREADME:</string>
 							<string>openTerminal:</string>
 							<string>runSetup:</string>
 						</object>
@@ -2582,6 +2832,26 @@
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<object class="IBActionInfo">
 								<string key="name">launch:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">openCMDLINE:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">openCOPYING:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">openDocumentation:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">openINSTALL:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">openREADME:</string>
 								<string key="candidateClassName">id</string>
 							</object>
 							<object class="IBActionInfo">
binary files a/pkg/osx/Resources/launcher.nib/keyedobjects.nib b/pkg/osx/Resources/launcher.nib/keyedobjects.nib differ
binary files /dev/null b/pkg/osx/disk/background.png differ
binary files /dev/null b/pkg/osx/disk/dir.DS_Store differ
--- /dev/null
+++ b/pkg/osx/dmgfix
@@ -1,0 +1,64 @@
+#!/usr/bin/osascript
+--
+-- Copyright(C) 2009 Simon Howard
+--
+-- This program is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU General Public License
+-- as published by the Free Software Foundation; either version 2
+-- of the License, or (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program; if not, write to the Free Software
+-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-- 02111-1307, USA.
+--
+--
+-- AppleScript script to automatically set the view properties in a
+-- .dmg file - ie. the background image, other Finder view options
+-- and icon positions.
+--
+-- Usage: dmgfix <absolute path to dmg> <disk name> <name of app>
+--
+
+on run argv
+    set dmgFile to POSIX file (item 1 of argv)
+    set diskName to item 2 of argv
+    set appName to item 3 of argv
+
+    tell application "Finder"
+        --activate
+        open dmgFile
+        delay 1
+        set win to the front Finder window
+        set theDisk to disk diskName
+        set the target of win to theDisk
+
+        -- window options:
+
+        set bgfile to file "background.png" of theDisk
+        set the bounds of win to {200, 200, 717, 536}
+        set icon size of icon view options of win to 96
+        set background picture of icon view options of win to bgfile
+        set toolbar visible of win to false
+
+        -- hide background file:
+
+        set bgloc to quoted form of POSIX path of (bgfile as text)
+        do shell script "SetFile -a V " & bgloc
+
+        -- icon positions:
+
+        set position of file "README" of theDisk to {120, 250}
+        set position of file "Software License" of theDisk to {380, 250}
+        set position of file appName of theDisk to {70, 110}
+        set position of file "Applications" of theDisk to {450, 110}
+
+        eject theDisk
+    end tell
+end run
+