From 044fc3af69c3fa5d4f26914c4bb225516bd3ce17 Mon Sep 17 00:00:00 2001 From: Ilya Kulakov Date: Fri, 31 Dec 2010 12:07:42 +0600 Subject: [PATCH] Refs issue #1607. Make CPTableView the first responder after user is done editing dataview. --- AppKit/CPTableView.j | 9 +++++++++ AppKit/CPTextField.j | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/AppKit/CPTableView.j b/AppKit/CPTableView.j index a8cb098fd..82e32e8c8 100644 --- a/AppKit/CPTableView.j +++ b/AppKit/CPTableView.j @@ -3162,10 +3162,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 d5609f26b..2a0f1bdbf 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]; }