[code] Escaping the input loop on a 'home' event should be handled by

the code app instead of the console controller to ensure to escape the
input loop even when the toolbox (or any modal) is displayed
This commit is contained in:
Émilie Feral
2018-05-22 15:39:21 +02:00
committed by LeaNumworks
parent 5cfe20ad15
commit da8286d3f7
4 changed files with 17 additions and 3 deletions

View File

@@ -87,6 +87,19 @@ App::App(Container * container, Snapshot * snapshot) :
{
}
bool App::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::Home && m_consoleController.inputRunLoopActive()) {
// We need to return true here because we want to actually exit from the
// input run loop, which requires ending a dispatchEvent cycle.
m_consoleController.askInputRunLoopTermination();
if (m_modalViewController.isDisplayingModal()) {
m_modalViewController.dismissModalViewController();
}
return true;
}
return false;
}
bool App::textInputDidReceiveEvent(TextInput * textInput, Ion::Events::Event event) {
const char * pythonText = Helpers::PythonTextForEvent(event);
if (pythonText != nullptr) {

View File

@@ -39,6 +39,7 @@ public:
StackViewController * stackViewController() { return &m_codeStackViewController; }
ConsoleController * consoleController() { return &m_consoleController; }
PythonToolbox * pythonToolbox() { return &m_toolbox; }
bool handleEvent(Ion::Events::Event event) override;
bool textInputDidReceiveEvent(TextInput * textInput, Ion::Events::Event event);
private:
App(Container * container, Snapshot * snapshot);

View File

@@ -133,7 +133,7 @@ void ConsoleController::didBecomeFirstResponder() {
}
bool ConsoleController::handleEvent(Ion::Events::Event event) {
if ((event == Ion::Events::Home || event == Ion::Events::Up) && inputRunLoopActive()) {
if (event == Ion::Events::Up && inputRunLoopActive()) {
askInputRunLoopTermination();
// We need to return true here because we want to actually exit from the
// input run loop, which requires ending a dispatchEvent cycle.

View File

@@ -34,6 +34,8 @@ public:
void autoImport();
void autoImportScript(Script script, bool force = false);
void runAndPrintForCommand(const char * command);
bool inputRunLoopActive() { return m_inputRunLoopActive; }
void askInputRunLoopTermination() { m_inputRunLoopActive = false; }
// ViewController
View * view() override { return &m_selectableTableView; }
@@ -76,8 +78,6 @@ private:
static constexpr const char * k_importCommand1 = "from ";
static constexpr const char * k_importCommand2 = " import *";
static constexpr size_t k_maxImportCommandSize = 5 + 9 + TextField::maxBufferSize(); // strlen(k_importCommand1) + strlen(k_importCommand2) + TextField::maxBufferSize()
bool inputRunLoopActive() { return m_inputRunLoopActive; }
void askInputRunLoopTermination() { m_inputRunLoopActive = false; }
static constexpr int LineCellType = 0;
static constexpr int EditCellType = 1;
static constexpr int k_numberOfLineCells = 15; // May change depending on the screen height