diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index b2e829ba1..b6d71be11 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -3161,10 +3161,19 @@ CPTableViewFirstColumnOnlyAutoresizingStyle = 5; /*! @ignore The action for any dataview that supports editing. This will only be called when the value was changed. + The table view becomes the first responder after user is done editing a dataview. */ - (void)_commitDataViewObjectValue:(id)sender { [_dataSource tableView:self setObjectValue:[sender objectValue] forTableColumn:sender.tableViewEditedColumnObj row:sender.tableViewEditedRowIndex]; + + if ([sender respondsToSelector:@selector(setEditable:)]) + [sender setEditable:NO]; + + if ([sender respondsToSelector:@selector(setSelectable:)]) + [sender setSelectable:NO]; + + [[self window] makeFirstResponder:self]; } /*! diff --git a/AppKit/CPTextField.j b/AppKit/CPTextField.j index fc11d50f8..67d9d3083 100644 --- a/AppKit/CPTextField.j +++ b/AppKit/CPTextField.j @@ -674,6 +674,10 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); { if ([anEvent keyCode] === CPReturnKeyCode) { + // selectText: has a side effect - it can change first responder of the window + // we have to prevent such behaviour inside this method because target should be able to change first responder after receiving action. + [self selectText:nil]; + if (_isEditing) { _isEditing = NO; @@ -681,7 +685,6 @@ CPTextFieldStatePlaceholder = CPThemeState("placeholder"); } [self sendAction:[self action] to:[self target]]; - [self selectText:nil]; [[[self window] platformWindow] _propagateCurrentDOMEvent:NO]; }