From a5279b5efd0de16c4db4e158921f76d0811dc009 Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Wed, 8 Jun 2022 00:00:41 +0100 Subject: [PATCH] qtquick: Minor refactoring, add TabBar_qtquick::qmlTabs() --- src/qtquick/views/TabBar_qtquick.cpp | 43 +++++++++++++++++++--------- src/qtquick/views/TabBar_qtquick.h | 2 ++ 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/qtquick/views/TabBar_qtquick.cpp b/src/qtquick/views/TabBar_qtquick.cpp index 3eb9c545..ef82ad5a 100644 --- a/src/qtquick/views/TabBar_qtquick.cpp +++ b/src/qtquick/views/TabBar_qtquick.cpp @@ -32,6 +32,29 @@ TabBar_qtquick::TabBar_qtquick(Controllers::TabBar *controller, QQuickItem *pare { } +QHash TabBar_qtquick::qmlTabs() const +{ + if (!m_tabBarQmlItem) + return {}; + + /// Returns the list of QtQuickControls tabs in our tab bar + QHash tabs; + + if (QQuickItem *internalListView = listView()) { + const auto childItems = internalListView->childItems(); + if (!childItems.isEmpty()) { + for (QQuickItem *item : childItems.first()->childItems()) { + bool ok = false; + const int index = item->property("tabIndex").toInt(&ok); + if (ok) + tabs.insert(index, item); + } + } + } + + return tabs; +} + int TabBar_qtquick::tabAt(QPoint localPt) const { // QtQuick's TabBar doesn't provide any API for this. @@ -44,21 +67,13 @@ int TabBar_qtquick::tabAt(QPoint localPt) const const QPointF globalPos = m_tabBarQmlItem->mapToGlobal(localPt); - if (QQuickItem *internalListView = listView()) { - const auto childItems = internalListView->childItems(); - if (!childItems.isEmpty()) { - for (QQuickItem *item : childItems.first()->childItems()) { - bool ok = false; - const int index = item->property("tabIndex").toInt(&ok); - if (ok && item->contains(item->mapFromGlobal(globalPos))) { - return index; - } - } + const QHash tabs = qmlTabs(); + for (auto it = tabs.keyValueBegin(); it != tabs.keyValueEnd(); ++it) { + QQuickItem *tab = it->second; + if (tab->contains(tab->mapFromGlobal(globalPos))) { + const int index = it->first; + return index; } - - return -1; - } else { - qWarning() << Q_FUNC_INFO << "Couldn't find the internal ListView"; } return -1; diff --git a/src/qtquick/views/TabBar_qtquick.h b/src/qtquick/views/TabBar_qtquick.h index 9b9155be..7c07b33d 100644 --- a/src/qtquick/views/TabBar_qtquick.h +++ b/src/qtquick/views/TabBar_qtquick.h @@ -25,6 +25,7 @@ #include "views/TabBar.h" #include +#include namespace KDDockWidgets::Controllers { class TabBar; @@ -62,6 +63,7 @@ protected: bool event(QEvent *ev) override; private: + QHash qmlTabs() const; QQuickItem *tabAt(int index) const; QQuickItem *listView() const; QPointer m_tabBarQmlItem;