From 95c6d9532b44d5cd06576136e5372282fbe589e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Mon, 30 Oct 2017 16:07:10 +0100 Subject: [PATCH] [escher] Fixed TextField. A TextField delegate should process events before the TextField itself. EditableCellTableViewController now verifies the position of the cursor to determine if a Left or Right event should finish the TextField edition. Change-Id: I6c8e78d6d02c7ab87e7d81770b4242a16fecde32 --- apps/shared/editable_cell_table_view_controller.cpp | 4 ++-- escher/src/text_field.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/shared/editable_cell_table_view_controller.cpp b/apps/shared/editable_cell_table_view_controller.cpp index 57e6e01d0..43206e6e6 100644 --- a/apps/shared/editable_cell_table_view_controller.cpp +++ b/apps/shared/editable_cell_table_view_controller.cpp @@ -17,8 +17,8 @@ bool EditableCellTableViewController::textFieldShouldFinishEditing(TextField * t return TextFieldDelegate::textFieldShouldFinishEditing(textField, event) || (event == Ion::Events::Down && selectedRow() < numberOfRows()-1) || (event == Ion::Events::Up && selectedRow() > 0) - || (event == Ion::Events::Right && selectedColumn() < numberOfColumns()-1) - || (event == Ion::Events::Left && selectedColumn() > 0); } + || (event == Ion::Events::Right && textField->cursorLocation() == textField->textLength() && selectedColumn() < numberOfColumns()-1) + || (event == Ion::Events::Left && textField->cursorLocation() == 0 && selectedColumn() > 0); } bool EditableCellTableViewController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) { AppsContainer * appsContainer = ((TextFieldDelegateApp *)app())->container(); diff --git a/escher/src/text_field.cpp b/escher/src/text_field.cpp index d8f52bc09..2d787d0cf 100644 --- a/escher/src/text_field.cpp +++ b/escher/src/text_field.cpp @@ -337,6 +337,9 @@ bool TextField::handleEvent(Ion::Events::Event event) { } return true; } + if (m_delegate->textFieldDidReceiveEvent(this, event)) { + return true; + } if (event == Ion::Events::Left && isEditing() && cursorLocation() > 0) { setCursorLocation(cursorLocation()-1); return true; @@ -353,9 +356,6 @@ bool TextField::handleEvent(Ion::Events::Event event) { setCursorLocation(textLength()); return true; } - if (m_delegate->textFieldDidReceiveEvent(this, event)) { - return true; - } if (textFieldShouldFinishEditing(event) && isEditing()) { char bufferText[ContentView::k_maxBufferSize]; strlcpy(bufferText, m_contentView.textBuffer(), ContentView::k_maxBufferSize);