From a940089a8f2af58b14b4bfa76db23a199b65a04e Mon Sep 17 00:00:00 2001 From: David Faure Date: Fri, 26 Aug 2016 09:01:21 +0200 Subject: [PATCH] Fix crash when no QApplication is available. This happens when QtCreator launches qmlplugindump. Testcase: qmlplugindump -nonrelocatable org.kde.analitza 1.1 or qmlplugindump -nonrelocatable org.kde.okular 2.0 REVIEW: 128767 --- .../plasmacomponents/qmenu.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/declarativeimports/plasmacomponents/qmenu.cpp b/src/declarativeimports/plasmacomponents/qmenu.cpp index c6b59a87e..fc07a09c9 100644 --- a/src/declarativeimports/plasmacomponents/qmenu.cpp +++ b/src/declarativeimports/plasmacomponents/qmenu.cpp @@ -19,6 +19,7 @@ #include "qmenu.h" +#include #include #include #include @@ -27,15 +28,18 @@ #include "plasmacomponentsplugin.h" QMenuProxy::QMenuProxy(QObject *parent) : QObject(parent), + m_menu(Q_NULLPTR), m_status(DialogStatus::Closed), m_placement(Plasma::Types::LeftPosedTopAlignedPopup) { - m_menu = new QMenu(0); - connect(m_menu, &QMenu::triggered, this, &QMenuProxy::itemTriggered); - connect(m_menu, &QMenu::aboutToHide, [ = ]() { - m_status = DialogStatus::Closed; - emit statusChanged(); - }); + if (qobject_cast(QCoreApplication::instance())) { + m_menu = new QMenu(0); + connect(m_menu, &QMenu::triggered, this, &QMenuProxy::itemTriggered); + connect(m_menu, &QMenu::aboutToHide, [ = ]() { + m_status = DialogStatus::Closed; + emit statusChanged(); + }); + } } QMenuProxy::~QMenuProxy() @@ -105,6 +109,9 @@ void QMenuProxy::setVisualParent(QObject *parent) QWindow *QMenuProxy::transientParent() { + if (!m_menu) { + return Q_NULLPTR; + } return m_menu->windowHandle()->transientParent(); }