diff --git a/Common/UI/Root.cpp b/Common/UI/Root.cpp index 9a0da21e50..0e59c64510 100644 --- a/Common/UI/Root.cpp +++ b/Common/UI/Root.cpp @@ -156,6 +156,10 @@ static void MoveFocus(ViewGroup *root, FocusDirection direction) { return; } + if (!focusedView->CanMoveFocus(direction)) { + return; + } + NeighborResult neigh = root->FindNeighbor(focusedView, direction, NeighborResult()); if (neigh.view) { neigh.view->SetFocus(); diff --git a/Common/UI/View.h b/Common/UI/View.h index d1b4835706..19d7e47fde 100644 --- a/Common/UI/View.h +++ b/Common/UI/View.h @@ -414,6 +414,7 @@ public: virtual bool CanBeFocused() const { return true; } virtual bool SubviewFocused(View *view) { return false; } + virtual bool CanMoveFocus(FocusDirection dir) const { return true; } void SetPopupStyle(bool popupStyle) { popupStyle_ = popupStyle; } @@ -1111,6 +1112,8 @@ public: } void FocusChanged(int focusFlags) override; + + bool CanMoveFocus(FocusDirection dir) const { return dir != FocusDirection::FOCUS_LEFT && dir != FocusDirection::FOCUS_RIGHT; } void GetContentDimensions(const UIContext &dc, float &w, float &h) const override; void Draw(UIContext &dc) override; std::string DescribeText() const override;