From 4a240eef190867e16e67f2990dd9f0ad9fb7cf31 Mon Sep 17 00:00:00 2001 From: emb <> Date: Tue, 10 Mar 2015 21:39:35 -0500 Subject: [PATCH] Fix bug when pressing back when scrolling (can cause crash or select the wrong item) --- RetroFE/Source/Graphics/Page.cpp | 8 +++++++- RetroFE/Source/Graphics/Page.h | 2 +- RetroFE/Source/RetroFE.cpp | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/RetroFE/Source/Graphics/Page.cpp b/RetroFE/Source/Graphics/Page.cpp index c5ec03d..c45cc46 100644 --- a/RetroFE/Source/Graphics/Page.cpp +++ b/RetroFE/Source/Graphics/Page.cpp @@ -162,7 +162,7 @@ bool Page::AddComponent(Component *c) return retVal; } -bool Page::IsIdle() +bool Page::IsMenuIdle() { bool idle = true; @@ -176,7 +176,13 @@ bool Page::IsIdle() break; } } + return idle; +} +bool Page::IsIdle() +{ + bool idle = IsMenuIdle(); + for(unsigned int i = 0; i < NUM_LAYERS && idle; ++i) { for(std::vector::iterator it = LayerComponents[i].begin(); it != LayerComponents[i].end() && idle; ++it) diff --git a/RetroFE/Source/Graphics/Page.h b/RetroFE/Source/Graphics/Page.h index 1c1123c..96d1ec7 100644 --- a/RetroFE/Source/Graphics/Page.h +++ b/RetroFE/Source/Graphics/Page.h @@ -61,9 +61,9 @@ public: bool IsHorizontalScroll(); unsigned int GetMenuDepth(); Item *GetSelectedItem(); - Item *GetPendingSelectedItem(); void RemoveSelectedItem(); bool IsIdle(); + bool IsMenuIdle(); bool IsHidden(); void SetStatusTextComponent(Text *t); void Update(float dt); diff --git a/RetroFE/Source/RetroFE.cpp b/RetroFE/Source/RetroFE.cpp index 59ff97b..cf12bbb 100644 --- a/RetroFE/Source/RetroFE.cpp +++ b/RetroFE/Source/RetroFE.cpp @@ -429,7 +429,7 @@ RetroFE::RETROFE_STATE RetroFE::ProcessUserInput(Page *page) { //todo: add admin mode support } - if (keys[Input.GetScancode(UserInput::KeyCodeSelect)]) + if (keys[Input.GetScancode(UserInput::KeyCodeSelect)] && page->IsMenuIdle()) { NextPageItem = page->GetSelectedItem(); @@ -453,7 +453,7 @@ RetroFE::RETROFE_STATE RetroFE::ProcessUserInput(Page *page) } } - if (keys[Input.GetScancode(UserInput::KeyCodeBack)]) + if (keys[Input.GetScancode(UserInput::KeyCodeBack)] && page->IsMenuIdle()) { if(Back(exit) || exit) {