diff --git a/sidebar/SidebarMode.h b/sidebar/SidebarMode.h --- a/sidebar/SidebarMode.h +++ b/sidebar/SidebarMode.h @@ -80,8 +80,10 @@ Q_INVOKABLE QString actionIconName(const QString &name) const; Q_INVOKABLE void requestToolTip(int index, const QRectF &rect); Q_INVOKABLE void requestSubCategoryToolTip(int index, const QRectF &rect); + Q_INVOKABLE void requestMostUsedToolTip(int index, const QRectF &rect); Q_INVOKABLE void hideToolTip(); Q_INVOKABLE void hideSubCategoryToolTip(); + Q_INVOKABLE void hideMostUsedToolTip(); Q_INVOKABLE void loadMostUsed(int index); Q_INVOKABLE void showActionMenu(const QPoint &position); diff --git a/sidebar/SidebarMode.cpp b/sidebar/SidebarMode.cpp --- a/sidebar/SidebarMode.cpp +++ b/sidebar/SidebarMode.cpp @@ -234,6 +234,7 @@ ToolTipManager *toolTipManager = nullptr; ToolTipManager *subCategoryToolTipManager = nullptr; + ToolTipManager *mostUsedToolTipManager = nullptr; QQuickWidget * quickWidget = nullptr; KPackage::Package package; SubcategoryModel * subCategoryModel = nullptr; @@ -389,6 +390,13 @@ } } +void SidebarMode::requestMostUsedToolTip(int index, const QRectF &rect) +{ + if (showToolTips()) { + d->mostUsedToolTipManager->requestToolTip(d->mostUsedModel->index(index, 0), rect.toRect()); + } +} + void SidebarMode::hideToolTip() { d->toolTipManager->hideToolTip(); @@ -399,6 +407,11 @@ d->subCategoryToolTipManager->hideToolTip(); } +void SidebarMode::hideMostUsedToolTip() +{ + d->mostUsedToolTipManager->hideToolTip(); +} + void SidebarMode::loadMostUsed(int index) { const QModelIndex idx = d->mostUsedModel->index(index, 0); @@ -549,9 +562,6 @@ d->quickWidget->installEventFilter(this); - d->toolTipManager = new ToolTipManager(d->searchModel, d->quickWidget); - d->subCategoryToolTipManager = new ToolTipManager(d->subCategoryModel, d->quickWidget); - d->placeHolderWidget = new QQuickWidget(d->mainWidget); d->placeHolderWidget->quickWindow()->setTitle(i18n("Most Used")); d->placeHolderWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); @@ -568,6 +578,10 @@ d->mainLayout->addWidget( d->placeHolderWidget ); emit changeToolBarItems(BaseMode::NoItems); + d->toolTipManager = new ToolTipManager(d->searchModel, d->quickWidget, ToolTipManager::ToolTipPosition::Right); + d->subCategoryToolTipManager = new ToolTipManager(d->subCategoryModel, d->quickWidget, ToolTipManager::ToolTipPosition::Right); + d->mostUsedToolTipManager = new ToolTipManager(d->mostUsedModel, d->placeHolderWidget, ToolTipManager::ToolTipPosition::BottomCenter); + d->mostUsedModel->setResultModel(new ResultModel( AllResources | Agent(QStringLiteral("org.kde.systemsettings")) | HighScoredFirst | Limit(5), this)); } diff --git a/sidebar/ToolTips/tooltipmanager.h b/sidebar/ToolTips/tooltipmanager.h --- a/sidebar/ToolTips/tooltipmanager.h +++ b/sidebar/ToolTips/tooltipmanager.h @@ -38,13 +38,17 @@ Q_OBJECT public: + + enum ToolTipPosition { BottomCenter, Right }; + /** * Standard constructor. The ToolTipManager will start handling ToolTip events on the provided * view immediately. * * @param parent The view which will have the tooltips displayed for. + * @param toolTipPosition The position of the tooltip. */ - explicit ToolTipManager(QAbstractItemModel *model, QWidget* parent); + explicit ToolTipManager(QAbstractItemModel *model, QWidget* parent, ToolTipManager::ToolTipPosition toolTipPosition); ~ToolTipManager() override; public Q_SLOTS: diff --git a/sidebar/ToolTips/tooltipmanager.cpp b/sidebar/ToolTips/tooltipmanager.cpp --- a/sidebar/ToolTips/tooltipmanager.cpp +++ b/sidebar/ToolTips/tooltipmanager.cpp @@ -62,14 +62,16 @@ QModelIndex item; QRect itemRect; int delay; + ToolTipPosition toolTipPosition; }; -ToolTipManager::ToolTipManager(QAbstractItemModel *model, QWidget* parent) +ToolTipManager::ToolTipManager(QAbstractItemModel *model, QWidget* parent, ToolTipPosition toolTipPosition) : QObject(parent) , d(new ToolTipManager::Private) { d->view = parent; d->model = model; + d->toolTipPosition = toolTipPosition; d->tooltip = new KToolTipWidget(d->view); d->tooltip->setHideDelay(0); @@ -141,15 +143,16 @@ } QWidget * tip = createTipContent( menuItem ); - - if (qApp->isRightToLeft()) { - d->tooltip->showAt(d->itemRect.topLeft() - QPoint(d->tooltip->width(), 0), tip, d->view->nativeParentWidget()->windowHandle()); + if(d->toolTipPosition == ToolTipPosition::BottomCenter) { + d->tooltip->showBelow(d->itemRect, tip, d->view->nativeParentWidget()->windowHandle()); } else { - d->tooltip->showAt(d->itemRect.topRight(), tip, d->view->nativeParentWidget()->windowHandle()); + if (qApp->isRightToLeft()) { + d->tooltip->showAt(d->itemRect.topLeft() - QPoint(d->tooltip->width(), 0), tip, d->view->nativeParentWidget()->windowHandle()); + } else { + d->tooltip->showAt(d->itemRect.topRight(), tip, d->view->nativeParentWidget()->windowHandle()); + } } - connect(d->tooltip, &KToolTipWidget::hidden, tip, &QObject::deleteLater); - } QWidget * ToolTipManager::createTipContent( QModelIndex item ) diff --git a/sidebar/package/contents/ui/IntroIcon.qml b/sidebar/package/contents/ui/IntroIcon.qml --- a/sidebar/package/contents/ui/IntroIcon.qml +++ b/sidebar/package/contents/ui/IntroIcon.qml @@ -34,9 +34,12 @@ Layout.fillWidth: true Layout.alignment: Qt.AlignTop activeFocusOnTab: true + hoverEnabled: true onClicked: systemsettings.loadMostUsed(index); - + onEntered: systemsettings.requestMostUsedToolTip(index, item.mapToItem(root, 0, Kirigami.Units.largeSpacing, width, height)); + onExited: systemsettings.hideMostUsedToolTip(); + Keys.onTabPressed: { if (index < (mostUsedRepeater.count-1)) { event.accepted = false;