From a9445c3b9c8f51a229b62c25df1aeebe5c85c88d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20H=C3=B6ltt=C3=A4?= Date: Mon, 3 Dec 2018 13:44:15 +0100 Subject: Cursor now movable only to items that set the acceptsCursor value to true --- plugin/cursornavigation.cpp | 4 ++- plugin/cursornavigationattached.cpp | 59 ++++++++++++++++++++++++------------- 2 files changed, 42 insertions(+), 21 deletions(-) (limited to 'plugin') diff --git a/plugin/cursornavigation.cpp b/plugin/cursornavigation.cpp index e35a939..718a24b 100644 --- a/plugin/cursornavigation.cpp +++ b/plugin/cursornavigation.cpp @@ -176,7 +176,7 @@ void CursorNavigation::registerItem(CursorNavigationAttached* item) QQuickItem *parentItem = item->item()->parentItem(); CursorNavigationAttached *parentCNA=nullptr; while (parentItem) { - if ((parentCNA=CursorNavigation::cursorNavigationAttachment(parentItem))) + if ((parentCNA=CursorNavigation::cursorNavigationAttachment(parentItem)) && parentCNA->acceptsCursor()) break; parentItem = parentItem->parentItem(); } @@ -198,6 +198,8 @@ void CursorNavigation::unregisterItem(CursorNavigationAttached* item) if (item->m_parentNavigable) item->m_parentNavigable->m_children.removeOne(item); + + //TODO if the item that is being unregistered has children, they should be reassigned to the item's parent } void CursorNavigation::_move(qreal angle, qreal tolerance, bool discrete) diff --git a/plugin/cursornavigationattached.cpp b/plugin/cursornavigationattached.cpp index af34bfd..1c68ac9 100644 --- a/plugin/cursornavigationattached.cpp +++ b/plugin/cursornavigationattached.cpp @@ -37,6 +37,13 @@ void CursorNavigationAttached::setAcceptsCursor(bool acceptsCursor) { if (acceptsCursor != m_acceptsCursor) { m_acceptsCursor=acceptsCursor; + if (m_cursorNavigation) { + if (m_acceptsCursor) + m_cursorNavigation->registerItem(this); + else + m_cursorNavigation->unregisterItem(this); + } + emit acceptsCursorChanged(m_acceptsCursor); } } @@ -71,75 +78,89 @@ void CursorNavigationAttached::setEscapeTarget(QQuickItem *escapeTarget) void CursorNavigationAttached::move(qreal angle, qreal tolerance) { qWarning() << "move"; - m_cursorNavigation->move(angle, tolerance, false); + if (m_cursorNavigation) + m_cursorNavigation->move(angle, tolerance, false); } void CursorNavigationAttached::move(QVector2D vector, qreal tolerance) { qWarning() << "move"; - m_cursorNavigation->move(vector, tolerance, false); + if (m_cursorNavigation) + m_cursorNavigation->move(vector, tolerance, false); } QQuickItem *CursorNavigationAttached::find(qreal angle, qreal tolerance) { - CursorNavigationAttached *item = m_cursorNavigation->find(angle, tolerance, false); - if (item) - return item->item(); + if (m_cursorNavigation) { + CursorNavigationAttached *item = m_cursorNavigation->find(angle, tolerance, false); + if (item) + return item->item(); + } return nullptr; } QQuickItem *CursorNavigationAttached::find(QVector2D vector, qreal tolerance) { - CursorNavigationAttached *item = m_cursorNavigation->find(vector, tolerance, false); - if (item) - return item->item(); + if (m_cursorNavigation) { + CursorNavigationAttached *item = m_cursorNavigation->find(vector, tolerance, false); + if (item) + return item->item(); + } return nullptr; } void CursorNavigationAttached::moveUp() { - m_cursorNavigation->move(-90, 0, true); + if (m_cursorNavigation) + m_cursorNavigation->move(-90, 0, true); } void CursorNavigationAttached::moveDown() { - m_cursorNavigation->move(90, 0, true); + if (m_cursorNavigation) + m_cursorNavigation->move(90, 0, true); } void CursorNavigationAttached::moveRight() { - m_cursorNavigation->move(0, 0, true); + if (m_cursorNavigation) + m_cursorNavigation->move(0, 0, true); } void CursorNavigationAttached::moveLeft() { - m_cursorNavigation->move(180, 0, true); + if (m_cursorNavigation) + m_cursorNavigation->move(180, 0, true); } void CursorNavigationAttached::activate() { - m_cursorNavigation->action(Activate); + if (m_cursorNavigation) + m_cursorNavigation->action(Activate); } void CursorNavigationAttached::forward() { - m_cursorNavigation->action(Forward); + if (m_cursorNavigation) + m_cursorNavigation->action(Forward); } void CursorNavigationAttached::back() { - m_cursorNavigation->action(Back); + if (m_cursorNavigation) + m_cursorNavigation->action(Back); } void CursorNavigationAttached::escape() { - m_cursorNavigation->action(Escape); + if (m_cursorNavigation) + m_cursorNavigation->action(Escape); } void CursorNavigationAttached::onWindowChanged(QQuickWindow *window) { qDebug() << "window changed, window = " << window; - if (m_cursorNavigation) + if (m_cursorNavigation && m_acceptsCursor) m_cursorNavigation->unregisterItem(this); if (window) { @@ -148,10 +169,8 @@ void CursorNavigationAttached::onWindowChanged(QQuickWindow *window) m_cursorNavigation = nullptr; } - if (m_cursorNavigation) + if (m_cursorNavigation && m_acceptsCursor) m_cursorNavigation->registerItem(this); - - //emit focusManagerChanged(); } QQuickItem *CursorNavigationAttached::item() const -- cgit v1.2.3