From 7a5501e53d2089307dfb14e72059f28bee6d1c14 Mon Sep 17 00:00:00 2001 From: listenerri Date: Mon, 17 Dec 2018 14:38:09 +0800 Subject: [PATCH] feat: update plugin API version Note: 1. add a new function in PluginProxyInterface for set applet widget visible from a plugin. 2. remove requestContextMenu function from PluginProxyInterface, cause's the context menu should be handled in Dock, it is enough for a plugin to simply provide menu data and handle callbacks with functions itemContextMenu and invokedMenuItem in PluginsItemInterface https://github.com/linuxdeepin/internal-discussion/issues/646 Change-Id: Ic4af4eee138e87911ff5b18ccbbb0c3f7187ac4d --- frame/controller/dockpluginscontroller.cpp | 24 ++++++++++--------- frame/controller/dockpluginscontroller.h | 2 +- frame/item/appitem.cpp | 14 +++-------- frame/item/dockitem.cpp | 7 +++++- frame/item/dockitem.h | 5 ++-- frame/item/pluginsitem.cpp | 3 ++- interfaces/constants.h | 1 + interfaces/pluginproxyinterface.h | 4 +++- plugins/datetime/datetime.json | 2 +- plugins/datetime/datetimeplugin.cpp | 1 - plugins/datetime/datetimewidget.cpp | 15 ------------ plugins/datetime/datetimewidget.h | 2 -- plugins/disk-mount/disk-mount.json | 2 +- plugins/keyboard-layout/keyboard.json | 2 +- plugins/network/item/applet/wirelesslist.cpp | 2 ++ plugins/network/item/applet/wirelesslist.h | 1 + plugins/network/item/deviceitem.h | 1 - plugins/network/item/wireditem.cpp | 15 ------------ plugins/network/item/wireditem.h | 1 - plugins/network/item/wirelessitem.cpp | 16 +------------ plugins/network/item/wirelessitem.h | 2 +- plugins/network/network.json | 2 +- plugins/network/networkplugin.cpp | 8 ++++--- plugins/network/networkplugin.h | 2 +- .../home_monitor/home_monitor.json | 2 +- plugins/power/power.json | 2 +- plugins/power/powerplugin.cpp | 6 ----- plugins/power/powerplugin.h | 1 - plugins/power/powerstatuswidget.cpp | 15 ------------ plugins/power/powerstatuswidget.h | 1 - plugins/shutdown/pluginwidget.cpp | 15 ------------ plugins/shutdown/pluginwidget.h | 1 - plugins/shutdown/shutdown.json | 2 +- plugins/shutdown/shutdownplugin.cpp | 7 ------ plugins/shutdown/shutdownplugin.h | 1 - plugins/sound/sound.json | 2 +- plugins/sound/sounditem.cpp | 16 ------------- plugins/sound/sounditem.h | 1 - plugins/sound/soundplugin.cpp | 1 - plugins/trash/trash.json | 2 +- plugins/trash/trashplugin.cpp | 7 ------ plugins/trash/trashplugin.h | 3 --- plugins/trash/trashwidget.cpp | 9 ------- plugins/trash/trashwidget.h | 1 - plugins/tray/abstracttraywidget.cpp | 2 ++ plugins/tray/fashiontraywidgetwrapper.cpp | 14 ----------- plugins/tray/fashiontraywidgetwrapper.h | 1 - plugins/tray/system-trays/systemtrayitem.cpp | 9 +++++++ plugins/tray/system-trays/systemtrayitem.h | 5 ++-- .../system-trays/systemtrayscontroller.cpp | 24 ++++++++++--------- .../tray/system-trays/systemtrayscontroller.h | 2 +- plugins/tray/tray.json | 2 +- 52 files changed, 81 insertions(+), 207 deletions(-) diff --git a/frame/controller/dockpluginscontroller.cpp b/frame/controller/dockpluginscontroller.cpp index 8b63a4de0..983fbb1ee 100644 --- a/frame/controller/dockpluginscontroller.cpp +++ b/frame/controller/dockpluginscontroller.cpp @@ -28,8 +28,6 @@ #include #include -#define API_VERSION "1.1" - DockPluginsController::DockPluginsController( DockItemController *itemControllerInter) : QObject(itemControllerInter) @@ -94,14 +92,6 @@ void DockPluginsController::itemRemoved(PluginsItemInterface * const itemInter, item->deleteLater(); } -void DockPluginsController::requestContextMenu(PluginsItemInterface * const itemInter, const QString &itemKey) -{ - PluginsItem *item = pluginItemAt(itemInter, itemKey); - Q_ASSERT(item); - - item->showContextMenu(); -} - void DockPluginsController::requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) { PluginsItem *item = pluginItemAt(itemInter, itemKey); @@ -118,6 +108,18 @@ void DockPluginsController::requestRefreshWindowVisible(PluginsItemInterface * c Q_EMIT item->requestRefreshWindowVisible(); } +void DockPluginsController::requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) +{ + PluginsItem *item = pluginItemAt(itemInter, itemKey); + Q_ASSERT(item); + + if (visible) { + item->showPopupApplet(itemInter->itemPopupApplet(itemKey)); + } else { + item->hidePopup(); + } +} + void DockPluginsController::startLoader() { DockPluginLoader *loader = new DockPluginLoader(this); @@ -150,7 +152,7 @@ void DockPluginsController::loadPlugin(const QString &pluginFile) { QPluginLoader *pluginLoader = new QPluginLoader(pluginFile); const auto meta = pluginLoader->metaData().value("MetaData").toObject(); - if (!meta.contains("api") || meta["api"].toString() != API_VERSION) + if (!meta.contains("api") || meta["api"].toString() != DOCK_PLUGIN_API_VERSION) { qWarning() << "plugin api version not matched!" << pluginFile; return; diff --git a/frame/controller/dockpluginscontroller.h b/frame/controller/dockpluginscontroller.h index 691fccd1c..aea88afc6 100644 --- a/frame/controller/dockpluginscontroller.h +++ b/frame/controller/dockpluginscontroller.h @@ -45,9 +45,9 @@ public: void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE; void itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE; void itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE; - void requestContextMenu(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE; void requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) Q_DECL_OVERRIDE; void requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE; + void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) Q_DECL_OVERRIDE; void saveValue(PluginsItemInterface *const itemInter, const QString &itemKey, const QVariant &value) Q_DECL_OVERRIDE; const QVariant getValue(PluginsItemInterface *const itemInter, const QString &itemKey, const QVariant& failback = QVariant()) Q_DECL_OVERRIDE; diff --git a/frame/item/appitem.cpp b/frame/item/appitem.cpp index 9385a5909..1b608f333 100644 --- a/frame/item/appitem.cpp +++ b/frame/item/appitem.cpp @@ -316,19 +316,11 @@ void AppItem::mousePressEvent(QMouseEvent *e) m_updateIconGeometryTimer->stop(); hidePopup(); - if (e->button() == Qt::RightButton) - { - if (perfectIconRect().contains(e->pos())) - { - QMetaObject::invokeMethod(this, "showContextMenu", Qt::QueuedConnection); - return; - } else { - return QWidget::mousePressEvent(e); - } - } - if (e->button() == Qt::LeftButton) MousePressPos = e->pos(); + + // context menu will handle in DockItem + DockItem::mousePressEvent(e); } void AppItem::mouseMoveEvent(QMouseEvent *e) diff --git a/frame/item/dockitem.cpp b/frame/item/dockitem.cpp index c6cee4483..ba018d5ac 100644 --- a/frame/item/dockitem.cpp +++ b/frame/item/dockitem.cpp @@ -150,8 +150,13 @@ void DockItem::mousePressEvent(QMouseEvent *e) // ignore this event to MainPanel/MainWindow to show context menu of MainWindow return e->ignore(); } - return showContextMenu(); + if (perfectIconRect().contains(e->pos())) { + return showContextMenu(); + } } + + // same as e->ignore above + QWidget::mousePressEvent(e); } void DockItem::enterEvent(QEvent *e) diff --git a/frame/item/dockitem.h b/frame/item/dockitem.h index d68e0d47d..e07fa6160 100644 --- a/frame/item/dockitem.h +++ b/frame/item/dockitem.h @@ -62,6 +62,9 @@ public: public slots: virtual void refershIcon() {} + void showPopupApplet(QWidget * const applet); + void hidePopup(); + signals: void dragStarted() const; void itemDropped(QObject *destination, const QPoint &dropPoint) const; @@ -79,10 +82,8 @@ protected: const QPoint popupMarkPoint() const; const QPoint topleftPoint() const; - void hidePopup(); void hideNonModel(); void popupWindowAccept(); - void showPopupApplet(QWidget * const applet); virtual void showPopupWindow(QWidget * const content, const bool model = false); virtual void showHoverTips(); virtual void invokedMenuItem(const QString &itemId, const bool checked); diff --git a/frame/item/pluginsitem.cpp b/frame/item/pluginsitem.cpp index 08155ca2b..420cd89ba 100644 --- a/frame/item/pluginsitem.cpp +++ b/frame/item/pluginsitem.cpp @@ -162,7 +162,8 @@ void PluginsItem::mousePressEvent(QMouseEvent *e) if (e->button() == Qt::LeftButton) MousePressPoint = e->pos(); - QWidget::mousePressEvent(e); + // context menu will handle in DockItem + DockItem::mousePressEvent(e); } void PluginsItem::mouseMoveEvent(QMouseEvent *e) diff --git a/interfaces/constants.h b/interfaces/constants.h index 3fad1e412..91314af54 100644 --- a/interfaces/constants.h +++ b/interfaces/constants.h @@ -27,6 +27,7 @@ namespace Dock { #define DOCK_PLUGIN_MIME "dock/plugin" +#define DOCK_PLUGIN_API_VERSION "1.1.1" #define PROP_DISPLAY_MODE "DisplayMode" /// diff --git a/interfaces/pluginproxyinterface.h b/interfaces/pluginproxyinterface.h index d526d99a9..2105ee13e 100644 --- a/interfaces/pluginproxyinterface.h +++ b/interfaces/pluginproxyinterface.h @@ -61,11 +61,13 @@ public: /// \brief requestContextMenu /// request show context menu /// - virtual void requestContextMenu(PluginsItemInterface * const itemInter, const QString &itemKey) = 0; + //virtual void requestContextMenu(PluginsItemInterface * const itemInter, const QString &itemKey) = 0; virtual void requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) = 0; virtual void requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) = 0; + virtual void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) = 0; + /// /// \brief saveValue /// save module config to .config/deepin/dde-dock.conf diff --git a/plugins/datetime/datetime.json b/plugins/datetime/datetime.json index a6508f326..ad498eeb3 100644 --- a/plugins/datetime/datetime.json +++ b/plugins/datetime/datetime.json @@ -1,3 +1,3 @@ { - "api": "1.1" + "api": "1.1.1" } diff --git a/plugins/datetime/datetimeplugin.cpp b/plugins/datetime/datetimeplugin.cpp index 776c05df4..9e0d1811e 100644 --- a/plugins/datetime/datetimeplugin.cpp +++ b/plugins/datetime/datetimeplugin.cpp @@ -42,7 +42,6 @@ DatetimePlugin::DatetimePlugin(QObject *parent) m_centralWidget = new DatetimeWidget; - connect(m_centralWidget, &DatetimeWidget::requestContextMenu, [this] { m_proxyInter->requestContextMenu(this, QString()); }); connect(m_centralWidget, &DatetimeWidget::requestUpdateGeometry, [this] { m_proxyInter->itemUpdate(this, QString()); }); connect(m_refershTimer, &QTimer::timeout, this, &DatetimePlugin::updateCurrentTimeString); diff --git a/plugins/datetime/datetimewidget.cpp b/plugins/datetime/datetimewidget.cpp index 66a44bd08..65f3c206b 100644 --- a/plugins/datetime/datetimewidget.cpp +++ b/plugins/datetime/datetimewidget.cpp @@ -183,21 +183,6 @@ void DatetimeWidget::paintEvent(QPaintEvent *e) painter.drawPixmap(rect().center() - m_cachedIcon.rect().center() / ratio, m_cachedIcon); } -void DatetimeWidget::mousePressEvent(QMouseEvent *e) -{ - if (e->button() != Qt::RightButton) - return QWidget::mousePressEvent(e); - - const QPoint p(e->pos() - rect().center()); - if (p.manhattanLength() < std::min(width(), height()) * 0.8 * 0.5) - { - emit requestContextMenu(); - return; - } - - QWidget::mousePressEvent(e); -} - const QPixmap DatetimeWidget::loadSvg(const QString &fileName, const QSize size) { const auto ratio = qApp->devicePixelRatio(); diff --git a/plugins/datetime/datetimewidget.h b/plugins/datetime/datetimewidget.h index 46006afa0..7a5f3ab39 100644 --- a/plugins/datetime/datetimewidget.h +++ b/plugins/datetime/datetimewidget.h @@ -35,7 +35,6 @@ public: signals: void requestUpdateGeometry() const; - void requestContextMenu() const; public slots: void set24HourFormat(const bool value); @@ -44,7 +43,6 @@ private: QSize sizeHint() const; void resizeEvent(QResizeEvent *e); void paintEvent(QPaintEvent *e); - void mousePressEvent(QMouseEvent *e); const QPixmap loadSvg(const QString &fileName, const QSize size); diff --git a/plugins/disk-mount/disk-mount.json b/plugins/disk-mount/disk-mount.json index a6508f326..ad498eeb3 100644 --- a/plugins/disk-mount/disk-mount.json +++ b/plugins/disk-mount/disk-mount.json @@ -1,3 +1,3 @@ { - "api": "1.1" + "api": "1.1.1" } diff --git a/plugins/keyboard-layout/keyboard.json b/plugins/keyboard-layout/keyboard.json index a6508f326..ad498eeb3 100644 --- a/plugins/keyboard-layout/keyboard.json +++ b/plugins/keyboard-layout/keyboard.json @@ -1,3 +1,3 @@ { - "api": "1.1" + "api": "1.1.1" } diff --git a/plugins/network/item/applet/wirelesslist.cpp b/plugins/network/item/applet/wirelesslist.cpp index aab5aa09b..804784932 100644 --- a/plugins/network/item/applet/wirelesslist.cpp +++ b/plugins/network/item/applet/wirelesslist.cpp @@ -361,5 +361,7 @@ void WirelessList::onActivateApFailed(const QString &apPath, const QString &uuid .arg(QString("network")) .arg(QString(QJsonDocument(m_editConnectionData).toJson())) .call(); + + Q_EMIT requestSetAppletVisible(false); } } diff --git a/plugins/network/item/applet/wirelesslist.h b/plugins/network/item/applet/wirelesslist.h index f061c984b..0bdf3f756 100644 --- a/plugins/network/item/applet/wirelesslist.h +++ b/plugins/network/item/applet/wirelesslist.h @@ -54,6 +54,7 @@ signals: void requestActiveAP(const QString &devPath, const QString &apPath, const QString &uuid) const; void requestDeactiveAP(const QString &devPath) const; void requestWirelessScan(); + void requestSetAppletVisible(const bool visible) const; private slots: void loadAPList(); diff --git a/plugins/network/item/deviceitem.h b/plugins/network/item/deviceitem.h index 8c1120081..50a0b086a 100644 --- a/plugins/network/item/deviceitem.h +++ b/plugins/network/item/deviceitem.h @@ -45,7 +45,6 @@ public: virtual void invokeMenuItem(const QString &menuId); signals: - void requestContextMenu() const; void requestSetDeviceEnable(const QString &path, const bool enable) const; protected: diff --git a/plugins/network/item/wireditem.cpp b/plugins/network/item/wireditem.cpp index 9086d3245..dc7dd07d0 100644 --- a/plugins/network/item/wireditem.cpp +++ b/plugins/network/item/wireditem.cpp @@ -87,21 +87,6 @@ void WiredItem::resizeEvent(QResizeEvent *e) m_delayTimer->start(); } -void WiredItem::mousePressEvent(QMouseEvent *e) -{ - if (e->button() != Qt::RightButton) - return QWidget::mousePressEvent(e); - - const QPoint p(e->pos() - rect().center()); - if (p.manhattanLength() < std::min(width(), height()) * 0.8 * 0.5) - { - emit requestContextMenu(); - return; - } - - return QWidget::mousePressEvent(e); -} - void WiredItem::refreshIcon() { m_delayTimer->start(); diff --git a/plugins/network/item/wireditem.h b/plugins/network/item/wireditem.h index 8684ab0cc..1a826bce6 100644 --- a/plugins/network/item/wireditem.h +++ b/plugins/network/item/wireditem.h @@ -44,7 +44,6 @@ public: protected: void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *e) override; - void mousePressEvent(QMouseEvent *e) override; private slots: void refreshIcon() override; diff --git a/plugins/network/item/wirelessitem.cpp b/plugins/network/item/wirelessitem.cpp index 09d6bd43a..baa5b868d 100644 --- a/plugins/network/item/wirelessitem.cpp +++ b/plugins/network/item/wirelessitem.cpp @@ -125,21 +125,6 @@ void WirelessItem::resizeEvent(QResizeEvent *e) m_icons.clear(); } -void WirelessItem::mousePressEvent(QMouseEvent *e) -{ - if (e->button() != Qt::RightButton) - return e->ignore(); - - const QPoint p(e->pos() - rect().center()); - if (p.manhattanLength() < std::min(width(), height()) * 0.8 * 0.5) - { - emit requestContextMenu(); - return; - } - - return QWidget::mousePressEvent(e); -} - const QPixmap WirelessItem::iconPix(const Dock::DisplayMode displayMode, const int size) { QString type; @@ -244,6 +229,7 @@ void WirelessItem::init() connect(m_APList, &WirelessList::requestActiveAP, this, &WirelessItem::requestActiveAP); connect(m_APList, &WirelessList::requestDeactiveAP, this, &WirelessItem::requestDeactiveAP); connect(m_APList, &WirelessList::requestWirelessScan, this, &WirelessItem::requestWirelessScan); + connect(m_APList, &WirelessList::requestSetAppletVisible, this, &WirelessItem::requestSetAppletVisible); QTimer::singleShot(0, this, [=]() { m_refreshTimer->start(); diff --git a/plugins/network/item/wirelessitem.h b/plugins/network/item/wirelessitem.h index bf3a900e7..0df8e3483 100644 --- a/plugins/network/item/wirelessitem.h +++ b/plugins/network/item/wirelessitem.h @@ -52,6 +52,7 @@ public Q_SLOTS: Q_SIGNALS: void requestActiveAP(const QString &devPath, const QString &apPath, const QString &uuid) const; void requestDeactiveAP(const QString &devPath) const; + void requestSetAppletVisible(const bool visible) const; void feedSecret(const QString &connectionPath, const QString &settingName, const QString &password, const bool autoConnect); void cancelSecret(const QString &connectionPath, const QString &settingName); void queryActiveConnInfo(); @@ -63,7 +64,6 @@ protected: bool eventFilter(QObject *o, QEvent *e); void paintEvent(QPaintEvent *e); void resizeEvent(QResizeEvent *e); - void mousePressEvent(QMouseEvent *e); private: const QPixmap iconPix(const Dock::DisplayMode displayMode, const int size); diff --git a/plugins/network/network.json b/plugins/network/network.json index 104633887..95c126746 100644 --- a/plugins/network/network.json +++ b/plugins/network/network.json @@ -1,4 +1,4 @@ { - "api": "1.1", + "api": "1.1.1", "depends-daemon-dbus-service": "com.deepin.daemon.Network" } diff --git a/plugins/network/networkplugin.cpp b/plugins/network/networkplugin.cpp index cb9dbb958..ebecdb4a6 100644 --- a/plugins/network/networkplugin.cpp +++ b/plugins/network/networkplugin.cpp @@ -214,6 +214,9 @@ void NetworkPlugin::onDeviceListChanged(const QList devices) connect(static_cast(item), &WirelessItem::queryConnectionSession, m_networkWorker, &NetworkWorker::queryConnectionSession); + connect(static_cast(item), &WirelessItem::requestSetAppletVisible, + this, &NetworkPlugin::onItemRequestSetAppletVisible); + m_networkWorker->queryAccessPoints(path); m_networkWorker->requestWirelessScan(); break; @@ -227,7 +230,6 @@ void NetworkPlugin::onDeviceListChanged(const QList devices) connect(device, &dde::network::NetworkDevice::enableChanged, m_delayRefreshTimer, static_cast(&QTimer::start)); - connect(item, &DeviceItem::requestContextMenu, this, &NetworkPlugin::contextMenuRequested); connect(item, &DeviceItem::requestSetDeviceEnable, m_networkWorker, &NetworkWorker::setDeviceEnable); connect(m_networkModel, &NetworkModel::connectivityChanged, item, &DeviceItem::refreshIcon); } @@ -320,10 +322,10 @@ void NetworkPlugin::loadPlugin() onDeviceListChanged(m_networkModel->devices()); } -void NetworkPlugin::contextMenuRequested() +void NetworkPlugin::onItemRequestSetAppletVisible(const bool visible) { DeviceItem *item = qobject_cast(sender()); Q_ASSERT(item); - m_proxyInter->requestContextMenu(this, item->path()); + m_proxyInter->requestSetAppletVisible(this, item->path(), visible); } diff --git a/plugins/network/networkplugin.h b/plugins/network/networkplugin.h index ba13ef206..4eeca4a91 100644 --- a/plugins/network/networkplugin.h +++ b/plugins/network/networkplugin.h @@ -59,7 +59,7 @@ public: private slots: void onDeviceListChanged(const QList devices); void refreshWiredItemVisible(); - void contextMenuRequested(); + void onItemRequestSetAppletVisible(const bool visible); private: DeviceItem *itemByPath(const QString &path); diff --git a/plugins/plugin-guide/home_monitor/home_monitor.json b/plugins/plugin-guide/home_monitor/home_monitor.json index a239e0d24..86b33bb4a 100644 --- a/plugins/plugin-guide/home_monitor/home_monitor.json +++ b/plugins/plugin-guide/home_monitor/home_monitor.json @@ -1,3 +1,3 @@ { - "api": "1.1" + "api": "1.1.1" } diff --git a/plugins/power/power.json b/plugins/power/power.json index e5769689d..c302e98e7 100644 --- a/plugins/power/power.json +++ b/plugins/power/power.json @@ -1,4 +1,4 @@ { - "api": "1.1", + "api": "1.1.1", "depends-daemon-dbus-service": "com.deepin.daemon.Power" } diff --git a/plugins/power/powerplugin.cpp b/plugins/power/powerplugin.cpp index cc77922a4..22f2aab66 100644 --- a/plugins/power/powerplugin.cpp +++ b/plugins/power/powerplugin.cpp @@ -181,11 +181,6 @@ void PowerPlugin::updateBatteryVisible() m_proxyInter->itemAdded(this, POWER_KEY); } -void PowerPlugin::requestContextMenu(const QString &itemKey) -{ - m_proxyInter->requestContextMenu(this, itemKey); -} - void PowerPlugin::loadPlugin() { if (m_pluginLoaded) { @@ -199,7 +194,6 @@ void PowerPlugin::loadPlugin() m_powerInter = new DBusPower(this); connect(m_powerInter, &DBusPower::BatteryPercentageChanged, this, &PowerPlugin::updateBatteryVisible); - connect(m_powerStatusWidget, &PowerStatusWidget::requestContextMenu, this, &PowerPlugin::requestContextMenu); updateBatteryVisible(); } diff --git a/plugins/power/powerplugin.h b/plugins/power/powerplugin.h index 08bb964e1..888522689 100644 --- a/plugins/power/powerplugin.h +++ b/plugins/power/powerplugin.h @@ -58,7 +58,6 @@ public: private: void updateBatteryVisible(); - void requestContextMenu(const QString &itemKey); void loadPlugin(); private: diff --git a/plugins/power/powerstatuswidget.cpp b/plugins/power/powerstatuswidget.cpp index e52f15f3b..65dcf0fc1 100644 --- a/plugins/power/powerstatuswidget.cpp +++ b/plugins/power/powerstatuswidget.cpp @@ -60,21 +60,6 @@ void PowerStatusWidget::paintEvent(QPaintEvent *e) painter.drawPixmap(rf.center() - rfp.center() / ratio, icon); } -void PowerStatusWidget::mousePressEvent(QMouseEvent *e) -{ - if (e->button() == Qt::LeftButton) - return QWidget::mousePressEvent(e); - - const QPoint p(e->pos() - rect().center()); - if (p.manhattanLength() < std::min(width(), height()) * 0.8 * 0.5) - { - emit requestContextMenu(POWER_KEY); - return; - } - - return QWidget::mousePressEvent(e); -} - QPixmap PowerStatusWidget::getBatteryIcon() { const BatteryPercentageMap data = m_powerInter->batteryPercentage(); diff --git a/plugins/power/powerstatuswidget.h b/plugins/power/powerstatuswidget.h index 0d9c157ed..d1041c6df 100644 --- a/plugins/power/powerstatuswidget.h +++ b/plugins/power/powerstatuswidget.h @@ -43,7 +43,6 @@ signals: protected: QSize sizeHint() const; void paintEvent(QPaintEvent *e); - void mousePressEvent(QMouseEvent *e); private: QPixmap getBatteryIcon(); diff --git a/plugins/shutdown/pluginwidget.cpp b/plugins/shutdown/pluginwidget.cpp index eba8233c5..00caab524 100644 --- a/plugins/shutdown/pluginwidget.cpp +++ b/plugins/shutdown/pluginwidget.cpp @@ -60,21 +60,6 @@ void PluginWidget::paintEvent(QPaintEvent *e) painter.drawPixmap(rect().center() - pixmap.rect().center() / qApp->devicePixelRatio(), pixmap); } -void PluginWidget::mousePressEvent(QMouseEvent *e) -{ - if (e->button() != Qt::RightButton) - return QWidget::mousePressEvent(e); - - const QPoint p(e->pos() - rect().center()); - if (p.manhattanLength() < std::min(width(), height()) * 0.8 * 0.5) - { - emit requestContextMenu(QString("shutdown")); - return; - } - - return QWidget::mousePressEvent(e); -} - void PluginWidget::enterEvent(QEvent *e) { e->accept(); diff --git a/plugins/shutdown/pluginwidget.h b/plugins/shutdown/pluginwidget.h index 4df7ee280..482da5560 100644 --- a/plugins/shutdown/pluginwidget.h +++ b/plugins/shutdown/pluginwidget.h @@ -39,7 +39,6 @@ signals: protected: QSize sizeHint() const; void paintEvent(QPaintEvent *e); - void mousePressEvent(QMouseEvent *e); void enterEvent(QEvent *e); void leaveEvent(QEvent *e); diff --git a/plugins/shutdown/shutdown.json b/plugins/shutdown/shutdown.json index a6508f326..ad498eeb3 100644 --- a/plugins/shutdown/shutdown.json +++ b/plugins/shutdown/shutdown.json @@ -1,3 +1,3 @@ { - "api": "1.1" + "api": "1.1.1" } diff --git a/plugins/shutdown/shutdownplugin.cpp b/plugins/shutdown/shutdownplugin.cpp index 80a162b65..f8fff6e01 100644 --- a/plugins/shutdown/shutdownplugin.cpp +++ b/plugins/shutdown/shutdownplugin.cpp @@ -208,11 +208,6 @@ void ShutdownPlugin::setSortKey(const QString &itemKey, const int order) m_proxyInter->saveValue(this, key, order); } -void ShutdownPlugin::requestContextMenu(const QString &itemKey) -{ - m_proxyInter->requestContextMenu(this, itemKey); -} - void ShutdownPlugin::loadPlugin() { if (m_pluginLoaded) { @@ -224,8 +219,6 @@ void ShutdownPlugin::loadPlugin() m_shutdownWidget = new PluginWidget; - connect(m_shutdownWidget, &PluginWidget::requestContextMenu, this, &ShutdownPlugin::requestContextMenu); - m_proxyInter->itemAdded(this, pluginName()); displayModeChanged(displayMode()); } diff --git a/plugins/shutdown/shutdownplugin.h b/plugins/shutdown/shutdownplugin.h index ec6419245..d84f3fbae 100644 --- a/plugins/shutdown/shutdownplugin.h +++ b/plugins/shutdown/shutdownplugin.h @@ -56,7 +56,6 @@ public: void setSortKey(const QString &itemKey, const int order) Q_DECL_OVERRIDE; private: - void requestContextMenu(const QString &itemKey); void loadPlugin(); private: diff --git a/plugins/sound/sound.json b/plugins/sound/sound.json index 1acd42371..c5f05e5a5 100644 --- a/plugins/sound/sound.json +++ b/plugins/sound/sound.json @@ -1,4 +1,4 @@ { - "api": "1.1", + "api": "1.1.1", "depends-daemon-dbus-service": "com.deepin.daemon.Audio" } diff --git a/plugins/sound/sounditem.cpp b/plugins/sound/sounditem.cpp index 66b739c5a..14b081e0b 100644 --- a/plugins/sound/sounditem.cpp +++ b/plugins/sound/sounditem.cpp @@ -123,22 +123,6 @@ void SoundItem::resizeEvent(QResizeEvent *e) refreshIcon(); } -void SoundItem::mousePressEvent(QMouseEvent *e) -{ - if (e->button() != Qt::RightButton) - return QWidget::mousePressEvent(e); - - const QPoint p(e->pos() - rect().center()); - if (p.manhattanLength() < std::min(width(), height()) * 0.8 * 0.5) - { - e->accept(); - emit requestContextMenu(); - return; - } - - return QWidget::mousePressEvent(e); -} - void SoundItem::wheelEvent(QWheelEvent *e) { QWheelEvent *event = new QWheelEvent(e->pos(), e->delta(), e->buttons(), e->modifiers()); diff --git a/plugins/sound/sounditem.h b/plugins/sound/sounditem.h index af3143948..efddad078 100644 --- a/plugins/sound/sounditem.h +++ b/plugins/sound/sounditem.h @@ -51,7 +51,6 @@ signals: protected: QSize sizeHint() const; void resizeEvent(QResizeEvent *e); - void mousePressEvent(QMouseEvent *e); void wheelEvent(QWheelEvent *e); void paintEvent(QPaintEvent *e); diff --git a/plugins/sound/soundplugin.cpp b/plugins/sound/soundplugin.cpp index 9e6433b4d..e74b3c426 100644 --- a/plugins/sound/soundplugin.cpp +++ b/plugins/sound/soundplugin.cpp @@ -45,7 +45,6 @@ void SoundPlugin::init(PluginProxyInterface *proxyInter) m_proxyInter = proxyInter; m_soundItem = new SoundItem; - connect(m_soundItem, &SoundItem::requestContextMenu, [this] { m_proxyInter->requestContextMenu(this, SOUND_KEY); }); if (!pluginIsDisable()) m_proxyInter->itemAdded(this, SOUND_KEY); diff --git a/plugins/trash/trash.json b/plugins/trash/trash.json index a6508f326..ad498eeb3 100644 --- a/plugins/trash/trash.json +++ b/plugins/trash/trash.json @@ -1,3 +1,3 @@ { - "api": "1.1" + "api": "1.1.1" } diff --git a/plugins/trash/trashplugin.cpp b/plugins/trash/trashplugin.cpp index 1de9f482e..7dfab07b9 100644 --- a/plugins/trash/trashplugin.cpp +++ b/plugins/trash/trashplugin.cpp @@ -38,8 +38,6 @@ TrashPlugin::TrashPlugin(QObject *parent) m_tipsLabel->setObjectName("trash"); m_tipsLabel->setStyleSheet("color:white;" "padding: 0 3px;"); - - connect(m_trashWidget, &TrashWidget::requestContextMenu, this, &TrashPlugin::showContextMenu); } const QString TrashPlugin::pluginName() const @@ -145,8 +143,3 @@ void TrashPlugin::displayModeChanged(const Dock::DisplayMode displayMode) else m_proxyInter->itemRemoved(this, pluginName()); } - -void TrashPlugin::showContextMenu() -{ - m_proxyInter->requestContextMenu(this, pluginName()); -} diff --git a/plugins/trash/trashplugin.h b/plugins/trash/trashplugin.h index b3c28a0ef..47f26fcb9 100644 --- a/plugins/trash/trashplugin.h +++ b/plugins/trash/trashplugin.h @@ -57,9 +57,6 @@ public: void setSortKey(const QString &itemKey, const int order) Q_DECL_OVERRIDE; void displayModeChanged(const Dock::DisplayMode displayMode) Q_DECL_OVERRIDE; -private: - void showContextMenu(); - private: TrashWidget *m_trashWidget; QLabel *m_tipsLabel; diff --git a/plugins/trash/trashwidget.cpp b/plugins/trash/trashwidget.cpp index 53d56fe78..07fe15470 100644 --- a/plugins/trash/trashwidget.cpp +++ b/plugins/trash/trashwidget.cpp @@ -180,15 +180,6 @@ void TrashWidget::resizeEvent(QResizeEvent *e) updateIcon(); } -void TrashWidget::mousePressEvent(QMouseEvent *e) -{ - const QPoint dis = e->pos() - rect().center(); - if (e->button() != Qt::RightButton || dis.manhattanLength() > std::min(width(), height()) * 0.8 * 0.5) - return QWidget::mousePressEvent(e); - - emit requestContextMenu(); -} - void TrashWidget::updateIcon() { const Dock::DisplayMode displayMode = qApp->property(PROP_DISPLAY_MODE).value(); diff --git a/plugins/trash/trashwidget.h b/plugins/trash/trashwidget.h index c9290b357..1738d836d 100644 --- a/plugins/trash/trashwidget.h +++ b/plugins/trash/trashwidget.h @@ -58,7 +58,6 @@ protected: void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE; void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE; void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE; - void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE; private slots: void removeApp(const QString &appKey); diff --git a/plugins/tray/abstracttraywidget.cpp b/plugins/tray/abstracttraywidget.cpp index 0430648af..9b4651f73 100644 --- a/plugins/tray/abstracttraywidget.cpp +++ b/plugins/tray/abstracttraywidget.cpp @@ -63,6 +63,8 @@ void AbstractTrayWidget::mouseReleaseEvent(QMouseEvent *e) m_lastMouseReleaseData.second = e->button(); m_handleMouseReleaseTimer->start(); + + QWidget::mouseReleaseEvent(e); } diff --git a/plugins/tray/fashiontraywidgetwrapper.cpp b/plugins/tray/fashiontraywidgetwrapper.cpp index 9cdcd6f50..330efe1e5 100644 --- a/plugins/tray/fashiontraywidgetwrapper.cpp +++ b/plugins/tray/fashiontraywidgetwrapper.cpp @@ -44,7 +44,6 @@ FashionTrayWidgetWrapper::FashionTrayWidgetWrapper(const QString &itemKey, Abstr setAcceptDrops(true); m_absTrayWidget->setVisible(true); - m_absTrayWidget->installEventFilter(this); m_layout->setSpacing(0); m_layout->setMargin(0); @@ -93,19 +92,6 @@ void FashionTrayWidgetWrapper::paintEvent(QPaintEvent *event) painter.fillPath(path, color); } -bool FashionTrayWidgetWrapper::eventFilter(QObject *watched, QEvent *event) -{ - if (watched == m_absTrayWidget) { - if (event->type() == QEvent::Type::MouseButtonPress) { - mousePressEvent(static_cast(event)); - } else if (event->type() == QEvent::Type::MouseButtonRelease) { - mouseReleaseEvent(static_cast(event)); - } - } - - return false; -} - void FashionTrayWidgetWrapper::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::MouseButton::LeftButton) { diff --git a/plugins/tray/fashiontraywidgetwrapper.h b/plugins/tray/fashiontraywidgetwrapper.h index 078a21092..6d0054d61 100644 --- a/plugins/tray/fashiontraywidgetwrapper.h +++ b/plugins/tray/fashiontraywidgetwrapper.h @@ -49,7 +49,6 @@ Q_SIGNALS: protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; - bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; diff --git a/plugins/tray/system-trays/systemtrayitem.cpp b/plugins/tray/system-trays/systemtrayitem.cpp index 8977e5226..ba9a93584 100644 --- a/plugins/tray/system-trays/systemtrayitem.cpp +++ b/plugins/tray/system-trays/systemtrayitem.cpp @@ -194,6 +194,15 @@ void SystemTrayItem::mousePressEvent(QMouseEvent *event) m_popupTipsDelayTimer->stop(); hideNonModel(); + if (event->button() == Qt::RightButton) { + const QPoint p(event->pos() - rect().center()); + if (p.manhattanLength() < std::min(width(), height()) * 0.8 * 0.5) + { + showContextMenu(); + return; + } + } + AbstractTrayWidget::mousePressEvent(event); } diff --git a/plugins/tray/system-trays/systemtrayitem.h b/plugins/tray/system-trays/systemtrayitem.h index cfe364e73..f0b6fbdc6 100644 --- a/plugins/tray/system-trays/systemtrayitem.h +++ b/plugins/tray/system-trays/systemtrayitem.h @@ -57,6 +57,9 @@ public: void detachPluginWidget(); void showContextMenu(); + void showPopupApplet(QWidget * const applet); + void hidePopup(); + protected: bool event(QEvent *event) Q_DECL_OVERRIDE; void enterEvent(QEvent *event) Q_DECL_OVERRIDE; @@ -68,10 +71,8 @@ protected: const QPoint popupMarkPoint() const; const QPoint topleftPoint() const; - void hidePopup(); void hideNonModel(); void popupWindowAccept(); - void showPopupApplet(QWidget * const applet); virtual void showPopupWindow(QWidget * const content, const bool model = false); virtual void showHoverTips(); diff --git a/plugins/tray/system-trays/systemtrayscontroller.cpp b/plugins/tray/system-trays/systemtrayscontroller.cpp index c3bd63cc0..877bfe6e4 100644 --- a/plugins/tray/system-trays/systemtrayscontroller.cpp +++ b/plugins/tray/system-trays/systemtrayscontroller.cpp @@ -26,8 +26,6 @@ #include #include -#define API_VERSION "1.1" - SystemTraysController::SystemTraysController(QObject *parent) : QObject(parent) , m_dbusDaemonInterface(QDBusConnection::sessionBus().interface()) @@ -83,14 +81,6 @@ void SystemTraysController::itemRemoved(PluginsItemInterface * const itemInter, item->deleteLater(); } -void SystemTraysController::requestContextMenu(PluginsItemInterface * const itemInter, const QString &itemKey) -{ - SystemTrayItem *item = pluginItemAt(itemInter, itemKey); - Q_ASSERT(item); - - item->showContextMenu(); -} - void SystemTraysController::requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) { SystemTrayItem *item = pluginItemAt(itemInter, itemKey); @@ -107,6 +97,18 @@ void SystemTraysController::requestRefreshWindowVisible(PluginsItemInterface * c Q_EMIT item->requestRefershWindowVisible(); } +void SystemTraysController::requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) +{ + SystemTrayItem *item = pluginItemAt(itemInter, itemKey); + Q_ASSERT(item); + + if (visible) { + item->showPopupApplet(itemInter->itemPopupApplet(itemKey)); + } else { + item->hidePopup(); + } +} + void SystemTraysController::startLoader() { SystemTrayLoader *loader = new SystemTrayLoader(this); @@ -139,7 +141,7 @@ void SystemTraysController::loadPlugin(const QString &pluginFile) { QPluginLoader *pluginLoader = new QPluginLoader(pluginFile); const auto meta = pluginLoader->metaData().value("MetaData").toObject(); - if (!meta.contains("api") || meta["api"].toString() != API_VERSION) + if (!meta.contains("api") || meta["api"].toString() != DOCK_PLUGIN_API_VERSION) { qWarning() << "plugin api version not matched!" << pluginFile; return; diff --git a/plugins/tray/system-trays/systemtrayscontroller.h b/plugins/tray/system-trays/systemtrayscontroller.h index 69557ccdc..c48e167ac 100644 --- a/plugins/tray/system-trays/systemtrayscontroller.h +++ b/plugins/tray/system-trays/systemtrayscontroller.h @@ -42,9 +42,9 @@ public: void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE; void itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE; void itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE; - void requestContextMenu(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE; void requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) Q_DECL_OVERRIDE; void requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE; + void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) Q_DECL_OVERRIDE; void saveValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant &value) Q_DECL_OVERRIDE; const QVariant getValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant& failback = QVariant()) Q_DECL_OVERRIDE; diff --git a/plugins/tray/tray.json b/plugins/tray/tray.json index c34a8cc4a..40c82cea6 100644 --- a/plugins/tray/tray.json +++ b/plugins/tray/tray.json @@ -1,4 +1,4 @@ { - "api": "1.1", + "api": "1.1.1", "depends-daemon-dbus-service": "com.deepin.dde.TrayManager" }