diff --git a/frame/item/appitem.cpp b/frame/item/appitem.cpp index 5ad277b78..3f79980fa 100644 --- a/frame/item/appitem.cpp +++ b/frame/item/appitem.cpp @@ -43,6 +43,7 @@ AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent) setAccessibleName(m_itemEntry->name()); setAcceptDrops(true); + setMouseTracking(true); setLayout(centralLayout); m_itemView->setScene(m_itemScene); @@ -326,6 +327,10 @@ void AppItem::mouseMoveEvent(QMouseEvent *e) { e->accept(); + // handle preview + if (e->buttons() == Qt::NoButton) + return showPreview(); + // handle drag if (e->buttons() != Qt::LeftButton) return; @@ -335,10 +340,8 @@ void AppItem::mouseMoveEvent(QMouseEvent *e) return; const QPoint distance = pos - MousePressPos; - if (distance.manhattanLength() < APP_DRAG_THRESHOLD) - return; - - startDrag(); + if (distance.manhattanLength() > APP_DRAG_THRESHOLD) + return startDrag(); } void AppItem::wheelEvent(QWheelEvent *e) @@ -390,24 +393,6 @@ void AppItem::dropEvent(QDropEvent *e) m_itemEntry->HandleDragDrop(uriList); } -void AppItem::showHoverTips() -{ - // another model popup window is alread exists -// if (PopupWindow->isVisible() && PopupWindow->model()) -// return; - -// QWidget * const content = popupTips(); -// if (!content) -// return; - -// showPopupWindow(content); - - if (m_titles.isEmpty()) - return DockItem::showHoverTips(); - - showPreview(); -} - void AppItem::invokedMenuItem(const QString &itemId, const bool checked) { Q_UNUSED(checked); @@ -495,13 +480,23 @@ void AppItem::activeChanged() void AppItem::showPreview() { -// if (PopupWindow->isVisible()) -// return hidePopup(); + if (m_titles.isEmpty()) + return; + + // test cursor position + const QRect r = rect(); + const QPoint p = mapFromGlobal(QCursor::pos()); + + switch (DockPosition) + { + case Top: if (p.y() != r.top()) return; + case Left: if (p.x() != r.left()) return; + case Right: if (p.x() != r.right()) return; + case Bottom: if (p.y() != r.bottom()) return; + } m_appPreviewTips->updateLayoutDirection(DockPosition); // m_appPreviewTips->setWindowInfos(m_titles); - qApp->processEvents(); - showPopupWindow(m_appPreviewTips, true); } diff --git a/frame/item/appitem.h b/frame/item/appitem.h index 92c54e5a7..cf4cafa6f 100644 --- a/frame/item/appitem.h +++ b/frame/item/appitem.h @@ -42,7 +42,6 @@ private: void dragMoveEvent(QDragMoveEvent *e); void dropEvent(QDropEvent *e); - void showHoverTips(); void invokedMenuItem(const QString &itemId, const bool checked); const QString contextMenu() const; QWidget *popupTips(); diff --git a/frame/item/dockitem.cpp b/frame/item/dockitem.cpp index d1a6eb0b9..6e893caca 100644 --- a/frame/item/dockitem.cpp +++ b/frame/item/dockitem.cpp @@ -201,12 +201,14 @@ void DockItem::showPopupWindow(QWidget * const content, const bool model) case Right: popup->setArrowDirection(DockPopupWindow::ArrowRight); break; } popup->setContent(content); - popup->setMargin(5); popup->setWidth(content->sizeHint().width()); popup->setHeight(content->sizeHint().height()); const QPoint p = popupMarkPoint(); - QMetaObject::invokeMethod(popup, "show", Qt::QueuedConnection, Q_ARG(QPoint, p), Q_ARG(bool, model)); + if (!popup->isVisible()) + QMetaObject::invokeMethod(popup, "show", Qt::QueuedConnection, Q_ARG(QPoint, p), Q_ARG(bool, model)); + else + popup->show(p, model); connect(popup, &DockPopupWindow::accept, this, &DockItem::popupWindowAccept); }