From a7f14d6f39671839329cad4b123705bd02085127 Mon Sep 17 00:00:00 2001 From: Gong Heng Date: Mon, 1 Jul 2024 09:54:44 +0800 Subject: [PATCH] fix: [select-dialog] Double-click to unable to open the file When there are two choice boxes, double-click the file cannot be opened. Log: fix issue Bug: https://pms.uniontech.com/bug-view-261287.html --- .../dbus/filedialogmanagerdbus.cpp | 38 +++++++++++++++++++ .../dbus/filedialogmanagerdbus.h | 1 + .../views/filedialog.cpp | 27 ------------- .../filedialogplugin-core/views/filedialog.h | 3 +- 4 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/plugins/filedialog/filedialogplugin-core/dbus/filedialogmanagerdbus.cpp b/src/plugins/filedialog/filedialogplugin-core/dbus/filedialogmanagerdbus.cpp index bb9b895a98..8ab99803ff 100644 --- a/src/plugins/filedialog/filedialogplugin-core/dbus/filedialogmanagerdbus.cpp +++ b/src/plugins/filedialog/filedialogplugin-core/dbus/filedialogmanagerdbus.cpp @@ -7,9 +7,11 @@ #include "dbus/filedialog_adaptor.h" #include "utils/appexitcontroller.h" +#include #include #include #include +#include #include @@ -53,6 +55,7 @@ QDBusObjectPath FileDialogManagerDBus::createDialog(QString key) curDialogObjectMap[path] = handle; connect(handle, &FileDialogHandleDBus::destroyed, this, &FileDialogManagerDBus::onDialogDestroy); DIALOGCORE_NAMESPACE::AppExitController::instance().dismiss(); + initEventsFilter(); return path; } @@ -139,3 +142,38 @@ void FileDialogManagerDBus::onAppExit() }); } } + +void FileDialogManagerDBus::initEventsFilter() +{ + dpfSignalDispatcher->installGlobalEventFilter(this, [this](DPF_NAMESPACE::EventType type, const QVariantList ¶ms) -> bool { + if (type == GlobalEventType::kOpenFiles) { + quint64 eventWinId { params.at(0).toULongLong() }; + QMap::iterator it = curDialogObjectMap.begin(); + for (; it != curDialogObjectMap.end(); ++it) { + FileDialogHandleDBus *handle = qobject_cast(it.value()); + if (!handle) + continue; + if (handle->winId() == eventWinId) { + FileDialog *dialog = qobject_cast(handle->widget()); + if (!dialog) + continue; + dialog->onAcceptButtonClicked(); + break; + } + } + return true; + } + + static QList filterTypeGroup { GlobalEventType::kOpenNewTab, + GlobalEventType::kOpenNewWindow, + GlobalEventType::kOpenAsAdmin, + GlobalEventType::kOpenFilesByApp, + GlobalEventType::kCreateSymlink, + GlobalEventType::kOpenInTerminal, + GlobalEventType::kHideFiles }; + if (filterTypeGroup.contains(type)) + return true; + + return false; + }); +} diff --git a/src/plugins/filedialog/filedialogplugin-core/dbus/filedialogmanagerdbus.h b/src/plugins/filedialog/filedialogplugin-core/dbus/filedialogmanagerdbus.h index 716ec88601..6d2c3e72e2 100644 --- a/src/plugins/filedialog/filedialogplugin-core/dbus/filedialogmanagerdbus.h +++ b/src/plugins/filedialog/filedialogplugin-core/dbus/filedialogmanagerdbus.h @@ -36,6 +36,7 @@ public slots: private: void onDialogDestroy(); void onAppExit(); + void initEventsFilter(); QMap curDialogObjectMap; bool lastWindowClosed { false }; diff --git a/src/plugins/filedialog/filedialogplugin-core/views/filedialog.cpp b/src/plugins/filedialog/filedialogplugin-core/views/filedialog.cpp index cadca51184..e47f630986 100644 --- a/src/plugins/filedialog/filedialogplugin-core/views/filedialog.cpp +++ b/src/plugins/filedialog/filedialogplugin-core/views/filedialog.cpp @@ -218,7 +218,6 @@ FileDialog::FileDialog(const QUrl &url, QWidget *parent) initializeUi(); initConnect(); initEventsConnect(); - initEventsFilter(); } FileDialog::~FileDialog() @@ -1083,32 +1082,6 @@ void FileDialog::initEventsConnect() dpfSignalDispatcher->subscribe("dfmplugin_workspace", "signal_View_RenameEndEdit", this, &FileDialog::handleRenameEndAcceptBtn); } -void FileDialog::initEventsFilter() -{ - dpfSignalDispatcher->installGlobalEventFilter(this, [this](DPF_NAMESPACE::EventType type, const QVariantList ¶ms) -> bool { - if (type == GlobalEventType::kOpenFiles) { - onAcceptButtonClicked(); - return true; - } - - if (type == GlobalEventType::kOpenNewWindow && params.size() > 0) { - d->handleOpenNewWindow(params.at(0).toUrl()); - return true; - } - - static QList filterTypeGroup { GlobalEventType::kOpenNewTab, - GlobalEventType::kOpenAsAdmin, - GlobalEventType::kOpenFilesByApp, - GlobalEventType::kCreateSymlink, - GlobalEventType::kOpenInTerminal, - GlobalEventType::kHideFiles }; - if (filterTypeGroup.contains(type)) - return true; - - return false; - }); -} - /*! * \brief compiter -> fileview, fileview -> computerview * \param scheme diff --git a/src/plugins/filedialog/filedialogplugin-core/views/filedialog.h b/src/plugins/filedialog/filedialogplugin-core/views/filedialog.h index 1db8297008..8e6c5ff613 100644 --- a/src/plugins/filedialog/filedialogplugin-core/views/filedialog.h +++ b/src/plugins/filedialog/filedialogplugin-core/views/filedialog.h @@ -105,9 +105,9 @@ public Q_SLOTS: int exec(); void open(); void reject(); + void onAcceptButtonClicked(); private Q_SLOTS: - void onAcceptButtonClicked(); void onRejectButtonClicked(); void onCurrentInputNameChanged(); void updateAcceptButtonState(); @@ -127,7 +127,6 @@ private Q_SLOTS: void initializeUi(); void initConnect(); void initEventsConnect(); - void initEventsFilter(); void updateViewState(); void adjustPosition(QWidget *w); QString modelCurrentNameFilter() const;