From 1de090cea4a4e3d91d6092bfcbe9be10fcf2223e Mon Sep 17 00:00:00 2001 From: Yaya-Cout Date: Fri, 9 Dec 2022 17:42:44 +0100 Subject: [PATCH] [apps/home] Quick select for apps using numbers (#306) * [apps/home] Quick select for apps using numbers * [apps/home] Fix build error --- apps/home/controller.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/apps/home/controller.cpp b/apps/home/controller.cpp index a79700b3f..da3a147d4 100644 --- a/apps/home/controller.cpp +++ b/apps/home/controller.cpp @@ -75,7 +75,7 @@ Controller::Controller(Responder * parentResponder, SelectableTableViewDataSourc m_view.backgroundView()->setDefaultColor(Palette::HomeBackground); - + #ifdef HOME_DISPLAY_EXTERNALS int index = External::Archive::indexFromName("wallpaper.obm"); if(index > -1) { @@ -86,6 +86,13 @@ Controller::Controller(Responder * parentResponder, SelectableTableViewDataSourc #endif } +static constexpr Ion::Events::Event home_fast_navigation_events[] = { + Ion::Events::Seven, Ion::Events::Eight, Ion::Events::Nine, + Ion::Events::Four, Ion::Events::Five, Ion::Events::Six, + Ion::Events::One, Ion::Events::Two, Ion::Events::Three, + Ion::Events::Zero, Ion::Events::Dot, Ion::Events::EE +}; + bool Controller::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::OK || event == Ion::Events::EXE) { AppsContainer * container = AppsContainer::sharedAppsContainer(); @@ -143,6 +150,21 @@ bool Controller::handleEvent(Ion::Events::Event event) { return m_view.selectableTableView()->selectCellAtLocation(numberOfColumns() - 1, selectionDataSource()->selectedRow() - 1); } + // Handle fast home navigation + for(int i = 0; i < std::min((int) (sizeof(home_fast_navigation_events) / sizeof(Ion::Events::Event)), this->numberOfIcons()); i++) { + if (event == home_fast_navigation_events[i]) { + int row = i / k_numberOfColumns; + int column = i % k_numberOfColumns; + // Get if app is already selected + if (selectionDataSource()->selectedRow() == row && selectionDataSource()->selectedColumn() == column) { + // If app is already selected, launch it + return handleEvent(Ion::Events::OK); + } + // Else, select the app + return m_view.selectableTableView()->selectCellAtLocation(column, row); + } + } + return false; }