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->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());
// 菜单已经关闭

View File

@ -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();

View File

@ -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;
}

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()));
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();