From 86bb62f2e7a0a0d1f4a3824f75826c0114526bf6 Mon Sep 17 00:00:00 2001 From: Mikolaj Boc Date: Mon, 1 Aug 2022 14:35:43 +0200 Subject: [PATCH] Use popup() instead of exec() for file dialog's context menu There are seemingly no differences in how the menu operates and this fixes WASM without asyncify hanging on menu open attempts. Fixes: QTBUG-104963 Change-Id: If4364f08acb75947e03ecced85d77af9af0498ba Pick-to: 6.4 Reviewed-by: Volker Hilsheimer --- src/widgets/dialogs/qfiledialog.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 58e01c0baff..be08271f9ac 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -3486,23 +3486,26 @@ void QFileDialogPrivate::_q_showContextMenu(const QPoint &position) QModelIndex index = view->indexAt(position); index = mapToSource(index.sibling(index.row(), 0)); - QMenu menu(view); + QMenu *menu = new QMenu(view); + menu->setAttribute(Qt::WA_DeleteOnClose); + if (index.isValid()) { // file context menu const bool ro = model && model->isReadOnly(); QFile::Permissions p(index.parent().data(QFileSystemModel::FilePermissions).toInt()); renameAction->setEnabled(!ro && p & QFile::WriteUser); - menu.addAction(renameAction); + menu->addAction(renameAction); deleteAction->setEnabled(!ro && p & QFile::WriteUser); - menu.addAction(deleteAction); - menu.addSeparator(); + menu->addAction(deleteAction); + menu->addSeparator(); } - menu.addAction(showHiddenAction); + menu->addAction(showHiddenAction); if (qFileDialogUi->newFolderButton->isVisible()) { newFolderAction->setEnabled(qFileDialogUi->newFolderButton->isEnabled()); - menu.addAction(newFolderAction); + menu->addAction(newFolderAction); } - menu.exec(view->viewport()->mapToGlobal(position)); + menu->popup(view->viewport()->mapToGlobal(position)); + #endif // QT_CONFIG(menu) }