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
wilder-portage
Maximilian Schiller 6 years ago committed by Kurt Hindenburg
parent fdfae25665
commit 1d7142ed24
  1. 6
      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));

Loading…
Cancel
Save