blob: fcdbb84729a843b6e59621d3fb0c0fe97ef3d619 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
From 1d7142ed24ef370ae984c0441d5b325b42656bd7 Mon Sep 17 00:00:00 2001
From: Maximilian Schiller <manimax3@outlook.de>
Date: Fri, 29 May 2020 07:36:02 -0400
Subject: Fix konsolepart segfault when closing after showing context menu
Assign the _view as the parent to the KXMLGuiFactory because the
factory is referencing the view widget as its associated widget. Since
the TerminalDisplay gets destructed first this is now a dangling
pointer. If the view is set as the parent the factory gets cleaned up
correctly. Also cleanup the created clientBuilder after destruction
because it can't have a parent and would probably leak memory.
BUG: 415762
FIXED-IN: 20.08.0
See also !87
---
src/SessionController.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/SessionController.cpp b/src/SessionController.cpp
index e72f342..542955d 100644
--- a/src/SessionController.cpp
+++ b/src/SessionController.cpp
@@ -1732,11 +1732,13 @@ void SessionController::showDisplayContextMenu(const QPoint& position)
if (factory() == nullptr) {
if (clientBuilder() == nullptr) {
setClientBuilder(new KXMLGUIBuilder(_view));
+
+ // Client builder does not get deleted automatically
+ connect(this, &QObject::destroyed, this, [this]{ delete clientBuilder(); });
}
- auto factory = new KXMLGUIFactory(clientBuilder(), this);
+ auto factory = new KXMLGUIFactory(clientBuilder(), _view);
factory->addClient(this);
- ////qDebug() << "Created xmlgui factory" << factory;
}
QPointer<QMenu> popup = qobject_cast<QMenu*>(factory()->container(QStringLiteral("session-popup-menu"), this));
--
cgit v1.1
|