Merge pull request #429 from heurist1/add_2_button_press_back_aka_topleft

Added a quick way of moving the cursor to the top left (back) location
This commit is contained in:
Erwin Ried 2021-11-14 20:10:04 +01:00 committed by GitHub
commit 535f671284
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 1 deletions

View File

@ -298,6 +298,12 @@ void EventDispatcher::handle_switches() {
}
if( in_key_event ) {
if (switches_state[(size_t)ui::KeyEvent::Left] && switches_state[(size_t)ui::KeyEvent::Up])
{
const auto event = static_cast<ui::KeyEvent>(ui::KeyEvent::Back);
context.focus_manager().update(top_widget, event);
}
// If we're in a key event, return. We will ignore all additional key
// presses until the first key is released. We also want to ignore events
// where the last key held generates a key event when other pressed keys

View File

@ -325,6 +325,7 @@ enum class KeyEvent {
Down = 2,
Up = 3,
Select = 4,
Back = 5, /* Left and Up together */
};
using EncoderEvent = int32_t;

View File

@ -179,7 +179,14 @@ void FocusManager::update(
};
const auto nearest = std::min_element(collection.cbegin(), collection.cend(), compare_fn);
if( nearest != collection.cend() ) {
// Up and left to indicate back
if (event == KeyEvent::Back) {
collection.clear();
widget_collect_visible(top_widget, find_back_fn, collection);
if (!collection.empty())
set_focus_widget(collection[0].first);
}
else if( nearest != collection.cend() ) {
//focus->blur();
const auto new_focus = (*nearest).first;
set_focus_widget(new_focus);