From 2dc2109876f81760b124008ab62c10e1632a3b33 Mon Sep 17 00:00:00 2001 From: jules Date: Sat, 25 May 2013 11:06:08 -0700 Subject: [PATCH] Popupmenu keyboard control fix. --- .../juce_gui_basics/menus/juce_PopupMenu.cpp | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp index 7c6e78f0b8..cf619c601a 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp @@ -1054,26 +1054,22 @@ private: void selectNextItem (const int delta) { disableTimerUntilMouseMoves(); - PopupMenu::ItemComponent* mic = nullptr; - bool wasLastOne = (currentChild == nullptr); - const int numItems = items.size(); - for (int i = 0; i < numItems + 1; ++i) - { - int index = (delta > 0) ? i : (numItems - 1 - i); - index = (index + numItems) % numItems; - - mic = items.getUnchecked (index); + int start = jmax (0, items.indexOf (currentChild)); - if (mic != nullptr && (mic->itemInfo.canBeTriggered() || mic->itemInfo.hasActiveSubMenu()) - && wasLastOne) - break; + for (int i = items.size(); --i >= 0;) + { + start += delta; - if (mic == currentChild) - wasLastOne = true; + if (PopupMenu::ItemComponent* mic = items.getUnchecked (jlimit (0, items.size() - 1, start))) + { + if (mic->itemInfo.canBeTriggered() || mic->itemInfo.hasActiveSubMenu()) + { + setCurrentlyHighlightedChild (mic); + break; + } + } } - - setCurrentlyHighlightedChild (mic); } void disableTimerUntilMouseMoves()