From d755c0352a1f2311446c070fb9611b13042ccc26 Mon Sep 17 00:00:00 2001 From: duanhongyu Date: Thu, 6 Jan 2022 10:53:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=A0=8F=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E7=88=B6=E5=AF=B9=E8=B1=A1=EF=BC=8C=E9=80=A0?= =?UTF-8?q?=E6=88=90=E6=97=A0=E6=B3=95=E5=85=B3=E9=97=ADwayland=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=A0=8F=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 创建QMenu时,指定父对象 Bug: https://pms.uniontech.com/zentao/bug-view-109963.html Log: 任务栏右键菜单后移动到任一子菜单,然后点击桌面空白处,不能隐藏右键菜单 Influence: 任务栏-wayland右键菜单 Change-Id: I4300755bf73f5fc235d047539881f58f84ef0edf --- frame/util/menuworker.cpp | 7 +++---- frame/util/menuworker.h | 4 ++-- frame/window/mainwindow.cpp | 3 ++- tests/util/ut_menuworker.cpp | 3 ++- 4 files changed, 9 insertions(+), 8 deletions(-) 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();