diff --git a/frame/util/menuworker.cpp b/frame/util/menuworker.cpp index b891f8efc..4c797c7ed 100644 --- a/frame/util/menuworker.cpp +++ b/frame/util/menuworker.cpp @@ -40,9 +40,8 @@ MenuWorker::MenuWorker(DBusDock *dockInter,QWidget *parent) } -QMenu *MenuWorker::createMenu() +QMenu *MenuWorker::createMenu(QMenu *settingsMenu) { - QMenu *settingsMenu = new QMenu; settingsMenu->setAccessibleName("settingsmenu"); settingsMenu->setTitle("Settings Menu"); @@ -169,7 +168,7 @@ void MenuWorker::onDockSettingsTriggered() .call(); } -void MenuWorker::showDockSettingsMenu() +void MenuWorker::showDockSettingsMenu(QMenu *menu) { // 菜单功能被禁用 static const QGSettings *setting = Utils::ModuleSettingsPtr("menu", QByteArray(), this); @@ -180,7 +179,7 @@ void MenuWorker::showDockSettingsMenu() // 菜单将要被打开 setAutoHide(false); - QMenu *menu = createMenu(); + menu = createMenu(menu); menu->exec(QCursor::pos()); // 菜单已经关闭 diff --git a/frame/util/menuworker.h b/frame/util/menuworker.h index a240b23c9..c7501586e 100644 --- a/frame/util/menuworker.h +++ b/frame/util/menuworker.h @@ -38,7 +38,7 @@ class MenuWorker : public QObject public: explicit MenuWorker(DBusDock *dockInter,QWidget *parent = nullptr); - void showDockSettingsMenu(); + void showDockSettingsMenu(QMenu *menu); signals: void autoHideChanged(const bool autoHide) const; @@ -47,7 +47,7 @@ public slots: void setAutoHide(const bool autoHide); private: - QMenu *createMenu(); + QMenu *createMenu(QMenu *settingsMenu); private slots: void onDockSettingsTriggered(); diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index b4cc3b88b..d6830d36d 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -203,7 +203,8 @@ void MainWindow::mousePressEvent(QMouseEvent *e) e->ignore(); if (e->button() == Qt::RightButton) { QTimer::singleShot(10, this, [this]{ - m_menuWorker->showDockSettingsMenu(); + QMenu *menu = new QMenu(this); + m_menuWorker->showDockSettingsMenu(menu); }); return; } diff --git a/tests/util/ut_menuworker.cpp b/tests/util/ut_menuworker.cpp index 4303fe7a3..5b9099975 100644 --- a/tests/util/ut_menuworker.cpp +++ b/tests/util/ut_menuworker.cpp @@ -36,7 +36,8 @@ TEST_F(Test_MenuWorker, coverage_test) { MenuWorker *worker = new MenuWorker(new DBusDock("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus())); DockItemManager::instance()->m_pluginsInter->m_pluginsMap.clear(); - QMenu *menu = worker->createMenu(); + QMenu *menu = new QMenu(); + menu = worker->createMenu(menu); ASSERT_FALSE(menu->isEmpty()); // worker->showDockSettingsMenu();