From e2f316578909e4c886430110808d4681997b3cb7 Mon Sep 17 00:00:00 2001 From: Felix Ernst Date: Wed, 26 Jun 2024 12:45:48 +0200 Subject: Revert "DragAndDropHelper::updateDropAction: use StatJob for remote URLs" This reverts commit dc149ec5e52f52c514cf362603d05ba8eea506b8. This prevents a crash. One issue identified is that the commit that I am reverting here accesses a QDropEvent at a moment in time in which it might have already been deleted. We cannot check if it exists by that time because we do not control its lifetime and it is not a QObject. --- src/views/draganddrophelper.h | 58 ++++++++----------------------------------- 1 file changed, 11 insertions(+), 47 deletions(-) (limited to 'src/views/draganddrophelper.h') diff --git a/src/views/draganddrophelper.h b/src/views/draganddrophelper.h index df3b49966..73043febc 100644 --- a/src/views/draganddrophelper.h +++ b/src/views/draganddrophelper.h @@ -11,11 +11,9 @@ #include "dolphin_export.h" #include -#include #include #include -#include #include class QDropEvent; @@ -26,7 +24,7 @@ namespace KIO class DropJob; } -class DOLPHIN_EXPORT DragAndDropHelper : public QObject +class DOLPHIN_EXPORT DragAndDropHelper { public: /** @@ -53,6 +51,16 @@ public: */ static bool supportsDropping(const KFileItem &destItem); + /** + * Updates the drop action according to whether the destination supports dropping. + * If supportsDropping(destUrl), set dropAction = proposedAction. Otherwise, set + * dropAction = Qt::IgnoreAction. + * + * @param event Drop event. + * @param destUrl Destination URL. + */ + static void updateDropAction(QDropEvent *event, const QUrl &destUrl); + /** * @return True if destUrl is contained in the urls parameter. */ @@ -76,55 +84,11 @@ public: */ static void clearUrlListMatchesUrlCache(); - DragAndDropHelper(QObject *parent); - - /** - * Updates the drop action according to whether the destination supports dropping. - * If supportsDropping(destUrl), set dropAction = proposedAction. Otherwise, set - * dropAction = Qt::IgnoreAction. - * - * @param event Drop event. - * @param destUrl Destination URL. - */ - void updateDropAction(QDropEvent *event, const QUrl &destUrl); - private: /** * Stores the results of the expensive checks made in urlListMatchesUrl. */ static QHash m_urlListMatchesUrlCache; - - /** - * When updateDropAction() is called with a remote URL, we create a StatJob to - * check if the destination is a directory or a desktop file. We cache the result - * here to avoid doing the stat again on subsequent calls to updateDropAction(). - */ - KFileItem m_destItemCache; - - /** - * Only keep the cache for 30 seconds, because the stat of the destUrl might change. - */ - QTimer m_destItemCacheInvalidationTimer; - - /** - * A StatJob on-fly to fill the cache for a remote URL. We shouldn't create more - * than one StatJob at a time, so we keep a pointer to the current one. - */ - KIO::StatJob *m_statJob = nullptr; - - /** - * The URL for which the StatJob is running. - * Note: We can't use m_statJob->url() because StatJob might resolve the URL to be - * different from what we passed into stat(). E.g. "mtp:" is resolved - * to "mtp:" - */ - QUrl m_statJobUrl; - - /** - * The last event we received in updateDropAction(), but can't react to yet, - * because a StatJob is on-fly. - */ - QDropEvent *m_lastUndecidedEvent = nullptr; }; #endif -- cgit v1.3.1