<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -459,7 +459,10 @@ CPRunContinuesResponse  = -1002;
 
     // Check if this is a candidate for key equivalent...
     if ([anEvent _couldBeKeyEquivalent] &amp;&amp; [self _handleKeyEquivalent:anEvent])
+    {
+        [[[anEvent window] platformWindow] _propagateCurrentDOMEvent:NO];
         return;
+    }
 
     if (_eventListeners.length)
     {</diff>
      <filename>AppKit/CPApplication.j</filename>
    </modified>
    <modified>
      <diff>@@ -448,14 +448,16 @@ var supportsNativeDragAndDrop = [CPPlatform supportsDragAndDrop];
                               KeyCodesToPrevent[aDOMEvent.keyCode];
 
     var isNativePasteEvent = NO,
-        isNativeCopyOrCutEvent = NO;
+        isNativeCopyOrCutEvent = NO,
+        overrideCharacters = nil;
     
     switch (aDOMEvent.type)
     {
         case &quot;keydown&quot;:     // Grab and store the keycode now since it is correct and consistent at this point.
                             _keyCode = aDOMEvent.keyCode;
-                            
+
                             var characters = String.fromCharCode(_keyCode).toLowerCase();
+                            overrideCharacters = modifierFlags &amp; CPShiftKeyMask ? characters.toUpperCase() : characters;
                             
                             // If this could be a native PASTE event, then we need to further examine it before 
                             // sending a CPEvent.  Select our element to see if anything gets pasted in it.
@@ -474,7 +476,7 @@ var supportsNativeDragAndDrop = [CPPlatform supportsDragAndDrop];
                             // can capture our internal Cappuccino pasteboard.
                             else if ((characters == &quot;c&quot; || characters == &quot;x&quot;) &amp;&amp; (modifierFlags &amp; CPPlatformActionKeyMask))
                                 isNativeCopyOrCutEvent = YES;
-    
+
                             // Also, certain browsers (IE and Safari), have broken keyboard supportwhere they don't send keypresses for certain events.
                             // So, allow the keypress event to handle the event if we are not a browser with broken (remedial) key support...
                             else if (!CPFeatureIsCompatible(CPJavascriptRemedialKeySupport))
@@ -487,6 +489,7 @@ var supportsNativeDragAndDrop = [CPPlatform supportsDragAndDrop];
                             // If this is in fact our broke state, continue to keypress and send the keydown.
         case &quot;keypress&quot;:    // If the source of this event is our pasteboard element, then simply let it continue 
                             // as normal, so that the paste event can successfully complete.
+
                             if ((aDOMEvent.target || aDOMEvent.srcElement) == _DOMPasteboardElement)
                                 return;
                             
@@ -495,20 +498,22 @@ var supportsNativeDragAndDrop = [CPPlatform supportsDragAndDrop];
                                 isARepeat = (_charCodes[keyCode] != nil);
 
                             _charCodes[keyCode] = charCode;
-                                
-                            var characters = String.fromCharCode(charCode),
+
+                            var characters = overrideCharacters || String.fromCharCode(charCode),
                                 charactersIgnoringModifiers = characters.toLowerCase();
-                                                                        
+
+                            // Safari won't send proper capitalization during cmd-key events
+                            if (!overrideCharacters &amp;&amp; (modifierFlags &amp; CPCommandKeyMask) &amp;&amp; (modifierFlags &amp; CPShiftKeyMask))
+                                characters = characters.toUpperCase();
+
                             event = [CPEvent keyEventWithType:CPKeyDown location:location modifierFlags:modifierFlags
                                         timestamp:timestamp windowNumber:windowNumber context:nil
                                         characters:characters charactersIgnoringModifiers:charactersIgnoringModifiers isARepeat:isARepeat keyCode:keyCode];
-                            
+
                             if (isNativePasteEvent)
                             {
                                 _pasteboardKeyDownEvent = event;
-                                
                                 window.setNativeTimeout(function () { [self _checkPasteboardElement] }, 0);
-                                
                                 return;
                             }
 </diff>
      <filename>AppKit/Platform/DOM/CPPlatformWindow+DOM.j</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e8b1ff88461f8b4eb303e5435079f00b40159af2</id>
    </parent>
  </parents>
  <author>
    <name>Ross Boucher</name>
    <email>ross@280north.com</email>
  </author>
  <url>http://github.com/280north/cappuccino/commit/93c90274b5376b5c7ef0c9dea0c1ffcec4499ab7</url>
  <id>93c90274b5376b5c7ef0c9dea0c1ffcec4499ab7</id>
  <committed-date>2009-11-02T16:47:07-08:00</committed-date>
  <authored-date>2009-11-02T16:47:07-08:00</authored-date>
  <message>Updates for massaging a few key inputs.</message>
  <tree>c1e8d95726cd11b873a89fc143ea104a0f436c03</tree>
  <committer>
    <name>Ross Boucher</name>
    <email>ross@280north.com</email>
  </committer>
</commit>
