Skip to content
Browse files

Adding Warp prefpane.

  • Loading branch information...
1 parent 02220df commit 568375cf7698bb2b18ec627c5ec1b9d98f773216 @ksuther committed Nov 5, 2007
Showing with 1,600 additions and 12 deletions.
  1. +1,054 −0 English.lproj/WarpPreferences.xib
  2. +2 −0 Info.plist
  3. +47 −2 MainController.m
  4. +30 −0 PrefPane-Info.plist
  5. +18 −0 Warp.searchTerms
  6. +249 −10 Warp.xcodeproj/project.pbxproj
  7. +30 −0 WarpPreferences.h
  8. +170 −0 WarpPreferences.m
View
1,054 English.lproj/WarpPreferences.xib
@@ -0,0 +1,1054 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.01">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">9A581</string>
+ <string key="IBDocument.InterfaceBuilderVersion">629</string>
+ <string key="IBDocument.AppKitVersion">949</string>
+ <string key="IBDocument.HIToolboxVersion">343.00</string>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="30"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string id="492730182">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="1001">
+ <string key="NSClassName" id="236473689">WarpPreferences</string>
+ </object>
+ <object class="NSCustomObject" id="1003">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="1004">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="863286287">
+ <int key="NSWindowStyleMask">15</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{496, 486}, {668, 247}}</string>
+ <int key="NSWTFlags">603979776</int>
+ <string key="NSWindowTitle">Warp</string>
+ <string key="NSWindowClass" id="166730754">NSWindow</string>
+ <nil key="NSViewClass"/>
+ <string key="NSWindowContentMinSize">{668, 0}</string>
+ <object class="NSView" key="NSWindowView" id="467419391">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSButton" id="502435347">
+ <reference key="NSNextResponder" ref="467419391"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{18, 211}, {100, 18}}</string>
+ <reference key="NSSuperview" ref="467419391"/>
+ <reference key="NSWindow"/>
+ <int key="NSTag">1</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="911011665">
+ <int key="NSCellFlags">-2080244224</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Enable Warp</string>
+ <object class="NSFont" key="NSSupport" id="656096860">
+ <string key="NSName" id="822406580">LucidaGrande</string>
+ <double key="NSSize">1.300000e+01</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <reference key="NSControlView" ref="502435347"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <object class="NSCustomResource" key="NSNormalImage" id="654577031">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSSwitch</string>
+ </object>
+ <object class="NSButtonImageSource" key="NSAlternateImage" id="448981352">
+ <string key="NSImageName">NSSwitch</string>
+ </object>
+ <string key="NSAlternateContents" id="174877753"/>
+ <reference key="NSKeyEquivalent" ref="174877753"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSBox" id="151044956">
+ <reference key="NSNextResponder" ref="467419391"/>
+ <int key="NSvFlags">36</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSView" id="618921784">
+ <reference key="NSNextResponder" ref="151044956"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSButton" id="70707142">
+ <reference key="NSNextResponder" ref="618921784"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{360, 13}, {69, 18}}</string>
+ <reference key="NSSuperview" ref="618921784"/>
+ <reference key="NSWindow"/>
+ <int key="NSTag">6</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="424705524">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Shift</string>
+ <reference key="NSSupport" ref="656096860"/>
+ <reference key="NSControlView" ref="70707142"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <reference key="NSNormalImage" ref="654577031"/>
+ <reference key="NSAlternateImage" ref="448981352"/>
+ <reference key="NSAlternateContents" ref="174877753"/>
+ <reference key="NSKeyEquivalent" ref="174877753"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="163664582">
+ <reference key="NSNextResponder" ref="618921784"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{127, 13}, {87, 18}}</string>
+ <reference key="NSSuperview" ref="618921784"/>
+ <reference key="NSWindow"/>
+ <int key="NSTag">3</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="1026027420">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Command</string>
+ <reference key="NSSupport" ref="656096860"/>
+ <reference key="NSControlView" ref="163664582"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <reference key="NSNormalImage" ref="654577031"/>
+ <reference key="NSAlternateImage" ref="448981352"/>
+ <reference key="NSAlternateContents" ref="174877753"/>
+ <reference key="NSKeyEquivalent" ref="174877753"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="820938929">
+ <reference key="NSNextResponder" ref="618921784"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{287, 13}, {69, 18}}</string>
+ <reference key="NSSuperview" ref="618921784"/>
+ <reference key="NSWindow"/>
+ <int key="NSTag">5</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="942768282">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Control</string>
+ <reference key="NSSupport" ref="656096860"/>
+ <reference key="NSControlView" ref="820938929"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <reference key="NSNormalImage" ref="654577031"/>
+ <reference key="NSAlternateImage" ref="448981352"/>
+ <reference key="NSAlternateContents" ref="174877753"/>
+ <reference key="NSKeyEquivalent" ref="174877753"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="644935200">
+ <reference key="NSNextResponder" ref="618921784"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{57, 14}, {67, 17}}</string>
+ <reference key="NSSuperview" ref="618921784"/>
+ <reference key="NSWindow"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="618107630">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Modifiers:</string>
+ <reference key="NSSupport" ref="656096860"/>
+ <reference key="NSControlView" ref="644935200"/>
+ <object class="NSColor" key="NSBackgroundColor" id="857161946">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName" id="546695838">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="853967857">
+ <int key="NSColorSpace">6</int>
+ <reference key="NSCatalogName" ref="546695838"/>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSSlider" id="296799323">
+ <reference key="NSNextResponder" ref="618921784"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{127, 36}, {164, 21}}</string>
+ <reference key="NSSuperview" ref="618921784"/>
+ <reference key="NSWindow"/>
+ <int key="NSTag">2</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSSliderCell" key="NSCell" id="2564574">
+ <int key="NSCellFlags">-2079981824</int>
+ <int key="NSCellFlags2">0</int>
+ <reference key="NSContents" ref="174877753"/>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">Helvetica</string>
+ <double key="NSSize">1.200000e+01</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <reference key="NSControlView" ref="296799323"/>
+ <double key="NSMaxValue">2.000000e+00</double>
+ <double key="NSMinValue">0.000000e+00</double>
+ <double key="NSValue">5.000000e-01</double>
+ <double key="NSAltIncValue">0.000000e+00</double>
+ <int key="NSNumberOfTickMarks">0</int>
+ <int key="NSTickMarkPosition">1</int>
+ <bool key="NSAllowsTickMarkValuesOnly">NO</bool>
+ <bool key="NSVertical">NO</bool>
+ </object>
+ </object>
+ <object class="NSTextField" id="979748717">
+ <reference key="NSNextResponder" ref="618921784"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{294, 41}, {57, 14}}</string>
+ <reference key="NSSuperview" ref="618921784"/>
+ <reference key="NSWindow"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="15694647">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272761856</int>
+ <real value="5.000000e-01" key="NSContents"/>
+ <object class="NSFont" key="NSSupport" id="26">
+ <reference key="NSName" ref="822406580"/>
+ <double key="NSSize">1.100000e+01</double>
+ <int key="NSfFlags">3100</int>
+ </object>
+ <object class="NSNumberFormatter" key="NSFormatter" id="605310198">
+ <object class="NSMutableDictionary" key="NS.attributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>allowsFloats</string>
+ <string>formatterBehavior</string>
+ <string>numberStyle</string>
+ <string>positiveFormat</string>
+ <string>positiveSuffix</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="1" id="9"/>
+ <integer value="1040"/>
+ <reference ref="9"/>
+ <string id="457372097">#,##0.##</string>
+ <string>s</string>
+ </object>
+ </object>
+ <reference key="NS.positiveformat" ref="457372097"/>
+ <string key="NS.negativeformat">-#,##0.##</string>
+ <nil key="NS.positiveattrs"/>
+ <nil key="NS.negativeattrs"/>
+ <object class="NSAttributedString" key="NS.zero">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nil">
+ <nil key="NSString"/>
+ </object>
+ <object class="NSAttributedString" key="NS.nan">
+ <string key="NSString">NaN</string>
+ <object class="NSDictionary" key="NSAttributes">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ </object>
+ <object class="NSDecimalNumberPlaceholder" key="NS.min" id="220760702">
+ <int key="NS.exponent">0</int>
+ <int key="NS.length">0</int>
+ <bool key="NS.negative">YES</bool>
+ <bool key="NS.compact">NO</bool>
+ <int key="NS.mantissa.bo">2</int>
+ <bytes key="NS.mantissa">AAAAAAAAAAAAAAAAAAAAAA</bytes>
+ </object>
+ <reference key="NS.max" ref="220760702"/>
+ <object class="NSDecimalNumberHandler" key="NS.rounding">
+ <int key="NS.roundingmode">3</int>
+ <bool key="NS.raise.overflow">YES</bool>
+ <bool key="NS.raise.underflow">YES</bool>
+ <bool key="NS.raise.dividebyzero">YES</bool>
+ </object>
+ <string key="NS.decimal">.</string>
+ <string key="NS.thousand">,</string>
+ <bool key="NS.hasthousands">YES</bool>
+ <bool key="NS.localized">YES</bool>
+ <bool key="NS.allowsfloats">YES</bool>
+ </object>
+ <reference key="NSControlView" ref="979748717"/>
+ <reference key="NSBackgroundColor" ref="857161946"/>
+ <reference key="NSTextColor" ref="853967857"/>
+ </object>
+ </object>
+ <object class="NSTextField" id="487886819">
+ <reference key="NSNextResponder" ref="618921784"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{15, 39}, {109, 17}}</string>
+ <reference key="NSSuperview" ref="618921784"/>
+ <reference key="NSWindow"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1029115335">
+ <int key="NSCellFlags">67239488</int>
+ <int key="NSCellFlags2">272630784</int>
+ <string key="NSContents">Activation delay:</string>
+ <reference key="NSSupport" ref="656096860"/>
+ <reference key="NSControlView" ref="487886819"/>
+ <reference key="NSBackgroundColor" ref="857161946"/>
+ <reference key="NSTextColor" ref="853967857"/>
+ </object>
+ </object>
+ <object class="NSButton" id="387258161">
+ <reference key="NSNextResponder" ref="618921784"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{218, 13}, {65, 18}}</string>
+ <reference key="NSSuperview" ref="618921784"/>
+ <reference key="NSWindow"/>
+ <int key="NSTag">4</int>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="625299659">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Option</string>
+ <reference key="NSSupport" ref="656096860"/>
+ <reference key="NSControlView" ref="387258161"/>
+ <int key="NSButtonFlags">1211912703</int>
+ <int key="NSButtonFlags2">2</int>
+ <reference key="NSNormalImage" ref="654577031"/>
+ <reference key="NSAlternateImage" ref="448981352"/>
+ <reference key="NSAlternateContents" ref="174877753"/>
+ <reference key="NSKeyEquivalent" ref="174877753"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrame">{{1, 1}, {445, 66}}</string>
+ <reference key="NSSuperview" ref="151044956"/>
+ <reference key="NSWindow"/>
+ </object>
+ </object>
+ <string key="NSFrame">{{17, 123}, {447, 82}}</string>
+ <reference key="NSSuperview" ref="467419391"/>
+ <reference key="NSWindow"/>
+ <string key="NSOffsets">{0, 0}</string>
+ <object class="NSTextFieldCell" key="NSTitleCell">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Settings</string>
+ <reference key="NSSupport" ref="26"/>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">6</int>
+ <reference key="NSCatalogName" ref="546695838"/>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ </object>
+ </object>
+ <reference key="NSContentView" ref="618921784"/>
+ <int key="NSBorderType">1</int>
+ <int key="NSBoxType">0</int>
+ <int key="NSTitlePosition">2</int>
+ <bool key="NSTransparent">NO</bool>
+ </object>
+ </object>
+ <string key="NSFrameSize">{668, 247}</string>
+ <reference key="NSSuperview"/>
+ <reference key="NSWindow"/>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {1600, 1178}}</string>
+ <string key="NSMinSize">{668, 22}</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label" id="414375086">_window</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="863286287"/>
+ </object>
+ <int key="connectionID">4</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label" id="16065959">_initialKeyView</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="502435347"/>
+ </object>
+ <int key="connectionID">7</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">_warpEnabledCheckbox</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="502435347"/>
+ </object>
+ <int key="connectionID">8</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">changeWarpSetting:</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="502435347"/>
+ </object>
+ <int key="connectionID">9</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">changeWarpSetting:</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="296799323"/>
+ </object>
+ <int key="connectionID">16</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">_activationDelaySlider</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="296799323"/>
+ </object>
+ <int key="connectionID">17</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">_activationDelayTextField</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="979748717"/>
+ </object>
+ <int key="connectionID">18</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label" id="327438181">changeModifierSetting:</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="163664582"/>
+ </object>
+ <int key="connectionID">31</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <reference key="label" ref="327438181"/>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="387258161"/>
+ </object>
+ <int key="connectionID">32</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <reference key="label" ref="327438181"/>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="820938929"/>
+ </object>
+ <int key="connectionID">33</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <reference key="label" ref="327438181"/>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="70707142"/>
+ </object>
+ <int key="connectionID">34</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label" id="512061104">_commandKeyCheckbox</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="163664582"/>
+ </object>
+ <int key="connectionID">35</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label" id="869047081">_optionKeyCheckbox</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="387258161"/>
+ </object>
+ <int key="connectionID">36</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label" id="887481031">_controlKeyCheckbox</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="820938929"/>
+ </object>
+ <int key="connectionID">37</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label" id="260725860">_shiftKeyCheckbox</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="70707142"/>
+ </object>
+ <int key="connectionID">38</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <object class="NSArray" key="object" id="1002">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="children" ref="1000"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="1001"/>
+ <reference key="parent" ref="1002"/>
+ <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="1003"/>
+ <reference key="parent" ref="1002"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="1004"/>
+ <reference key="parent" ref="1002"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2</int>
+ <reference key="object" ref="863286287"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="467419391"/>
+ </object>
+ <reference key="parent" ref="1002"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">3</int>
+ <reference key="object" ref="467419391"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="502435347"/>
+ <reference ref="151044956"/>
+ </object>
+ <reference key="parent" ref="863286287"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5</int>
+ <reference key="object" ref="502435347"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="911011665"/>
+ </object>
+ <reference key="parent" ref="467419391"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">6</int>
+ <reference key="object" ref="911011665"/>
+ <reference key="parent" ref="502435347"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">30</int>
+ <reference key="object" ref="151044956"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="70707142"/>
+ <reference ref="163664582"/>
+ <reference ref="820938929"/>
+ <reference ref="644935200"/>
+ <reference ref="296799323"/>
+ <reference ref="979748717"/>
+ <reference ref="487886819"/>
+ <reference ref="387258161"/>
+ </object>
+ <reference key="parent" ref="467419391"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">28</int>
+ <reference key="object" ref="70707142"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="424705524"/>
+ </object>
+ <reference key="parent" ref="151044956"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">29</int>
+ <reference key="object" ref="424705524"/>
+ <reference key="parent" ref="70707142"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">22</int>
+ <reference key="object" ref="163664582"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1026027420"/>
+ </object>
+ <reference key="parent" ref="151044956"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">23</int>
+ <reference key="object" ref="1026027420"/>
+ <reference key="parent" ref="163664582"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">26</int>
+ <reference key="object" ref="820938929"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="942768282"/>
+ </object>
+ <reference key="parent" ref="151044956"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">27</int>
+ <reference key="object" ref="942768282"/>
+ <reference key="parent" ref="820938929"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">20</int>
+ <reference key="object" ref="644935200"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="618107630"/>
+ </object>
+ <reference key="parent" ref="151044956"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">21</int>
+ <reference key="object" ref="618107630"/>
+ <reference key="parent" ref="644935200"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">10</int>
+ <reference key="object" ref="296799323"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="2564574"/>
+ </object>
+ <reference key="parent" ref="151044956"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">11</int>
+ <reference key="object" ref="2564574"/>
+ <reference key="parent" ref="296799323"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">14</int>
+ <reference key="object" ref="979748717"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="15694647"/>
+ </object>
+ <reference key="parent" ref="151044956"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">15</int>
+ <reference key="object" ref="15694647"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="605310198"/>
+ </object>
+ <reference key="parent" ref="979748717"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">19</int>
+ <reference key="object" ref="605310198"/>
+ <reference key="parent" ref="15694647"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="487886819"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1029115335"/>
+ </object>
+ <reference key="parent" ref="151044956"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">13</int>
+ <reference key="object" ref="1029115335"/>
+ <reference key="parent" ref="487886819"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">24</int>
+ <reference key="object" ref="387258161"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="625299659"/>
+ </object>
+ <reference key="parent" ref="151044956"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">25</int>
+ <reference key="object" ref="625299659"/>
+ <reference key="parent" ref="387258161"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-1.IBPluginDependency</string>
+ <string>-2.IBPluginDependency</string>
+ <string>-3.IBPluginDependency</string>
+ <string>10.IBPluginDependency</string>
+ <string>11.IBPluginDependency</string>
+ <string>12.IBPluginDependency</string>
+ <string>13.IBPluginDependency</string>
+ <string>14.IBPluginDependency</string>
+ <string>15.IBPluginDependency</string>
+ <string>19.IBPluginDependency</string>
+ <string>2.IBPluginDependency</string>
+ <string>2.IBWindowTemplateEditedContentRect</string>
+ <string>2.NSWindowTemplate.visibleAtLaunch</string>
+ <string>2.editorWindowContentRectSynchronizationRect</string>
+ <string>2.windowTemplate.hasMinSize</string>
+ <string>2.windowTemplate.minSize</string>
+ <string>20.IBPluginDependency</string>
+ <string>21.IBPluginDependency</string>
+ <string>22.IBPluginDependency</string>
+ <string>23.IBPluginDependency</string>
+ <string>24.IBPluginDependency</string>
+ <string>25.IBPluginDependency</string>
+ <string>26.IBPluginDependency</string>
+ <string>27.IBPluginDependency</string>
+ <string>28.IBPluginDependency</string>
+ <string>29.IBPluginDependency</string>
+ <string>3.IBPluginDependency</string>
+ <string>5.IBPluginDependency</string>
+ <string>6.IBPluginDependency</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="492730182"/>
+ <reference ref="492730182"/>
+ <reference ref="492730182"/>
+ <string id="909538335">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="909538335"/>
+ <string id="106418466">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="106418466"/>
+ <string id="170479618">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="170479618"/>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="492730182"/>
+ <string>{{295, 690}, {668, 247}}</string>
+ <reference ref="9"/>
+ <string>{{295, 690}, {668, 247}}</string>
+ <integer value="1"/>
+ <string>{668, 0}</string>
+ <string id="491891373">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="491891373"/>
+ <string id="177124608">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="177124608"/>
+ <string id="825055650">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="825055650"/>
+ <string id="940869727">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="940869727"/>
+ <string id="340788191">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference ref="340788191"/>
+ <reference ref="492730182"/>
+ <reference ref="492730182"/>
+ <reference ref="492730182"/>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">38</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">WarpPreferences</string>
+ <string key="superclassName">NSPreferencePane</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>changeModifierSetting:</string>
+ <string>changeWarpSetting:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string id="572250756">id</string>
+ <reference ref="572250756"/>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>_activationDelaySlider</string>
+ <string>_activationDelayTextField</string>
+ <reference ref="512061104"/>
+ <reference ref="887481031"/>
+ <reference ref="869047081"/>
+ <reference ref="260725860"/>
+ <string>_warpEnabledCheckbox</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSSlider</string>
+ <string>NSTextField</string>
+ <string id="271111303">NSButton</string>
+ <reference ref="271111303"/>
+ <reference ref="271111303"/>
+ <reference ref="271111303"/>
+ <reference ref="271111303"/>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">WarpPreferences.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <reference key="className" ref="236473689"/>
+ <nil key="superclassName"/>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSMutableArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="16065959"/>
+ <reference ref="414375086"/>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSView</string>
+ <reference ref="166730754"/>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <reference key="minorKey" ref="174877753"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.LastKnownRelativeProjectPath">../../Warp.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <object class="NSMutableData" key="IBDocument.RunnableNib">
+ <bytes key="NS.bytes">YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA
+AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxDrAAsADAAxADUANgA8AD0A
+QgBaAFsAXABdAF4ACwBrAHAAfgB/AJoAmwCjAKQApwCsAK0ArgCxAK0AtQC4ALkAvQDDANYA2gDhAOwA
+9QD2AQABAQEKAQsBFAEVAR4BHwEoASkBMQEyAT0BPgFHAUgBSQFNAU8BVAFVAVgBWwFeAWYBZwF6AX8B
+gAGDAYYBjgGPAXABmQGeAcABzwHQAdEB0gHTAdQAfQHVAdYB1wHbAdwB4AHjAeYB6wHsAfAB8gH9AgAC
+CQIMAg0CDgIRAhkCGgIhAiICKwIsAjUCNgI6AjsCPQI+Aj8CRQJGAksCTAJPAlICVQALAlYCVwJYAlsC
+XwJxAnkCegJ+AoMChAKHAowCjQKSApMCmAKZAp4CnwKkAqUCqgKvArACtQK2ArsCwALBAsYCywLMAowC
+0QLrAu4C7wLxAwsDJgNBA0IDQwNEA0UDRgNHA0gDSQNKA0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cD
+WANZA1wDXwOJA7MDtAO1A7YAVwO3A7gDuQO6A7sDvABWAX4A9AO9A74DvwPAANEDwQPCA8MCKgEdA8QA
+kQEJA8UDxgPHA8gDyQPKA8sDzAPNA84DzwPQA9ED1APXA9pVJG51bGzfEBIADQAOAA8AEAARABIAEwAU
+ABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADBWTlNS
+b290ViRjbGFzc11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5
+T2lkc1ZhbHVlc11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5TQ2xhc3Nlc0tl
+eXNaTlNPaWRzS2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVjdG9yc11OU0Zv
+bnRNYW5hZ2VyXxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05TQWNjZXNzaWJp
+bGl0eU9pZHNLZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoDqgJ2AvYDpgH+AooAFgLyAvoCjgOeA
+AIAGgKGA6BAogL/SAA4AMgAzADRbTlNDbGFzc05hbWWABIADXxAPV2FycFByZWZlcmVuY2Vz0gA3ADgA
+OQA6WCRjbGFzc2VzWiRjbGFzc25hbWWiADoAO15OU0N1c3RvbU9iamVjdFhOU09iamVjdF8QEElCQ29j
+b2FGcmFtZXdvcmvSAA4APgA/AEBaTlMub2JqZWN0c4B+oQBBgAfcAEMADgBEAEUARgBHAEgASQBKAEsA
+TABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWAArXE5TV2luZG93Vmlld1xOU1NjcmVlblJlY3RdTlNXaW5k
+b3dUaXRsZVlOU1dURmxhZ3NdTlNXaW5kb3dDbGFzc18QFk5TV2luZG93Q29udGVudE1pblNpemVcTlNX
+aW5kb3dSZWN0XxAPTlNXaW5kb3dCYWNraW5nXxARTlNXaW5kb3dTdHlsZU1hc2tZTlNNaW5TaXplW05T
+Vmlld0NsYXNzgAyAfYB7gAkSJAAAAIAKgAuACBACEA+AfIAAXxAYe3s0OTYsIDQ4Nn0sIHs2NjgsIDI0
+N319VFdhcnBYTlNXaW5kb3dYezY2OCwgMH3XAF8ADgBgAGEAYgBcAGMAZABlAGYAZwBoAGQAal8QD05T
+TmV4dFJlc3BvbmRlclpOU1N1YnZpZXdzWE5TdkZsYWdzW05TRnJhbWVTaXplW05TU3VwZXJ2aWV3gA2A
+b4AOEQEAgHmADYB60gAOAD4AbABtgG2iAG4Ab4APgCDZAF8ADgBxAHIAYQBzAFwAYwB0AE4AdgB3AHgA
+eQB6AGQATgB9V05TRnJhbWVWTlNDZWxsWU5TRW5hYmxlZFVOU1RhZ4AMgB+AEIAREQEMCYANgAwQAV8Q
+Fnt7MTgsIDIxMX0sIHsxMDAsIDE4fX3eAIAADgCBAIIAgwCEAIUAhgCHAIgAiQCKAIsAjACNAI4AjwCQ
+AJEAVgCSAI8AlACVAG4AlwCYAJlbTlNDZWxsRmxhZ3NfEBNOU0FsdGVybmF0ZUNvbnRlbnRzXU5TTm9y
+bWFsSW1hZ2VfEBJOU1BlcmlvZGljSW50ZXJ2YWxeTlNCdXR0b25GbGFnczJfEBBOU0FsdGVybmF0ZUlt
+YWdlXxAPTlNLZXlFcXVpdmFsZW50Wk5TQ29udGVudHNZTlNTdXBwb3J0XU5TQ29udHJvbFZpZXdfEA9O
+U1BlcmlvZGljRGVsYXlcTlNDZWxsRmxhZ3MyXU5TQnV0dG9uRmxhZ3MT/////4QB/gCAHoAdgBYQGYAa
+gB2AEoATgA8QyBAAEkg8Uf9bRW5hYmxlIFdhcnDUAA4AnACdAJ4AnwCgAKEAolZOU1NpemVWTlNOYW1l
+WE5TZkZsYWdzgBUjQCoAAAAAAACAFBEEFFxMdWNpZGFHcmFuZGXSADcAOAClAKaiAKYAO1ZOU0ZvbnTT
+AA4AMgCoAKkAqgCrXk5TUmVzb3VyY2VOYW1lgBmAF4AYV05TSW1hZ2VYTlNTd2l0Y2jSADcAOACvALCi
+ALAAO18QEE5TQ3VzdG9tUmVzb3VyY2XSAA4AsgCzALRbTlNJbWFnZU5hbWWAHIAb0gA3ADgAtgC3ogC3
+ADtfEBNOU0J1dHRvbkltYWdlU291cmNlUNIANwA4ALoAu6QAuwC8AHIAO1xOU0J1dHRvbkNlbGxcTlNB
+Y3Rpb25DZWxs0gA3ADgAvgC/pQC/AMAAwQDCADtYTlNCdXR0b25ZTlNDb250cm9sVk5TVmlld1tOU1Jl
+c3BvbmRlct4AXwDEAA4AxQBxAMYAYABhAMcAXADIAMkAYwDKAE4AmADMAM0AzgDPANAA0QB9AGQA0wBW
+AE4A1VlOU0JveFR5cGVbTlNUaXRsZUNlbGxdTlNUcmFuc3BhcmVudFxOU0JvcmRlclR5cGVZTlNPZmZz
+ZXRzXxAPTlNUaXRsZVBvc2l0aW9uXU5TQ29udGVudFZpZXeADIB4gHKAcAiAIRAkgA2AcYAMgCLSAA4A
+PgBsANiAbaEA1YAi1wBfAA4AcQBgAGEAXABjAG8AZQDdAN4AZwBkAG+AIIBvgG6AI4ANgCDSAA4APgBs
+AOOAbagA5ADlAOYA5wDoAOkA6gDrgCSAKIAsgDCAPoBFgGWAadkAXwAOAHEAcgBhAHMAXABjAHQA1QB2
+AO8A8AB5AHoAZADVAPSAIoAfgCWAJgmADYAiEAZfEBV7ezM2MCwgMTN9LCB7NjksIDE4fX3eAIAADgCB
+AIIAgwCEAIUAhgCHAIgAiQCKAIsAjAD3AI4AjwCQAJEAVgCSAI8A/QCVAOQAlwCYAJkSBAH+AIAegB2A
+FoAagB2AJ4ATgCRVU2hpZnTZAF8ADgBxAHIAYQBzAFwAYwB0ANUAdgEEAQUAeQB6AGQA1QEJgCKAH4Ap
+gCoJgA2AIhADXxAVe3sxMjcsIDEzfSwgezg3LCAxOH193gCAAA4AgQCCAIMAhACFAIYAhwCIAIkAigCL
+AIwA9wCOAI8AkACRAFYAkgCPAREAlQDlAJcAmACZgB6AHYAWgBqAHYArgBOAKFdDb21tYW5k2QBfAA4A
+cQByAGEAcwBcAGMAdADVAHYBGAEZAHkAegBkANUBHYAigB+ALYAuCYANgCIQBV8QFXt7Mjg3LCAxM30s
+IHs2OSwgMTh9fd4AgAAOAIEAggCDAIQAhQCGAIcAiACJAIoAiwCMAPcAjgCPAJAAkQBWAJIAjwElAJUA
+5gCXAJgAmYAegB2AFoAagB2AL4ATgCxXQ29udHJvbNgAXwAOAHEAcgBhAHMAXABjANUBKwEsAS0AeQB6
+AGQA1YAigD2AMYAyCYANgCJfEBR7ezU3LCAxNH0sIHs2NywgMTd9fdgAgAAOATMAhwCIAIkAiwE0ATUB
+NgE3ATgAlQDnATsBPF8QEU5TQmFja2dyb3VuZENvbG9yW05TVGV4dENvbG9yEgQB/kCAPIA0gDOAE4Aw
+EhBABACAOVpNb2RpZmllcnM61QAOAT8BQAFBAUIBQwFEAPQBRQFGV05TQ29sb3JcTlNDb2xvclNwYWNl
+W05TQ29sb3JOYW1lXU5TQ2F0YWxvZ05hbWWAOIA3gDaANVZTeXN0ZW1cY29udHJvbENvbG9y0wAOAUAB
+SgFDAQkBTFdOU1doaXRlgDhLMC42NjY2NjY2OQDSADcAOAFOAT+iAT8AO9UADgE/AUABQQFCAUMBUQD0
+AVIBRoA4gDuAOoA1XxAQY29udHJvbFRleHRDb2xvctMADgFAAUoBQwEJAVeAOEIwANIANwA4AVkBWqQB
+WgC8AHIAO18QD05TVGV4dEZpZWxkQ2VsbNIANwA4AVwBXaUBXQDAAMEAwgA7W05TVGV4dEZpZWxk2QBf
+AA4AcQByAGEAcwBcAGMAdADVAWABYQFiAHkAegBkANUAVoAigESAP4BACYANgCJfEBZ7ezEyNywgMzZ9
+LCB7MTY0LCAyMX193gFoAIAADgFpAWoAhwCIAIkBawFsAIsBbQFuAW8BcAFxAXIAmAB9AI8BdADoAXYB
+dwCYAM8BdwDPV05TVmFsdWVfEBNOU051bWJlck9mVGlja01hcmtzXxASTlNUaWNrTWFya1Bvc2l0aW9u
+Wk5TTWF4VmFsdWVaTlNNaW5WYWx1ZVpOU1ZlcnRpY2FsXU5TQWx0SW5jVmFsdWVfEBpOU0FsbG93c1Rp
+Y2tNYXJrVmFsdWVzT25seSM/4AAAAAAAABP/////hAX/AIBDgB2AQYA+I0AAAAAAAAAAIwAAAAAAAAAA
+CAjUAA4AnACdAJ4AnwF8AX0BfoAVI0AoAAAAAAAAgEIQEFlIZWx2ZXRpY2HSADcAOAGBAYKkAYIAvABy
+ADtcTlNTbGlkZXJDZWxs0gA3ADgBhAGFpQGFAMAAwQDCADtYTlNTbGlkZXLYAF8ADgBxAHIAYQBzAFwA
+YwDVASsBiQGKAHkAegBkANWAIoA9gEaARwmADYAiXxAVe3syOTQsIDQxfSwgezU3LCAxNH192QCAAA4B
+MwCHAIgAiQGQAIsBNAE1ATYBNwGTAZQA6QGWAZcBPFtOU0Zvcm1hdHRlcoA8gDSASIBJgEWAShIQQgQA
+gDnUAA4AnACdAJ4AnwGbAKEBnYAVI0AmAAAAAAAAgBQRDBzfEBEADgGfAaABoQGiAaMBpAGlAaYBpwGo
+AakBqgGrAawBrQGuAa8BsAGxAbIBswG0ACsBtgG3AbgAegG6ACsBvAG2AHoAelZOUy5uaWxaTlMuZGVj
+aW1hbFZOUy5uYW5bTlMucm91bmRpbmdXTlMuemVyb18QEE5TLm5lZ2F0aXZlYXR0cnNWTlMubWF4XU5T
+LmF0dHJpYnV0ZXNfEBFOUy5wb3NpdGl2ZWZvcm1hdF8QD05TLmFsbG93c2Zsb2F0c18QEU5TLm5lZ2F0
+aXZlZm9ybWF0XxAQTlMucG9zaXRpdmVhdHRyc1tOUy50aG91c2FuZFZOUy5taW5cTlMubG9jYWxpemVk
+XxAPTlMuaGFzdGhvdXNhbmRzgGSAWYBigFqAYIBXgACAXoBLgFMJgFaAAIBjgF4JCdMADgHBAD4BwgHD
+AclXTlMua2V5c4BVpQHEAcUBxgHHAciATIBNgE6AT4BQpQHKAcsBywG4Ac6AUYBSgFKAU4BUXxARZm9y
+bWF0dGVyQmVoYXZpb3JcYWxsb3dzRmxvYXRzW251bWJlclN0eWxlXnBvc2l0aXZlRm9ybWF0XnBvc2l0
+aXZlU3VmZml4EQQQWCMsIyMwLiMjUXPSADcAOAHYAdmjAdkB2gA7XxATTlNNdXRhYmxlRGljdGlvbmFy
+eVxOU0RpY3Rpb25hcnlZLSMsIyMwLiMj0gAOAd0B3gArWE5TU3RyaW5ngFiAANIANwA4AeEB4qIB4gA7
+XxASTlNBdHRyaWJ1dGVkU3RyaW5n0gAOAd0B3gArgFiAANMADgHnAd0B3gHpAepcTlNBdHRyaWJ1dGVz
+gFiAXIBbU05hTtMADgHBAD4B7QHuAe+AXaCg0gA3ADgB8QHaogHaADvXAA4B8wH0AfUB9gH3AfgB+QDP
+AJgAVgCYAfsAelpOUy5jb21wYWN0W05TLmV4cG9uZW50Xk5TLm1hbnRpc3NhLmJvWU5TLmxlbmd0aFtO
+Uy5tYW50aXNzYVtOUy5uZWdhdGl2ZYBfCE8QEAAAAAAAAAAAAAAAAAAAAAAJ0gA3ADgB/gH/ogH/ADtf
+EBpOU0RlY2ltYWxOdW1iZXJQbGFjZWhvbGRlctUCAQICAA4CAwIEAQkAegIGAHoAel8QD05TLnJvdW5k
+aW5nbW9kZV8QEk5TLnJhaXNlLnVuZGVyZmxvd18QFU5TLnJhaXNlLmRpdmlkZWJ5emVyb18QEU5TLnJh
+aXNlLm92ZXJmbG93CYBhCQnSADcAOAIKAguiAgsAO18QFk5TRGVjaW1hbE51bWJlckhhbmRsZXJRLlEs
+0gA3ADgCDwIQowIQAZAAO18QEU5TTnVtYmVyRm9ybWF0dGVy2ABfAA4AcQByAGEAcwBcAGMA1QErAhQC
+FQB5AHoAZADVgCKAPYBmgGcJgA2AIl8QFXt7MTUsIDM5fSwgezEwOSwgMTd9fdgAgAAOATMAhwCIAIkA
+iwE0ATUBNgE3Ah0AlQDqATsBPIA8gDSAaIATgGWAOV8QEUFjdGl2YXRpb24gZGVsYXk62QBfAA4AcQBy
+AGEAcwBcAGMAdADVAHYCJQImAHkAegBkANUCKoAigB+AaoBrCYANgCIQBF8QFXt7MjE4LCAxM30sIHs2
+NSwgMTh9fd4AgAAOAIEAggCDAIQAhQCGAIcAiACJAIoAiwCMAPcAjgCPAJAAkQBWAJIAjwIyAJUA6wCX
+AJgAmYAegB2AFoAagB2AbIATgGlWT3B0aW9u0gA3ADgCNwI4owI4AjkAO15OU011dGFibGVBcnJheVdO
+U0FycmF5XxATe3sxLCAxfSwgezQ0NSwgNjZ9fdIANwA4AjwAwaMAwQDCADtfEBZ7ezE3LCAxMjN9LCB7
+NDQ3LCA4Mn19VnswLCAwfdcAgAAOATMAhwCIAIsBNAD3ATYCQQJCAZQAmAJEgDyAdIBzgEmAd1hTZXR0
+aW5nc9UADgE/AUABQQFCAUMCSAD0AkkBRoA4gHaAdYA1XxATdGV4dEJhY2tncm91bmRDb2xvctMADgFA
+AUoBQwEJAk6AOEIxANMADgFAAUoBQwEJAlGAOE0wIDAuODAwMDAwMDEA0gA3ADgCUwJUpAJUAMEAwgA7
+VU5TQm94Wns2NjgsIDI0N31fEBZ7ezAsIDB9LCB7MTYwMCwgMTE3OH19WXs2NjgsIDIyfdIANwA4AlkC
+WqICWgA7XxAQTlNXaW5kb3dUZW1wbGF0ZdIANwA4AlwCXaMCXQJeADtcTlNNdXRhYmxlU2V0VU5TU2V0
+0gAOAD4AbAJhgG2vEA8CYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnCAgICDgIaAiICKgIyAjoCQ
+gJGAk4CVgJaAmICZgJvUAA4CcgJzAnQCdQAfAOsCeF1OU0Rlc3RpbmF0aW9uWE5TU291cmNlV05TTGFi
+ZWyAgoACgGmAgV8QFmNoYW5nZU1vZGlmaWVyU2V0dGluZzrSADcAOAJ7AnyjAnwCfQA7XxAVTlNOaWJD
+b250cm9sQ29ubmVjdG9yXk5TTmliQ29ubmVjdG9y1AAOAnICcwJ0An8A5QAfAoKAhYAogAKAhF8QE19j
+b21tYW5kS2V5Q2hlY2tib3jSADcAOAKFAoajAoYCfQA7XxAUTlNOaWJPdXRsZXRDb25uZWN0b3LUAA4C
+cgJzAnQCdQAfAG4Ci4CCgAKAD4CHXxASY2hhbmdlV2FycFNldHRpbmc61AAOAnICcwJ0An8A6wAfApGA
+hYBpgAKAiV8QEl9vcHRpb25LZXlDaGVja2JveNQADgJyAnMCdAJ/AOgAHwKXgIWAPoACgItfEBZfYWN0
+aXZhdGlvbkRlbGF5U2xpZGVy1AAOAnICcwJ0An8AbgAfAp2AhYAPgAKAjV8QFF93YXJwRW5hYmxlZENo
+ZWNrYm941AAOAnICcwJ0An8A5AAfAqOAhYAkgAKAj18QEV9zaGlmdEtleUNoZWNrYm941AAOAnICcwJ0
+AnUAHwDmAniAgoACgCyAgdQADgJyAnMCdAJ/AG4AHwKugIWAD4ACgJJfEA9faW5pdGlhbEtleVZpZXfU
+AA4CcgJzAnQCfwDmAB8CtICFgCyAAoCUXxATX2NvbnRyb2xLZXlDaGVja2JveNQADgJyAnMCdAJ1AB8A
+5AJ4gIKAAoAkgIHUAA4CcgJzAnQCfwBBAB8Cv4CFgAeAAoCXV193aW5kb3fUAA4CcgJzAnQCdQAfAOUC
+eICCgAKAKICB1AAOAnICcwJ0An8A6QAfAsqAhYBFgAKAml8QGV9hY3RpdmF0aW9uRGVsYXlUZXh0Rmll
+bGTUAA4CcgJzAnQCdQAfAOgC0ICCgAKAPoCc0gAOAD4C0gLTgKCvEBcAbwDkAhUA5QDmAYoAbgEtAOgA
+6QImAE4A6wFiAEEBBQLkAHgA5wEZAPABlgDqgCCAJIBngCiALIBHgA+AMoA+gEWAa4AMgGmAQIAHgCqA
+noARgDCALoAmgEqAZdIADgAyADMC7YAEgJ9dTlNBcHBsaWNhdGlvbtIANwA4AvACOaICOQA70gAOAD4C
+0gLzgKCvEBcATgBvAOoAbwBvAOkATgDnAG8AbwDrAEEAbwDoAB8A5QAfAG4AbwDmAOQBigBvgAyAIIBl
+gCCAIIBFgAyAMIAggCCAaYAHgCCAPoACgCiAAoAPgCCALIAkgEeAINIADgA+AtIDDYCgrxAYAB8AbwDk
+AOUA5gGKAhUAbgDoAOkBLQImAE4A6wFiAEEBBQLkAHgA5wEZAOoA8AGWgAKAIIAkgCiALIBHgGeAD4A+
+gEWAMoBrgAyAaYBAgAeAKoCegBGAMIAugGWAJoBK0gAOAD4C0gMogKCvEBgDKQMqAysDLAMtAy4DLwMw
+AzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0CApIClgKaAp4CogKmAqoCrgKyArYCugK+AsICx
+gLKAs4C0gLWAtoC3gLiAuYC6gLtcRmlsZSdzIE93bmVyXkJveCAoU2V0dGluZ3MpXxARQ2hlY2sgQm94
+IChTaGlmdClfEBNDaGVjayBCb3ggKENvbW1hbmQpXxATQ2hlY2sgQm94IChDb250cm9sKV8QFlRleHQg
+RmllbGQgQ2VsbCAoMC41cylfECNUZXh0IEZpZWxkIENlbGwgKEFjdGl2YXRpb24gZGVsYXk6KV8QF0No
+ZWNrIEJveCAoRW5hYmxlIFdhcnApXxARSG9yaXpvbnRhbCBTbGlkZXJfEBJTdGF0aWMgVGV4dCAoMC41
+cylfEBxUZXh0IEZpZWxkIENlbGwgKE1vZGlmaWVyczopXxAUQnV0dG9uIENlbGwgKE9wdGlvbilcQ29u
+dGVudCBWaWV3XxASQ2hlY2sgQm94IChPcHRpb24pW1NsaWRlciBDZWxsXVdpbmRvdyAoV2FycClfEBVC
+dXR0b24gQ2VsbCAoQ29tbWFuZClbQXBwbGljYXRpb25fEBlCdXR0b24gQ2VsbCAoRW5hYmxlIFdhcnAp
+XxAYU3RhdGljIFRleHQgKE1vZGlmaWVyczopXxAVQnV0dG9uIENlbGwgKENvbnRyb2wpXxAfU3RhdGlj
+IFRleHQgKEFjdGl2YXRpb24gZGVsYXk6KV8QE0J1dHRvbiBDZWxsIChTaGlmdClfEBBOdW1iZXIgRm9y
+bWF0dGVy0gAOAD4C0gNbgKCg0gAOAD4C0gNegKCg0gAOAD4C0gNhgKCvECcAHwDkAhUA5gGKAmsA6ADp
+AmcCbwDrAEECcAB4AOcA8AJpAmQCZQJuAG8A5QJtAG4BLQImAE4CZgJoAWIBBQLkAmMBGQGWAOoCYgJq
+AmyAAoAkgGeALIBHgJOAPoBFgIyAmYBpgAeAm4ARgDCAJoCQgIaAiICYgCCAKICWgA+AMoBrgAyAioCO
+gECAKoCegIOALoBKgGWAgICRgJXSAA4APgLSA4uAoK8QJwOMA40DjgOPA5ADkQOSA5MDlAOVA5YDlwOY
+A5kDmgObA5wDnQOeA58DoAOhA6IDowOkA6UDpgOnA6gDqQOqA6sDrAOtA64DrwOwA7EDsoDAgMGAwoDD
+gMSAxYDGgMeAyIDJgMqAy4DMgM2AzoDPgNCA0YDSgNOA1IDVgNaA14DYgNmA2oDbgNyA3YDegN+A4IDh
+gOKA44DkgOWA5hAnEBwQDRAaECUQChAOEAgQEhAYEBQQHRAhEAkQHxAeEBYQFRARECYQCxAXE///////
+///9ECMQGxATEAwQIBAHECLSAA4APgBsA9OAbaDSAA4APgLSA9aAoKDSAA4APgLSA9mAoKDSADcAOAPb
+A9yiA9wAO15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYCPwJFApAClwKeAqwCvgLa
+AugC9AMAAw4DGQMnA0MDUQNkA3YDkAOaA6cDqQOrA60DrwOxA7MDtQO3A7kDuwO9A78DwQPDA8UDxwPJ
+A8sD1APgA+ID5AP2A/8ECAQTBBgEJwQwBEMETARXBFkEXAReBI8EnASpBLcEwQTPBOgE9QUHBRsFJQUx
+BTMFNQU3BTkFPgVABUIFRAVGBUgFSgVMBWcFbAV1BX4FmwWtBbgFwQXNBdkF2wXdBd8F4gXkBeYF6AXx
+BfMF+AX6BfwGIQYpBjAGOgZABkIGRAZGBkgGSwZMBk4GUAZSBmsGpAawBsYG1AbpBvgHCwcdBygHMgdA
+B1IHXwdtB3YHeAd6B3wHfgeAB4IHhAeGB4gHigeMB5EHnQeuB7UHvAfFB8cH0AfSB9UH4gfrB/AH9wgE
+CBMIFQgXCBkIIQgqCDMIOAhLCFQIYAhiCGQIbQhyCIgIiQiSCJsIqAi1CL4IyQjSCNwI4wjvCSgJMgk+
+CUwJWQljCXUJgwmFCYcJiQmLCYwJjgmQCZIJlAmWCZgJoQmjCaYJqAnFCccJyQnLCc0JzwnRCdoJ3Ant
+Ce8J8QnzCfUJ9wn5CfsJ/QoiCiQKJgooCioKKwotCi8KMQpJCoIKhwqJCosKjQqPCpEKkwqVCpcKnQrC
+CsQKxgrICsoKywrNCs8K0QrpCyILJAsmCygLKgssCy4LMAsyCzoLXwthC2MLZQtnC2gLagtsC24Lhgu/
+C8ELwwvFC8cLyQvLC80LzwvXC/gL+gv8C/4MAAwBDAMMBQwcDD0MUQxdDGIMZAxmDGgMagxsDHEMcwx+
+DJMMmwyoDLQMwgzEDMYMyAzKDNEM3gzrDPMM9Q0BDQoNDw0kDSYNKA0qDSwNPw1MDU4NUQ1aDWMNdQ1+
+DYkNlQ26DbwNvg3ADcINww3FDccN4A4ZDiEONw5MDlcOYg5tDnsOmA6hDqoOrA6uDrAOsg67DsQOxQ7G
+DtcO2Q7iDuQO5g7wDvkPAg8PDxgPIw8sD00PTw9RD1MPVQ9WD1gPWg9yD5cPow+lD6cPqQ+rD60Prw+0
+D7YPxw/JD9IP1A/XEB4QJRAwEDcQQxBLEF4QZRBzEIcQmRCtEMAQzBDTEOAQ8hD0EPYQ+BD6EPwQ/hEA
+EQIRBBEGEQcRCRELEQ0RDxEQERERHhEmESgRMxE1ETcRORE7ET0RSBFKEUwRThFQEVIRZhFzEX8RjhGd
+EaARqRGrEbQRuxHREd4R6BHxEfoR/BH+EgcSDBIhEioSLBIuEjsSSBJKEkwSThJSEl8SYRJiEmMSbBJx
+Eo4SmRKlErQSvhLKEtYS2BLZEuwS7RL2EvsTGBMtEz8TVBNsE4ATgRODE4QThROOE5MTrBOuE7ATuRPA
+E9QT9RP3E/kT+xP9E/4UABQCFBoUOxQ9FD8UQRRDFEUURxRbFIAUghSEFIYUiBSJFIsUjRSPFKcU4BTi
+FOQU5hToFOoU7BTuFPAU9xUAFQcVFhUeFTQVPRVEFV0VZBWBFYMVhRWHFYkVixWUFakVqxWtFa8VsRXH
+FdQV1hXZFeYV6BX2Ff8WCBYOFhkWMhY8FkUWShZdFmYWbRZ6FoAWiRaLFqwWrhawFrIWtBa2FrgWuha8
+Fr4WwBbCFsQWxhbIFsoW2xbpFvIW+hb8Fv4XABcCFxsXJBcrF0MXUhdjF2UXZxdpF2sXgReKF5EXqBe5
+F7sXvRe/F8EX1hfnF+kX6xftF+8YBBgVGBcYGRgbGB0YNhhHGEkYSxhNGE8YZhh3GHkYexh9GH8Ykxik
+GKYYqBiqGKwYvRi/GMEYwxjFGNcY6BjqGOwY7hjwGQYZFxkZGRsZHRkfGTAZMhk0GTYZOBlAGVEZUxlV
+GVcZWRlqGWwZbhlwGXIZjhmfGaEZoxmlGacZsBmyGeMZ5RnnGekZ6xntGe8Z8RnzGfUZ9xn5GfsZ/Rn/
+GgEaAxoFGgcaCRoLGg0aDxoRGhoaHBoeGiwaNRo6GkMaRRp2Gngaehp8Gn4agBqCGoQahhqIGooajBqO
+GpAakhqUGpYamBqaGpwanhqgGqIapBqtGq8a4hrkGuYa6BrqGuwa7hrwGvIa9Br2Gvga+hr8Gv4bABsC
+GwQbBhsIGwobDBsOGxAbEhsbGx0bUBtSG1QbVhtYG1obXBteG2AbYhtkG2YbaBtqG2wbbhtwG3IbdBt2
+G3gbeht8G34bgBuNG5wbsBvGG9wb9RwbHDUcSRxeHH0clByhHLYcwhzQHOgc9B0QHSsdQx1lHXsdjh2X
+HZkdmh2jHaUdph2vHbEeAh4EHgYeCB4KHgweDh4QHhIeFB4WHhgeGh4cHh4eIB4iHiQeJh4oHioeLB4u
+HjAeMh40HjYeOB46HjwePh5AHkIeRB5GHkgeSh5MHk4eUB5ZHlserB6uHrAesh60HrYeuB66Hrwevh7A
+HsIexB7GHsgeyh7MHs4e0B7SHtQe1h7YHtoe3B7eHuAe4h7kHuYe6B7qHuwe7h7wHvIe9B72Hvge+h78
+Hv4fAB8CHwQfBh8IHwofDB8OHxAfEh8UHxYfGB8aHxwfHh8gHyIfJB8mHy8fMR8zHzUfNx85HzsfPR9G
+H0gfSR9SH1QfVR9eH2AfYR9qH28AAAAAAAACAgAAAAAAAAPdAAAAAAAAAAAAAAAAAAAffg</bytes>
+ </object>
+ </data>
+</archive>
View
2 Info.plist
@@ -20,6 +20,8 @@
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
+ <key>LSUIElement</key>
+ <string>1</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
View
49 MainController.m
@@ -11,6 +11,9 @@
NSString *SwitchSpacesNotification = @"com.apple.switchSpaces";
+float _activationDelay = 0.5;
+NSUInteger _activationModifiers = cmdKey;
+
enum {
LeftDirection = 0,
RightDirection,
@@ -36,7 +39,7 @@ OSStatus mouseMovedHandler(EventHandlerCallRef nextHandler, EventRef theEvent, v
if (direction != -1) {
NSDictionary *info = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:direction] forKey:@"Direction"];
- [NSTimer scheduledTimerWithTimeInterval:0.1f target:[MainController class] selector:@selector(switchToSpace:) userInfo:info repeats:NO];
+ [NSTimer scheduledTimerWithTimeInterval:_activationDelay target:[MainController class] selector:@selector(switchToSpace:) userInfo:info repeats:NO];
}
return CallNextEventHandler(nextHandler, theEvent);
@@ -79,7 +82,7 @@ + (NSInteger)getCurrentSpaceRow:(NSInteger *)row column:(NSInteger *)column
+ (void)switchToSpace:(NSTimer *)timer
{
- if (GetCurrentKeyModifiers() & cmdKey) {
+ if (_activationModifiers == 0 || (GetCurrentKeyModifiers() & _activationModifiers) == _activationModifiers) {
NSDictionary *info = [timer userInfo];
NSPoint mouseLocation = [NSEvent mouseLocation];
NSRect screenRect = [[NSScreen mainScreen] frame];
@@ -154,11 +157,53 @@ - (void)applicationDidFinishLaunching:(NSNotification *)note
EventHandlerUPP handlerFunction = NewEventHandlerUPP(mouseMovedHandler);
InstallEventHandler(GetEventMonitorTarget(), handlerFunction, 1, &eventType, nil, &mouseHandler);
+
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:NSApp selector:@selector(terminate:) name:@"TerminateWarpNotification" object:nil];
+ [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(defaultsChanged:) name:@"WarpDefaultsChanged" object:nil];
+
+ [self performSelector:@selector(defaultsChanged:)];
}
- (void)applicationWillTerminate:(NSNotification *)note
{
RemoveEventHandler(mouseHandler);
+
+ [[NSDistributedNotificationCenter defaultCenter] removeObserver:NSApp name:@"TerminateWarpNotification" object:nil];
+ [[NSDistributedNotificationCenter defaultCenter] removeObserver:self name:@"WarpDefaultsChanged" object:nil];
+}
+
+- (void)defaultsChanged:(NSNotification *)note
+{
+ NSUserDefaults *df = [NSUserDefaults standardUserDefaults];
+
+ [df synchronize];
+
+ id object = [df objectForKey:@"Delay"];
+ _activationDelay = (object) ? [object floatValue] : 0.5f;
+
+ object = [df objectForKey:@"Modifiers"];
+
+ if (object) {
+ _activationModifiers = 0;
+
+ if ([[object objectForKey:@"Command"] boolValue]) {
+ _activationModifiers |= cmdKey;
+ }
+
+ if ([[object objectForKey:@"Option"] boolValue]) {
+ _activationModifiers |= optionKey;
+ }
+
+ if ([[object objectForKey:@"Control"] boolValue]) {
+ _activationModifiers |= controlKey;
+ }
+
+ if ([[object objectForKey:@"Shift"] boolValue]) {
+ _activationModifiers |= shiftKey;
+ }
+ } else {
+ _activationModifiers = cmdKey;
+ }
}
@end
View
30 PrefPane-Info.plist
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>com.ksuther.warp.prefpane</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>Warp</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>NSMainNibFile</key>
+ <string>WarpPreferences</string>
+ <key>NSPrefPaneIconLabel</key>
+ <string>Warp</string>
+ <key>NSPrefPaneSearchParameters</key>
+ <string>Warp</string>
+ <key>NSPrincipalClass</key>
+ <string>WarpPreferences</string>
+</dict>
+</plist>
View
18 Warp.searchTerms
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Main</key>
+ <dict>
+ <key>localizableStrings</key>
+ <array>
+ <dict>
+ <key>index</key>
+ <string>warp spaces edge</string>
+ <key>title</key>
+ <string>Configure Warp settings</string>
+ </dict>
+ </array>
+ </dict>
+</dict>
+</plist>
View
259 Warp.xcodeproj/project.pbxproj
@@ -6,16 +6,74 @@
objectVersion = 44;
objects = {
+/* Begin PBXAggregateTarget section */
+ 3790F8C80CDB044000A034FA /* Build All */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 3790F8DD0CDB047500A034FA /* Build configuration list for PBXAggregateTarget "Build All" */;
+ buildPhases = (
+ );
+ dependencies = (
+ 3790F8CC0CDB044200A034FA /* PBXTargetDependency */,
+ 3790F8CE0CDB044300A034FA /* PBXTargetDependency */,
+ );
+ name = "Build All";
+ productName = "Build All";
+ };
+/* End PBXAggregateTarget section */
+
/* Begin PBXBuildFile section */
3790F6390CDA71C400A034FA /* MainController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3790F6380CDA71C400A034FA /* MainController.m */; };
3790F65B0CDA73C400A034FA /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3790F65A0CDA73C400A034FA /* Carbon.framework */; };
3790F76B0CDA804300A034FA /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3790F76A0CDA804300A034FA /* ApplicationServices.framework */; };
+ 3790F8D40CDB045700A034FA /* WarpDaemon.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8D1107320486CEB800E47090 /* WarpDaemon.app */; };
+ 3790F8E80CDB058600A034FA /* Warp.searchTerms in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3790F8E70CDB057E00A034FA /* Warp.searchTerms */; };
+ 3790F8F50CDB05CE00A034FA /* WarpPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 3790F8F40CDB05CE00A034FA /* WarpPreferences.m */; };
+ 3790F8FD0CDB05F100A034FA /* PreferencePanes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3790F8FC0CDB05F100A034FA /* PreferencePanes.framework */; };
+ 3790F9150CDB864E00A034FA /* WarpPreferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3790F9130CDB864E00A034FA /* WarpPreferences.xib */; };
8D11072A0486CEB800E47090 /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
+/* Begin PBXContainerItemProxy section */
+ 3790F8CB0CDB044200A034FA /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 8D1107260486CEB800E47090 /* Warp */;
+ remoteInfo = Warp;
+ };
+ 3790F8CD0CDB044300A034FA /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3790F8BF0CDB042200A034FA /* Preference Pane */;
+ remoteInfo = "Preference Pane";
+ };
+ 3790F8CF0CDB044B00A034FA /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 8D1107260486CEB800E47090 /* Warp */;
+ remoteInfo = Warp;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 3790F8DC0CDB047500A034FA /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 7;
+ files = (
+ 3790F8E80CDB058600A034FA /* Warp.searchTerms in CopyFiles */,
+ 3790F8D40CDB045700A034FA /* WarpDaemon.app in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
/* Begin PBXFileReference section */
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
@@ -30,11 +88,26 @@
3790F65A0CDA73C400A034FA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
3790F7660CDA7FFF00A034FA /* CoreGraphicsPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreGraphicsPrivate.h; sourceTree = "<group>"; };
3790F76A0CDA804300A034FA /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; };
+ 3790F8C00CDB042200A034FA /* Warp.prefPane */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Warp.prefPane; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3790F8C10CDB042200A034FA /* PrefPane-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PrefPane-Info.plist"; sourceTree = "<group>"; };
+ 3790F8E70CDB057E00A034FA /* Warp.searchTerms */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Warp.searchTerms; sourceTree = "<group>"; };
+ 3790F8F30CDB05CE00A034FA /* WarpPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WarpPreferences.h; sourceTree = "<group>"; };
+ 3790F8F40CDB05CE00A034FA /* WarpPreferences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WarpPreferences.m; sourceTree = "<group>"; };
+ 3790F8FC0CDB05F100A034FA /* PreferencePanes.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PreferencePanes.framework; path = /System/Library/Frameworks/PreferencePanes.framework; sourceTree = "<absolute>"; };
+ 3790F9140CDB864E00A034FA /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/WarpPreferences.xib; sourceTree = "<group>"; };
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
- 8D1107320486CEB800E47090 /* Warp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Warp.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8D1107320486CEB800E47090 /* WarpDaemon.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WarpDaemon.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ 3790F8BE0CDB042200A034FA /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 3790F8FD0CDB05F100A034FA /* PreferencePanes.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -53,6 +126,7 @@
children = (
3790F6370CDA71C400A034FA /* MainController.h */,
3790F6380CDA71C400A034FA /* MainController.m */,
+ 3790F8F20CDB05B200A034FA /* Preference Pane */,
);
name = Classes;
sourceTree = "<group>";
@@ -63,6 +137,7 @@
3790F76A0CDA804300A034FA /* ApplicationServices.framework */,
3790F65A0CDA73C400A034FA /* Carbon.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
+ 3790F8FC0CDB05F100A034FA /* PreferencePanes.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
@@ -80,7 +155,8 @@
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
- 8D1107320486CEB800E47090 /* Warp.app */,
+ 8D1107320486CEB800E47090 /* WarpDaemon.app */,
+ 3790F8C00CDB042200A034FA /* Warp.prefPane */,
);
name = Products;
sourceTree = "<group>";
@@ -111,7 +187,10 @@
isa = PBXGroup;
children = (
8D1107310486CEB800E47090 /* Info.plist */,
+ 3790F8C10CDB042200A034FA /* PrefPane-Info.plist */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
+ 3790F8E70CDB057E00A034FA /* Warp.searchTerms */,
+ 3790F9130CDB864E00A034FA /* WarpPreferences.xib */,
29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
);
name = Resources;
@@ -126,12 +205,40 @@
name = Frameworks;
sourceTree = "<group>";
};
+ 3790F8F20CDB05B200A034FA /* Preference Pane */ = {
+ isa = PBXGroup;
+ children = (
+ 3790F8F30CDB05CE00A034FA /* WarpPreferences.h */,
+ 3790F8F40CDB05CE00A034FA /* WarpPreferences.m */,
+ );
+ name = "Preference Pane";
+ sourceTree = "<group>";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
- 8D1107260486CEB800E47090 /* Warp */ = {
+ 3790F8BF0CDB042200A034FA /* Preference Pane */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 3790F8C50CDB042200A034FA /* Build configuration list for PBXNativeTarget "Preference Pane" */;
+ buildPhases = (
+ 3790F8BC0CDB042200A034FA /* Resources */,
+ 3790F8BD0CDB042200A034FA /* Sources */,
+ 3790F8BE0CDB042200A034FA /* Frameworks */,
+ 3790F8DC0CDB047500A034FA /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 3790F8D00CDB044B00A034FA /* PBXTargetDependency */,
+ );
+ name = "Preference Pane";
+ productName = "Preference Pane";
+ productReference = 3790F8C00CDB042200A034FA /* Warp.prefPane */;
+ productType = "com.apple.product-type.bundle";
+ };
+ 8D1107260486CEB800E47090 /* Warp Daemon */ = {
isa = PBXNativeTarget;
- buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Warp" */;
+ buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Warp Daemon" */;
buildPhases = (
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
@@ -141,10 +248,10 @@
);
dependencies = (
);
- name = Warp;
+ name = "Warp Daemon";
productInstallPath = "$(HOME)/Applications";
productName = Warp;
- productReference = 8D1107320486CEB800E47090 /* Warp.app */;
+ productReference = 8D1107320486CEB800E47090 /* WarpDaemon.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
@@ -159,12 +266,22 @@
projectDirPath = "";
projectRoot = "";
targets = (
- 8D1107260486CEB800E47090 /* Warp */,
+ 3790F8C80CDB044000A034FA /* Build All */,
+ 8D1107260486CEB800E47090 /* Warp Daemon */,
+ 3790F8BF0CDB042200A034FA /* Preference Pane */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
+ 3790F8BC0CDB042200A034FA /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 3790F9150CDB864E00A034FA /* WarpPreferences.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -177,6 +294,14 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
+ 3790F8BD0CDB042200A034FA /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 3790F8F50CDB05CE00A034FA /* WarpPreferences.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -188,6 +313,24 @@
};
/* End PBXSourcesBuildPhase section */
+/* Begin PBXTargetDependency section */
+ 3790F8CC0CDB044200A034FA /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 8D1107260486CEB800E47090 /* Warp Daemon */;
+ targetProxy = 3790F8CB0CDB044200A034FA /* PBXContainerItemProxy */;
+ };
+ 3790F8CE0CDB044300A034FA /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 3790F8BF0CDB042200A034FA /* Preference Pane */;
+ targetProxy = 3790F8CD0CDB044300A034FA /* PBXContainerItemProxy */;
+ };
+ 3790F8D00CDB044B00A034FA /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 8D1107260486CEB800E47090 /* Warp Daemon */;
+ targetProxy = 3790F8CF0CDB044B00A034FA /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
/* Begin PBXVariantGroup section */
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
@@ -205,9 +348,87 @@
name = MainMenu.nib;
sourceTree = "<group>";
};
+ 3790F9130CDB864E00A034FA /* WarpPreferences.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 3790F9140CDB864E00A034FA /* English */,
+ );
+ name = WarpPreferences.xib;
+ sourceTree = "<group>";
+ };
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
+ 3790F8C30CDB042200A034FA /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+ INFOPLIST_FILE = "PrefPane-Info.plist";
+ INSTALL_PATH = "$(HOME)/Library/Bundles";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Foundation,
+ "-framework",
+ AppKit,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = Warp;
+ WRAPPER_EXTENSION = prefPane;
+ ZERO_LINK = YES;
+ };
+ name = Debug;
+ };
+ 3790F8C40CDB042200A034FA /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+ INFOPLIST_FILE = "PrefPane-Info.plist";
+ INSTALL_PATH = "$(HOME)/Library/Bundles";
+ OTHER_LDFLAGS = (
+ "-framework",
+ Foundation,
+ "-framework",
+ AppKit,
+ );
+ PREBINDING = NO;
+ PRODUCT_NAME = Warp;
+ WRAPPER_EXTENSION = prefPane;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ 3790F8C90CDB044000A034FA /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ PRODUCT_NAME = "Build All";
+ };
+ name = Debug;
+ };
+ 3790F8CA0CDB044000A034FA /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ PRODUCT_NAME = "Build All";
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -224,7 +445,7 @@
GCC_PREFIX_HEADER = Warp_Prefix.pch;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
- PRODUCT_NAME = Warp;
+ PRODUCT_NAME = WarpDaemon;
WRAPPER_EXTENSION = app;
ZERO_LINK = YES;
};
@@ -239,7 +460,7 @@
GCC_PREFIX_HEADER = Warp_Prefix.pch;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
- PRODUCT_NAME = Warp;
+ PRODUCT_NAME = WarpDaemon;
WRAPPER_EXTENSION = app;
};
name = Release;
@@ -271,7 +492,25 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
- C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Warp" */ = {
+ 3790F8C50CDB042200A034FA /* Build configuration list for PBXNativeTarget "Preference Pane" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 3790F8C30CDB042200A034FA /* Debug */,
+ 3790F8C40CDB042200A034FA /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 3790F8DD0CDB047500A034FA /* Build configuration list for PBXAggregateTarget "Build All" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 3790F8C90CDB044000A034FA /* Debug */,
+ 3790F8CA0CDB044000A034FA /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Warp Daemon" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
View
30 WarpPreferences.h
@@ -0,0 +1,30 @@
+//
+// WarpPreferences.h
+// Warp
+//
+// Created by Kent Sutherland on 11/2/07.
+// Copyright 2007 Kent Sutherland. All rights reserved.
+//
+
+#import <Cocoa/Cocoa.h>
+#import <PreferencePanes/PreferencePanes.h>
+
+@interface WarpPreferences : NSPreferencePane {
+ IBOutlet NSButton *_warpEnabledCheckbox;
+ IBOutlet NSSlider *_activationDelaySlider;
+ IBOutlet NSTextField *_activationDelayTextField;
+
+ IBOutlet NSButton *_commandKeyCheckbox;
+ IBOutlet NSButton *_optionKeyCheckbox;
+ IBOutlet NSButton *_controlKeyCheckbox;
+ IBOutlet NSButton *_shiftKeyCheckbox;
+}
+
++ (BOOL)isWarpDaemonRunning;
++ (void)setObject:(id)object forKey:(NSString *)key;
++ (id)objectForKey:(NSString *)key;
+
+- (IBAction)changeWarpSetting:(id)sender;
+- (IBAction)changeModifierSetting:(id)sender;
+
+@end
View
170 WarpPreferences.m
@@ -0,0 +1,170 @@
+//
+// WarpPreferences.m
+// Warp
+//
+// Created by Kent Sutherland on 11/2/07.
+// Copyright 2007 Kent Sutherland. All rights reserved.
+//
+
+#import "WarpPreferences.h"
+
+#define SENDER_STATE ([sender state] == NSOnState)
+
+#define WARP_ENABLED_TAG 1
+#define ACTIVATION_DELAY_TAG 2
+#define MODIFIER_COMMAND_TAG 3
+#define MODIFIER_OPTION_TAG 4
+#define MODIFIER_CONTROL_TAG 5
+#define MODIFIER_SHIFT_TAG 6
+
+NSString *WarpBundleIdentifier = @"com.ksuther.warp";
+
+@implementation WarpPreferences
+
++ (BOOL)isWarpDaemonRunning
+{
+ ProcessSerialNumber number = {kNoProcess, kNoProcess};
+ NSDictionary *processInfo;
+
+ while (GetNextProcess(&number) == noErr) {
+ processInfo = (NSDictionary *)ProcessInformationCopyDictionary(&number, kProcessDictionaryIncludeAllInformationMask);
+
+ if ([[processInfo objectForKey:(NSString *)kCFBundleIdentifierKey] isEqualToString:WarpBundleIdentifier]) {
+ return YES;
+ }
+
+ [processInfo release];
+ }
+ return NO;
+}
+
++ (void)setObject:(id)object forKey:(NSString *)key
+{
+ NSUserDefaults *df = [NSUserDefaults standardUserDefaults];
+ NSMutableDictionary *dictionary = [[[df persistentDomainForName:WarpBundleIdentifier] mutableCopy] autorelease];
+
+ if (!dictionary) {
+ dictionary = [NSMutableDictionary dictionary];
+ }
+
+ [dictionary setObject:object forKey:key];
+ [df setPersistentDomain:dictionary forName:WarpBundleIdentifier];
+
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"WarpDefaultsChanged" object:nil];
+}
+
++ (id)objectForKey:(NSString *)key
+{
+ return [(id)CFPreferencesCopyAppValue((CFStringRef)key, (CFStringRef)WarpBundleIdentifier) autorelease];
+}
+
+- (NSString *)mainNibName
+{
+ return @"WarpPreferences";
+}
+
+- (void)willSelect
+{
+ //Listen for application launch/quit notifications
+ [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(workspaceNotificationReceived:) name:NSWorkspaceDidLaunchApplicationNotification object:nil];
+ [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(workspaceNotificationReceived:) name:NSWorkspaceDidTerminateApplicationNotification object:nil];
+
+ //Restore preferences
+ [_warpEnabledCheckbox setState:[WarpPreferences isWarpDaemonRunning] ? NSOnState : NSOffState];
+
+ float delay = [[WarpPreferences objectForKey:@"Delay"] floatValue];
+ [_activationDelaySlider setFloatValue:delay];
+ [_activationDelayTextField setFloatValue:delay];
+
+ id modifiers = [WarpPreferences objectForKey:@"Modifiers"];
+
+ if (modifiers) {
+ [_commandKeyCheckbox setState:[[modifiers objectForKey:@"Command"] boolValue] ? NSOnState : NSOffState];
+ [_optionKeyCheckbox setState:[[modifiers objectForKey:@"Option"] boolValue] ? NSOnState : NSOffState];
+ [_controlKeyCheckbox setState:[[modifiers objectForKey:@"Control"] boolValue] ? NSOnState : NSOffState];
+ [_shiftKeyCheckbox setState:[[modifiers objectForKey:@"Shift"] boolValue] ? NSOnState : NSOffState];
+ } else {
+ [_commandKeyCheckbox setState:NSOnState];
+ }
+
+ [super willSelect];
+}
+
+- (void)willUnselect
+{
+ [[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self name:nil object:nil];
+}
+
+- (void)workspaceNotificationReceived:(NSNotification *)note
+{
+ if ([[[note userInfo] objectForKey:@"NSApplicationBundleIdentifier"] isEqualToString:WarpBundleIdentifier]) {
+ if ([[note name] isEqualToString:NSWorkspaceDidLaunchApplicationNotification]) {
+ //Warp daemon launched
+ [_warpEnabledCheckbox setState:NSOnState];
+ } else {
+ //Warp daemon quit
+ [_warpEnabledCheckbox setState:NSOffState];
+ }
+ }
+}
+
+#pragma mark -
+#pragma mark IBActions
+#pragma mark -
+
+- (IBAction)changeWarpSetting:(id)sender
+{
+ switch ([sender tag]) {
+ case WARP_ENABLED_TAG:
+ if ([sender state] == NSOffState) {
+ //Tell Warp to quit
+ [[NSDistributedNotificationCenter defaultCenter] postNotificationName:@"TerminateWarpNotification" object:nil];
+ } else {
+ //Launch Warp
+ NSString *daemonPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"WarpDaemon" ofType:@"app"];
+
+ if (daemonPath) {
+ [[NSWorkspace sharedWorkspace] openURLs:[NSArray arrayWithObject:[NSURL fileURLWithPath:daemonPath]]
+ withAppBundleIdentifier:nil
+ options:NSWorkspaceLaunchWithoutAddingToRecents | NSWorkspaceLaunchWithoutActivation | NSWorkspaceLaunchAsync
+ additionalEventParamDescriptor:nil
+ launchIdentifiers:nil];
+ } else {
+ #warning WARN - DAEMON NOT FOUND
+ }
+ }
+ break;
+ case ACTIVATION_DELAY_TAG:
+ [WarpPreferences setObject:[NSNumber numberWithFloat:[sender floatValue]] forKey:@"Delay"];
+ [_activationDelayTextField setFloatValue:[sender floatValue]];
+ break;
+ }
+}
+
+- (IBAction)changeModifierSetting:(id)sender
+{
+ NSMutableDictionary *modifiers = [[[WarpPreferences objectForKey:@"Modifiers"] mutableCopy] autorelease];
+
+ if (!modifiers) {
+ modifiers = [NSMutableDictionary dictionary];
+ }
+
+ switch ([sender tag]) {
+ case MODIFIER_COMMAND_TAG:
+ [modifiers setObject:[NSNumber numberWithBool:SENDER_STATE] forKey:@"Command"];
+ break;
+ case MODIFIER_OPTION_TAG:
+ [modifiers setObject:[NSNumber numberWithBool:SENDER_STATE] forKey:@"Option"];
+ break;
+ case MODIFIER_CONTROL_TAG:
+ [modifiers setObject:[NSNumber numberWithBool:SENDER_STATE] forKey:@"Control"];
+ break;
+ case MODIFIER_SHIFT_TAG:
+ [modifiers setObject:[NSNumber numberWithBool:SENDER_STATE] forKey:@"Shift"];
+ break;
+ }
+
+ [WarpPreferences setObject:modifiers forKey:@"Modifiers"];
+}
+
+@end

0 comments on commit 568375c

Please sign in to comment.
Something went wrong with that request. Please try again.