---
I discovered the following behavior that is not in conformance with Cocoa:
- Backspace, tab, escape, and space are considered key equivalents.
- Function keys (F1 - FNN) are not considered key equivalents.
- CPTextField executes `performKeyEquivalent` twice if a field is first responder.
Build this Cocoa project and debug it: http://d.pr/Xc3h
Take a look at the debug log while typing some keys. You will see that backspace, tab, escape and space do not trigger `performKeyEquivalent`, and that `performKeyEquivalent` is only executed once for the first responder.
Then run the performKeyEquivalentsTest app in this commit and look at the console log while trying keys in the text fields. If you turn the old code on, you will see how `performKeyEquivalent` is executed twice for the first responder.
For reference on key handling code, I consulted this:
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html%23//apple_ref/doc/uid/10000060i-CH3-SW11
- Test application.
CPControl
---------
- Moved _formatter declaration up next to value, it was in the Target-Action Support section before.
- sendAction:to: should return a BOOL.
- Support for CPFormatter -editingStringForObjectValue.
- If a nil string is passed to -setStringValue in Cocoa, it raises an invalid parameter assertion and does nothing.
- Per Cocoa, if setting a string value fails, it tries again with an empty string.
- Removed a few extra blank lines.
- Changed NULL to nil.
CPTextField
-----------
- The string value is now cached in _stringValue to avoid constant calls to the formatter.
- There were several places where references to _inputElement were not wrapped with #if PLATFORM(DOM).
- When resigning first responder, if there is a formatter and formatting fails, reject the resignation and keep focus. Also, if the delegate responds to control:didFailToFormatString:errorDescription:, invoke it.
- _willBecomeFirstResponderByClick was not being set to NO when resigning. As a result, if you clicked in a field, tabbed to another field, and tabbed back to the original field, it would not select the text because it thought there was a mouse click.
- Don't send _sendStringValue: in keyUp: if the value has not changed. Previously it would do that for non-printing keys like navigation keys.
- insertNewLine: validates the string the same way resigning does.
- insertNewLine: would not send textDidEndEditing: if the field had no action, but it should.
- insertNewLine: should select all text (per Cocoa).
- insertNewLineIgnoringFieldEditor: and insertTabIgnoringFieldEditor: were not replacing the selection, Cocoa docs say they should.
- Per Cocoa, when setting an object value and there is a formatter, the value is first formatted as a string. If that fails, an object value for an empty string is attempted.
CPFormatter
-----------
- Fixed up the docs to match the method signatures.
- Indicated with "Ref" in argument types if the argument is pass by reference.
- isPartialStringValid:newEditingString:errorDescription: has a default implementation in Cocoa that nils the return values and returns YES.
- Fixed the name of isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:
- isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription: has a default implementation in Cocoa that invokes isPartialStringValid:newEditingString:errorDescription:
- make every object calling getBinding:forObject: aware of this change
- implement _CPCheckBoxValueBinder to handle binding to the value of a checkbox Closes: #1083
- re-implement CPTextField's behavior for controller markers using the new binder class
- disabled some tests that are not compliant with Cocoa
The message normally makes the text field the first responder, but this did not happen outside of the DOM platform.
Also documented the first responder side effect.
- Fixed _minimumFrameSize to take into account bezel and line break mode.
- Added test to show how sizeToFit was broken for multi-line labels in the old code.
- Added test to verify that behavior is correct for single-line labels.
CPKeyValueBinding will sent _setCurrentValueIsPlaceholder: to indicate to an object that current value is a placeholder and should be displayed as such. This commit implements the method for CPTextField and adds a unit test to test the behavior.