From 593b6cd83f1bb991358564d030c08abd8b0ab3d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20H=C3=B6ltt=C3=A4?= Date: Mon, 17 Dec 2018 15:08:17 +0100 Subject: Fix definition of CursorNavigation.hasCursor An item may now have the cursor on it also if the active focus is last set on one of its non-navigable children. --- plugin/cursornavigation.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'plugin') diff --git a/plugin/cursornavigation.cpp b/plugin/cursornavigation.cpp index 0a09ade..418844c 100644 --- a/plugin/cursornavigation.cpp +++ b/plugin/cursornavigation.cpp @@ -166,9 +166,8 @@ void CursorNavigation::setCursorOnItem(CursorNavigationAttached *item) if (item && item->acceptsCursor()) { item->setHasCursor(true); m_currentItem = item; - m_currentItem->item()->forceActiveFocus(); - //m_currentItem->item()->setFocus(true); qWarning() << "Set cursor to " << item->item(); + m_currentItem->item()->forceActiveFocus(); } else { qWarning() << "Set cursor to NULL"; m_currentItem = nullptr; @@ -179,7 +178,17 @@ void CursorNavigation::setCursorOnItem(CursorNavigationAttached *item) void CursorNavigation::onActiveFocusItemChanged() { qWarning() << "onActiveFocusItemChanged, item:" << m_window->activeFocusItem(); - setCursorOnItem(cursorNavigationAttachment(m_window->activeFocusItem())); + + QQuickItem *item = m_window->activeFocusItem(); + while (item) { + CursorNavigationAttached *cursorNavigable = cursorNavigationAttachment(item); + if (cursorNavigable && cursorNavigable->available()) { + setCursorOnItem(cursorNavigable); + return; + } + item = item->parentItem(); + } + setCursorOnItem(nullptr); } void CursorNavigation::registerItem(CursorNavigationAttached* item) -- cgit v1.2.3