From 2b5e1c31bf466de0c9e96cbc896d6818cd256c75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Mon, 24 Apr 2017 10:19:16 +0200 Subject: [PATCH] [apps/calculation] Deselect table when deleting all rows Change-Id: Ia0f7f931669bdc2664ff99e3a9694652783812bd --- apps/calculation/history_controller.cpp | 9 +++++++++ apps/calculation/history_controller.h | 1 + escher/src/selectable_table_view.cpp | 3 +++ 3 files changed, 13 insertions(+) diff --git a/apps/calculation/history_controller.cpp b/apps/calculation/history_controller.cpp index 75f406c39..c092d1d14 100644 --- a/apps/calculation/history_controller.cpp +++ b/apps/calculation/history_controller.cpp @@ -20,6 +20,12 @@ void HistoryController::didBecomeFirstResponder() { app()->setFirstResponder(selectableTableView()); } +void HistoryController::willExitResponderChain(Responder * nextFirstResponder) { + if (nextFirstResponder == parentResponder()) { + selectableTableView()->deselectTable(); + } +} + bool HistoryController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::Down) { selectableTableView()->deselectTable(); @@ -106,6 +112,9 @@ bool HistoryController::handleEvent(Ion::Events::Event event) { void HistoryController::tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) { HistoryViewCell * selectedCell = (HistoryViewCell *)(t->selectedCell()); + if (selectedCell == nullptr) { + return; + } selectedCell->setParentResponder(t); if (selectableTableView()->selectedRow() < previousSelectedCellY) { selectedCell->setSelectedSubviewType(HistoryViewCell::SubviewType::Output); diff --git a/apps/calculation/history_controller.h b/apps/calculation/history_controller.h index f8eb24bf5..17b9b4156 100644 --- a/apps/calculation/history_controller.h +++ b/apps/calculation/history_controller.h @@ -17,6 +17,7 @@ public: bool handleEvent(Ion::Events::Event event) override; void didBecomeFirstResponder() override; + void willExitResponderChain(Responder * nextFirstResponder) override; void reload(); int numberOfRows() override; HighlightCell * reusableCell(int index, int type) override; diff --git a/escher/src/selectable_table_view.cpp b/escher/src/selectable_table_view.cpp index 4af47d8dd..9d57bccc0 100644 --- a/escher/src/selectable_table_view.cpp +++ b/escher/src/selectable_table_view.cpp @@ -73,6 +73,9 @@ bool SelectableTableView::selectCellAtLocation(int i, int j) { } HighlightCell * SelectableTableView::selectedCell() { + if (m_selectedCellX < 0 || m_selectedCellY < 0) { + return nullptr; + } return cellAtLocation(m_selectedCellX, m_selectedCellY); }