forked from pool/kactivities5
83 lines
2.5 KiB
Diff
83 lines
2.5 KiB
Diff
|
From: David Edmundson <david@davidedmundson.co.uk>
|
||
|
Date: Sat, 06 Feb 2016 18:02:53 +0000
|
||
|
Subject: Fix crash in activities context menu
|
||
|
X-Git-Url: http://quickgit.kde.org/?p=kactivities.git&a=commitdiff&h=b3c8ad1ad48d65ea77724f94073909dc8ab97596
|
||
|
---
|
||
|
Fix crash in activities context menu
|
||
|
|
||
|
Currently we call deleteLater() from inside ::run which is running in a
|
||
|
different thread than the receiving object.
|
||
|
(QThread objects live in the thread that created them, not in the thread
|
||
|
they create)
|
||
|
|
||
|
This patch causes deleteLater to be run in the right thread.
|
||
|
|
||
|
QCoreApplication::postEvent is thread safe but it needs to be in the
|
||
|
right thread to work out the correct event loop level for deferred
|
||
|
delete events.
|
||
|
|
||
|
BUG: 351485
|
||
|
REVIEW: 126955
|
||
|
---
|
||
|
|
||
|
|
||
|
--- a/src/workspace/fileitemplugin/FileItemLinkingPlugin.cpp
|
||
|
+++ b/src/workspace/fileitemplugin/FileItemLinkingPlugin.cpp
|
||
|
@@ -124,7 +124,7 @@
|
||
|
setActions({ action });
|
||
|
|
||
|
} else if (!loaded) {
|
||
|
- auto loader = new FileItemLinkingPluginActionLoader(items);
|
||
|
+ auto loader = FileItemLinkingPluginActionLoader::create(items);
|
||
|
|
||
|
static FileItemLinkingPluginActionStaticInit init;
|
||
|
|
||
|
|
||
|
--- a/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.cpp
|
||
|
+++ b/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.cpp
|
||
|
@@ -39,6 +39,13 @@
|
||
|
#include <KLocalizedString>
|
||
|
|
||
|
#include "common/dbus/common.h"
|
||
|
+
|
||
|
+FileItemLinkingPluginActionLoader* FileItemLinkingPluginActionLoader::create(const KFileItemListProperties &items)
|
||
|
+{
|
||
|
+ auto l = new FileItemLinkingPluginActionLoader(items);
|
||
|
+ connect(l, &QThread::finished, l, &QObject::deleteLater);
|
||
|
+ return l;
|
||
|
+}
|
||
|
|
||
|
FileItemLinkingPluginActionLoader::FileItemLinkingPluginActionLoader(
|
||
|
const KFileItemListProperties &items)
|
||
|
@@ -150,8 +157,6 @@
|
||
|
}
|
||
|
|
||
|
emit result(actions);
|
||
|
-
|
||
|
- deleteLater();
|
||
|
}
|
||
|
|
||
|
Action
|
||
|
|
||
|
--- a/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.h
|
||
|
+++ b/src/workspace/fileitemplugin/FileItemLinkingPluginActionLoader.h
|
||
|
@@ -33,8 +33,7 @@
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
- FileItemLinkingPluginActionLoader(const KFileItemListProperties &items);
|
||
|
-
|
||
|
+ static FileItemLinkingPluginActionLoader* create(const KFileItemListProperties &items);
|
||
|
void run() Q_DECL_OVERRIDE;
|
||
|
|
||
|
Action createAction(const QString &activity, bool link,
|
||
|
@@ -46,6 +45,7 @@
|
||
|
void result(const ActionList &actions);
|
||
|
|
||
|
private:
|
||
|
+ FileItemLinkingPluginActionLoader(const KFileItemListProperties &items);
|
||
|
KFileItemListProperties items;
|
||
|
KActivities::Consumer activities;
|
||
|
};
|
||
|
|