diff --git a/escher/include/escher/text_field.h b/escher/include/escher/text_field.h index 9b49c9f4c..c3276811e 100644 --- a/escher/include/escher/text_field.h +++ b/escher/include/escher/text_field.h @@ -90,6 +90,7 @@ protected: }; ContentView m_contentView; private: + bool privateHandleEvent(Ion::Events::Event event); void deleteCharPrecedingCursor(); bool deleteEndOfLine(); void scrollToCursor(); diff --git a/escher/include/escher/text_field_delegate.h b/escher/include/escher/text_field_delegate.h index c750836e1..4841ad643 100644 --- a/escher/include/escher/text_field_delegate.h +++ b/escher/include/escher/text_field_delegate.h @@ -7,9 +7,10 @@ class TextFieldDelegate { public: virtual bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) = 0; virtual bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) = 0; - virtual bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {return false;}; + virtual bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) { return false; }; virtual bool textFieldDidAbortEditing(TextField * textField, const char * text) {return false;}; - virtual Toolbox * toolboxForTextField(TextField * textFied) = 0; + virtual bool textFieldDidHandleEvent(TextField * textField, Ion::Events::Event event, bool returnValue) { return returnValue; }; + virtual Toolbox * toolboxForTextField(TextField * textField) = 0; }; #endif diff --git a/escher/src/text_field.cpp b/escher/src/text_field.cpp index 88564599f..753881674 100644 --- a/escher/src/text_field.cpp +++ b/escher/src/text_field.cpp @@ -275,31 +275,8 @@ bool TextField::insertTextAtLocation(const char * text, int location) { return false; } -void TextField::deleteCharPrecedingCursor() { - m_contentView.deleteCharPrecedingCursor(); - scrollToCursor(); - layoutSubviews(); -} - -bool TextField::deleteEndOfLine() { - if (m_contentView.deleteEndOfLine()) { - scrollToCursor(); - layoutSubviews(); - return true; - } - return false; -} - -KDSize TextField::minimalSizeForOptimalDisplay() const { - return KDSize(0, m_contentView.textHeight()); -} - -bool TextField::textFieldShouldFinishEditing(Ion::Events::Event event) { - return m_delegate->textFieldShouldFinishEditing(this, event); -} - -bool TextField::handleEvent(Ion::Events::Event event) { - assert(m_delegate != nullptr); +bool TextField::privateHandleEvent(Ion::Events::Event event) { + assert(m_delegate != nullptr); if (m_delegate->textFieldDidReceiveEvent(this, event)) { return true; } @@ -412,6 +389,35 @@ bool TextField::handleEvent(Ion::Events::Event event) { return false; } +void TextField::deleteCharPrecedingCursor() { + m_contentView.deleteCharPrecedingCursor(); + scrollToCursor(); + layoutSubviews(); +} + +bool TextField::deleteEndOfLine() { + if (m_contentView.deleteEndOfLine()) { + scrollToCursor(); + layoutSubviews(); + return true; + } + return false; +} + +KDSize TextField::minimalSizeForOptimalDisplay() const { + return KDSize(0, m_contentView.textHeight()); +} + +bool TextField::textFieldShouldFinishEditing(Ion::Events::Event event) { + return m_delegate->textFieldShouldFinishEditing(this, event); +} + +bool TextField::handleEvent(Ion::Events::Event event) { + assert(m_delegate != nullptr); + bool didHandleEvent = privateHandleEvent(event); + return m_delegate->textFieldDidHandleEvent(this, event, didHandleEvent); +} + void TextField::scrollToCursor() { if (!isEditing()) { return;