<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -206,6 +206,7 @@ var _CPEventPeriodicEventPeriod         = 0,
     unsigned            _clickCount;
     float               _pressure;
     CPWindow            _window;
+    Number              _windowNumber;
     CPString            _characters;
     CPString            _charactersIgnoringModifiers
     BOOL                _isARepeat;
@@ -327,7 +328,7 @@ var _CPEventPeriodicEventPeriod         = 0,
         _charactersIgnoringModifiers = unmodCharacters;
         _isARepeat = isARepeat;
         _keyCode = code;
-        _window = [CPApp windowWithWindowNumber:aWindowNumber];
+        _windowNumber = aWindowNumber;
     }
     
     return self;
@@ -397,6 +398,9 @@ var _CPEventPeriodicEventPeriod         = 0,
 */
 - (CPWindow)window
 {
+    if (!_window)
+        _window = [CPApp windowWithWindowNumber:_windowNumber];
+
     return _window;
 }
 
@@ -532,3 +536,23 @@ function _CPEventFirePeriodEvent()
     [CPApp sendEvent:[CPEvent otherEventWithType:CPPeriodic location:_CGPointMakeZero() modifierFlags:0 timestamp:0 windowNumber:0 context:nil subtype:0 data1:0 data2:0]];
 }
 
+var CPEventClass = [CPEvent class];
+
+function _CPEventFromNativeMouseEvent(aNativeEvent, anEventType, aPoint, modifierFlags, aTimestamp, aWindowNumber, aGraphicsContext, anEventNumber, aClickCount, aPressure)
+{
+    aNativeEvent.isa = CPEventClass;
+
+    aNativeEvent._type = anEventType;
+    aNativeEvent._location = aPoint;
+    aNativeEvent._modifierFlags = modifierFlags;
+    aNativeEvent._timestamp = aTimestamp;
+    aNativeEvent._windowNumber = aWindowNumber;
+    aNativeEvent._window = nil;
+    aNativeEvent._context = aGraphicsContext;
+    aNativeEvent._eventNumber = anEventNumber;
+    aNativeEvent._clickCount = aClickCount;
+    aNativeEvent._pressure = aPressure;
+
+    return aNativeEvent;
+}
+</diff>
      <filename>AppKit/CPEvent.j</filename>
    </modified>
    <modified>
      <diff>@@ -255,18 +255,6 @@
     return self;
 }
 
-/*!
-    Returns a hash of the CPArray.
-    @return an unsigned integer hash
-*/
-- (unsigned)hash
-{
-    if (self.__address == nil)
-        self.__address = _objj_generateObjectHash();
-
-    return self.__address;
-}
-
 // Querying an array
 /*!
     Returns &lt;code&gt;YES&lt;/code&gt; if the array contains &lt;code&gt;anObject&lt;/code&gt;. Otherwise, it returns &lt;code&gt;NO&lt;/code&gt;.</diff>
      <filename>Foundation/CPArray.j</filename>
    </modified>
    <modified>
      <diff>@@ -186,7 +186,7 @@ var __placeholder = new Number(),
     return anUnsignedShort;
 }
 
-- (CPString)hash
+- (CPString)UID
 {
     if (!_CPNumberHashes[self])
         _CPNumberHashes[self] = _objj_generateObjectHash();</diff>
      <filename>Foundation/CPNumber.j</filename>
    </modified>
    <modified>
      <diff>@@ -459,6 +459,14 @@ CPLog(@&quot;Got some class: %@&quot;, inst);&lt;/pre&gt;
 */
 - (unsigned)hash
 {
+    return [self UID];
+}
+
+- (unsigned)UID
+{
+    if (typeof self.__address === &quot;undefined&quot;)
+        self.__address = _objj_generateObjectHash();
+
     return __address;
 }
 </diff>
      <filename>Foundation/CPObject.j</filename>
    </modified>
    <modified>
      <diff>@@ -514,7 +514,7 @@ var CPStringRegexSpecialCharacters = [
 /*!
     Returns a hash of the string instance.
 */
-- (unsigned)hash
+- (unsigned)UID
 {
     var hash = dictionary_getValue(CPStringHashes, self);
     </diff>
      <filename>Foundation/CPString.j</filename>
    </modified>
    <modified>
      <diff>@@ -472,12 +472,9 @@ function objj_msgSend(/*id*/ aReceiver, /*SEL*/ aSelector)
 
     switch(arguments.length)
     {
-        case 2:
-            return implementation(aReceiver, aSelector);
-        case 3:
-            return implementation(aReceiver, aSelector, arguments[2]);
-        case 4:
-            return implementation(aReceiver, aSelector, arguments[2], arguments[3]);
+        case 2: return implementation(aReceiver, aSelector);
+        case 3: return implementation(aReceiver, aSelector, arguments[2]);
+        case 4: return implementation(aReceiver, aSelector, arguments[2], arguments[3]);
     }
 
     return implementation.apply(aReceiver, arguments);</diff>
      <filename>Objective-J/runtime.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>1224ca9493c78ecf3b4d6abdff9bfe3e9f900a8b</id>
    </parent>
  </parents>
  <author>
    <name>Francisco Ryan Tolmasky I</name>
    <login></login>
    <email>francisco@280north.com</email>
  </author>
  <url>http://github.com/280north/cappuccino/commit/f4b4d381653ab11d6647435f750d79a4f8d51632</url>
  <id>f4b4d381653ab11d6647435f750d79a4f8d51632</id>
  <committed-date>2009-05-30T23:16:18-07:00</committed-date>
  <authored-date>2009-05-30T23:16:18-07:00</authored-date>
  <message>Coat tailed CPEvents on native DOM events if they exist, saving the creation of many objects.

Reviewed by me.</message>
  <tree>97f204cfca0f6b40c13d18292b840876c63b6462</tree>
  <committer>
    <name>Francisco Ryan Tolmasky I</name>
    <login></login>
    <email>francisco@280north.com</email>
  </committer>
</commit>
