From ed47da35fe87873b2a89a1e6829ad158e0fb7e0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=8D=9A=E6=96=87?= Date: Wed, 22 Jun 2016 11:02:52 +0800 Subject: [PATCH] trigger popup menu when click out of icon Change-Id: Ib85c1a38ee88b574d99e403716a4f0bee140e055 --- frame/item/appitem.cpp | 8 +++++++- frame/item/dockitem.cpp | 13 +++++++++++++ frame/item/dockitem.h | 2 ++ frame/item/launcheritem.cpp | 3 +++ frame/util/docksettings.cpp | 25 ++++++++++++++----------- 5 files changed, 39 insertions(+), 12 deletions(-) diff --git a/frame/item/appitem.cpp b/frame/item/appitem.cpp index cfccb56e2..d792fd844 100644 --- a/frame/item/appitem.cpp +++ b/frame/item/appitem.cpp @@ -102,7 +102,13 @@ void AppItem::mouseReleaseEvent(QMouseEvent *e) void AppItem::mousePressEvent(QMouseEvent *e) { - DockItem::mousePressEvent(e); + if (e->button() == Qt::RightButton) + { + if (perfectIconRect().contains(e->pos())) + return showContextMenu(); + else + return QWidget::mousePressEvent(e); + } if (e->button() == Qt::LeftButton) MousePressPos = e->pos(); diff --git a/frame/item/dockitem.cpp b/frame/item/dockitem.cpp index 2176b0c83..9309dab88 100644 --- a/frame/item/dockitem.cpp +++ b/frame/item/dockitem.cpp @@ -37,6 +37,19 @@ void DockItem::mousePressEvent(QMouseEvent *e) return showContextMenu(); } +const QRect DockItem::perfectIconRect() const +{ + const QRect itemRect = rect(); + const int iconSize = std::min(itemRect.width(), itemRect.height()); + + QRect iconRect; + iconRect.setWidth(iconSize); + iconRect.setHeight(iconSize); + iconRect.moveTopLeft(itemRect.center() - iconRect.center()); + + return iconRect; +} + void DockItem::showContextMenu() { const QString menuJson = contextMenu(); diff --git a/frame/item/dockitem.h b/frame/item/dockitem.h index c85b59524..7c6a8356e 100644 --- a/frame/item/dockitem.h +++ b/frame/item/dockitem.h @@ -33,6 +33,8 @@ protected: void paintEvent(QPaintEvent *e); void mousePressEvent(QMouseEvent *e); + const QRect perfectIconRect() const; + void showContextMenu(); virtual void invokedMenuItem(const QString &itemId, const bool checked); virtual const QString contextMenu() const; diff --git a/frame/item/launcheritem.cpp b/frame/item/launcheritem.cpp index ff9b3d2e8..6ffae9e2f 100644 --- a/frame/item/launcheritem.cpp +++ b/frame/item/launcheritem.cpp @@ -27,6 +27,9 @@ void LauncherItem::resizeEvent(QResizeEvent *e) void LauncherItem::mousePressEvent(QMouseEvent *e) { + if (e->button() == Qt::RightButton && !perfectIconRect().contains(e->pos())) + return QWidget::mousePressEvent(e); + if (e->button() != Qt::LeftButton) return; diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index 1e88a03fe..e167dcba2 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -208,7 +208,6 @@ void DockSettings::dockItemCountChanged() void DockSettings::calculateWindowConfig() { - const QRect primaryRect = m_displayInter->primaryRect(); const int defaultHeight = AppItem::itemBaseHeight(); const int defaultWidth = AppItem::itemBaseWidth(); @@ -219,12 +218,12 @@ void DockSettings::calculateWindowConfig() case Top: case Bottom: m_mainWindowSize.setHeight(defaultHeight); - m_mainWindowSize.setWidth(primaryRect.width()); + m_mainWindowSize.setWidth(m_primaryRect.width()); break; case Left: case Right: - m_mainWindowSize.setHeight(primaryRect.height()); + m_mainWindowSize.setHeight(m_primaryRect.height()); m_mainWindowSize.setWidth(defaultWidth); break; @@ -234,33 +233,37 @@ void DockSettings::calculateWindowConfig() } else if (m_displayMode == Dock::Fashion) { - int appItemCount = 0; - int pluginItemCount = 0; +// int appItemCount = 0; +// int pluginItemCount = 0; + int perfectWidth = 0; + int perfectHeight = 0; const QList itemList = m_itemController->itemList(); for (auto item : itemList) { switch (item->itemType()) { case DockItem::Launcher: - case DockItem::App: ++appItemCount; break; - case DockItem::Plugins: ++pluginItemCount; break; + case DockItem::App: perfectWidth += defaultWidth; + perfectHeight += defaultHeight; break; + case DockItem::Plugins: perfectWidth += item->sizeHint().width(); + perfectHeight += item->sizeHint().height(); break; default:; } } - const int perfectWidth = qMin(primaryRect.width(), defaultWidth * (appItemCount + pluginItemCount)); - const int perfectHeight = qMin(primaryRect.height(), defaultHeight * (appItemCount + pluginItemCount)); + const int calcWidth = qMin(m_primaryRect.width(), perfectWidth); + const int calcHeight = qMin(m_primaryRect.height(), perfectHeight); switch (m_position) { case Top: case Bottom: m_mainWindowSize.setHeight(defaultHeight); - m_mainWindowSize.setWidth(perfectWidth); + m_mainWindowSize.setWidth(calcWidth); break; case Left: case Right: - m_mainWindowSize.setHeight(perfectHeight); + m_mainWindowSize.setHeight(calcHeight); m_mainWindowSize.setWidth(defaultWidth); break;