Always apply the changes to a property in the text editor when changing focus.

Fixes #2749.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34847 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus 2010-01-01 23:57:27 +00:00
parent 3d9449fe75
commit 28051eb04d
2 changed files with 22 additions and 21 deletions

View File

@ -1,9 +1,6 @@
/*
* Copyright 2006, Haiku.
* Distributed under the terms of the MIT License.
*
* Authors:
* Stephan Aßmus <superstippi@gmx.de>
* Copyright 2006-2009, Stephan Aßmus <superstippi@gmx.de>.
* All rights reserved. Distributed under the terms of the MIT License.
*/
#include "InputTextView.h"
@ -69,10 +66,6 @@ InputTextView::KeyDown(const char* bytes, int32 numBytes)
// revert any typing changes
RevertChanges();
break;
case B_TAB:
// skip BTextView implementation
BView::KeyDown(bytes, numBytes);
// fall through
case B_RETURN:
ApplyChanges();
break;
@ -89,12 +82,21 @@ InputTextView::KeyDown(const char* bytes, int32 numBytes)
void
InputTextView::MakeFocus(bool focus)
{
if (focus != IsFocus()) {
if (BView* view = Parent())
view->Invalidate();
BTextView::MakeFocus(focus);
if (focus)
SelectAll();
if (focus == IsFocus())
return;
if (BView* view = Parent())
view->Invalidate();
BTextView::MakeFocus(focus);
if (focus) {
SelectAll();
fTextBeforeFocus = Text();
} else {
// Only pressing ESC is supposed to revert to the previous
// value and not invoke, but in that case, the text will already
// be the previous value when we lose focus here.
if (fTextBeforeFocus != Text())
Invoke();
}
}

View File

@ -1,15 +1,12 @@
/*
* Copyright 2006, Haiku.
* Distributed under the terms of the MIT License.
*
* Authors:
* Stephan Aßmus <superstippi@gmx.de>
* Copyright 2006-2009, Stephan Aßmus <superstippi@gmx.de>.
* All rights reserved. Distributed under the terms of the MIT License.
*/
#ifndef INPUT_TEXT_VIEW_H
#define INPUT_TEXT_VIEW_H
#include <Invoker.h>
#include <String.h>
#include <TextView.h>
class InputTextView : public BTextView,
@ -50,6 +47,8 @@ protected:
void _CheckTextRect();
bool fWasFocus;
BString fTextBeforeFocus;
};
#endif // INPUT_TEXT_VIEW_H