fix: 处理任务栏右键菜单没有指定父对象,造成无法关闭wayland任务栏菜单

创建QMenu时,指定父对象

Bug: https://pms.uniontech.com/zentao/bug-view-109963.html
Log: 任务栏右键菜单后移动到任一子菜单,然后点击桌面空白处,不能隐藏右键菜单
Influence: 任务栏-wayland右键菜单
Change-Id: I4300755bf73f5fc235d047539881f58f84ef0edf
This commit is contained in:
duanhongyu 2022-01-06 10:53:18 +08:00
parent 9b140528be
commit d755c0352a
4 changed files with 9 additions and 8 deletions

View File

@ -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->setAccessibleName("settingsmenu");
settingsMenu->setTitle("Settings Menu"); settingsMenu->setTitle("Settings Menu");
@ -169,7 +168,7 @@ void MenuWorker::onDockSettingsTriggered()
.call(); .call();
} }
void MenuWorker::showDockSettingsMenu() void MenuWorker::showDockSettingsMenu(QMenu *menu)
{ {
// 菜单功能被禁用 // 菜单功能被禁用
static const QGSettings *setting = Utils::ModuleSettingsPtr("menu", QByteArray(), this); static const QGSettings *setting = Utils::ModuleSettingsPtr("menu", QByteArray(), this);
@ -180,7 +179,7 @@ void MenuWorker::showDockSettingsMenu()
// 菜单将要被打开 // 菜单将要被打开
setAutoHide(false); setAutoHide(false);
QMenu *menu = createMenu(); menu = createMenu(menu);
menu->exec(QCursor::pos()); menu->exec(QCursor::pos());
// 菜单已经关闭 // 菜单已经关闭

View File

@ -38,7 +38,7 @@ class MenuWorker : public QObject
public: public:
explicit MenuWorker(DBusDock *dockInter,QWidget *parent = nullptr); explicit MenuWorker(DBusDock *dockInter,QWidget *parent = nullptr);
void showDockSettingsMenu(); void showDockSettingsMenu(QMenu *menu);
signals: signals:
void autoHideChanged(const bool autoHide) const; void autoHideChanged(const bool autoHide) const;
@ -47,7 +47,7 @@ public slots:
void setAutoHide(const bool autoHide); void setAutoHide(const bool autoHide);
private: private:
QMenu *createMenu(); QMenu *createMenu(QMenu *settingsMenu);
private slots: private slots:
void onDockSettingsTriggered(); void onDockSettingsTriggered();

View File

@ -203,7 +203,8 @@ void MainWindow::mousePressEvent(QMouseEvent *e)
e->ignore(); e->ignore();
if (e->button() == Qt::RightButton) { if (e->button() == Qt::RightButton) {
QTimer::singleShot(10, this, [this]{ QTimer::singleShot(10, this, [this]{
m_menuWorker->showDockSettingsMenu(); QMenu *menu = new QMenu(this);
m_menuWorker->showDockSettingsMenu(menu);
}); });
return; return;
} }

View File

@ -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())); 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(); DockItemManager::instance()->m_pluginsInter->m_pluginsMap.clear();
QMenu *menu = worker->createMenu(); QMenu *menu = new QMenu();
menu = worker->createMenu(menu);
ASSERT_FALSE(menu->isEmpty()); ASSERT_FALSE(menu->isEmpty());
// worker->showDockSettingsMenu(); // worker->showDockSettingsMenu();