diff --git a/plugins/datetime/datetimeplugin.cpp b/plugins/datetime/datetimeplugin.cpp index b378706b3..327cd0524 100644 --- a/plugins/datetime/datetimeplugin.cpp +++ b/plugins/datetime/datetimeplugin.cpp @@ -18,6 +18,8 @@ DatetimePlugin::DatetimePlugin(QObject *parent) m_centeralWidget = new DatetimeWidget; + connect(m_centeralWidget, &DatetimeWidget::requestContextMenu, [this] {m_proxyInter->requestContextMenu(this, QString());}); + connect(m_refershTimer, &QTimer::timeout, this, &DatetimePlugin::updateCurrentTimeString); } @@ -66,6 +68,36 @@ const QString DatetimePlugin::itemCommand(const QString &itemKey) return "dde-calendar"; } +const QString DatetimePlugin::itemContextMenu(const QString &itemKey) +{ + Q_UNUSED(itemKey); + + QList items; + items.reserve(1); + + QMap open; + open["itemId"] = "open"; + open["itemText"] = tr("Time Settings"); + open["isActive"] = true; + items.push_back(open); + + QMap menu; + menu["items"] = items; + menu["checkableMenu"] = false; + menu["singleCheck"] = false; + + return QJsonDocument::fromVariant(menu).toJson(); +} + +void DatetimePlugin::invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked) +{ + Q_UNUSED(itemKey) + Q_UNUSED(menuId) + Q_UNUSED(checked) + + QProcess::startDetached("dde-control-center", QStringList() << "datetime"); +} + void DatetimePlugin::updateCurrentTimeString() { const QDateTime currentDateTime = QDateTime::currentDateTime(); diff --git a/plugins/datetime/datetimeplugin.h b/plugins/datetime/datetimeplugin.h index 977ab34eb..f9b804cb7 100644 --- a/plugins/datetime/datetimeplugin.h +++ b/plugins/datetime/datetimeplugin.h @@ -26,6 +26,9 @@ public: QWidget *itemTipsWidget(const QString &itemKey) override; const QString itemCommand(const QString &itemKey) override; + const QString itemContextMenu(const QString &itemKey) override; + + void invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked); private slots: void updateCurrentTimeString(); diff --git a/plugins/datetime/datetimewidget.cpp b/plugins/datetime/datetimewidget.cpp index acd8f6eaa..62c0fd586 100644 --- a/plugins/datetime/datetimewidget.cpp +++ b/plugins/datetime/datetimewidget.cpp @@ -105,7 +105,10 @@ void DatetimeWidget::mousePressEvent(QMouseEvent *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); } diff --git a/plugins/datetime/datetimewidget.h b/plugins/datetime/datetimewidget.h index 1e145543e..fa74f873d 100644 --- a/plugins/datetime/datetimewidget.h +++ b/plugins/datetime/datetimewidget.h @@ -10,6 +10,9 @@ class DatetimeWidget : public QWidget public: explicit DatetimeWidget(QWidget *parent = 0); +signals: + void requestContextMenu() const; + private: QSize sizeHint() const; void resizeEvent(QResizeEvent *e);