From 86ee13f5839e24adf3fa1d11320f2ac93d8a3651 Mon Sep 17 00:00:00 2001 From: Kurt Hindenburg Date: Wed, 2 Jul 2014 10:26:05 -0400 Subject: [PATCH] Fix crash in Manage Profile Dialog In KDE5, KMenu* KActionMenu::menu() no longer creates a KMenu if it doesn't exist. Thanks to Arjun Ak arjunak234 gmail com REVIEW: 119004 --- src/MainWindow.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 86d04de1..41074847 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -394,32 +394,37 @@ void MainWindow::profileListChanged(const QList& sessionActions) // it if it is the non-default profile. if (sessionActions.size() > 2) { // Update the 'New Tab' KActionMenu - QMenu* newTabMenu = _newTabMenuAction->menu(); - - newTabMenu->clear(); + if (_newTabMenuAction->menu()) { + _newTabMenuAction->menu()->clear(); + } else { + _newTabMenuAction->setMenu(new QMenu()); + } foreach(QAction* sessionAction, sessionActions) { - newTabMenu->addAction(sessionAction); + _newTabMenuAction->menu()->addAction(sessionAction); // NOTE: defaultProfile seems to not work here, sigh. Profile::Ptr profile = ProfileManager::instance()->defaultProfile(); if (profile && profile->name() == sessionAction->text().remove('&')) { sessionAction->setIcon(KIcon(profile->icon(), 0, QStringList("emblem-favorite"))); - newTabMenu->setDefaultAction(sessionAction); + _newTabMenuAction->menu()->setDefaultAction(sessionAction); QFont actionFont = sessionAction->font(); actionFont.setBold(true); sessionAction->setFont(actionFont); } } } else { - QMenu* newTabMenu = _newTabMenuAction->menu(); - newTabMenu->clear(); + if (_newTabMenuAction->menu()) { + _newTabMenuAction->menu()->clear(); + } else { + _newTabMenuAction->setMenu(new QMenu()); + } Profile::Ptr profile = ProfileManager::instance()->defaultProfile(); // NOTE: Compare names w/o any '&' if (sessionActions.size() == 2 && sessionActions[1]->text().remove('&') != profile->name()) { - newTabMenu->addAction(sessionActions[1]); + _newTabMenuAction->menu()->addAction(sessionActions[1]); } else { - delete newTabMenu; + _newTabMenuAction->menu()->deleteLater(); } } }