From 04a2943128161a3fe411ee2ad873cfd6857c32db Mon Sep 17 00:00:00 2001 From: Robert Knight Date: Tue, 15 Jan 2008 17:37:44 +0000 Subject: [PATCH] Potential fix for sporadic crash when selecting 'Close current tab' option when closing a window. Extract method for disconnecting a controller in the main window and call it in queryClose() before closing the plugged controller's session. svn path=/trunk/KDE/kdebase/apps/konsole/; revision=761925 --- src/MainWindow.cpp | 24 ++++++++++++++---------- src/MainWindow.h | 3 ++- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 7ef62145d..483db2098 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -129,6 +129,14 @@ ViewManager* MainWindow::viewManager() const return _viewManager; } +void MainWindow::disconnectController(SessionController* controller) +{ + disconnect( controller , SIGNAL(titleChanged(ViewProperties*)) + , this , SLOT(activeViewTitleChanged(ViewProperties*)) ); + guiFactory()->removeClient(controller); + controller->setSearchBar(0); +} + void MainWindow::activeViewChanged(SessionController* controller) { // associate bookmark menu with current session @@ -137,15 +145,8 @@ void MainWindow::activeViewChanged(SessionController* controller) connect( bookmarkHandler() , SIGNAL(openUrl(const KUrl&)) , controller , SLOT(openUrl(const KUrl&)) ); - // disconnect existing controller's UI if ( _pluggedController ) - { - disconnect( _pluggedController , SIGNAL(titleChanged(ViewProperties*)) - , this , SLOT(activeViewTitleChanged(ViewProperties*)) ); - guiFactory()->removeClient(_pluggedController); - - _pluggedController->setSearchBar(0); - } + disconnectController(_pluggedController); // listen for title changes from the current session Q_ASSERT( controller ); @@ -320,8 +321,11 @@ bool MainWindow::queryClose() case KMessageBox::Yes: return true; case KMessageBox::No: - if (_pluggedController && _pluggedController->session()) - _pluggedController->session()->close(); + if (_pluggedController && _pluggedController->session()) + { + disconnectController(_pluggedController); + _pluggedController->session()->close(); + } return false; case KMessageBox::Cancel: return false; diff --git a/src/MainWindow.h b/src/MainWindow.h index 07122e23e..94dd2f2f4 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -156,7 +156,8 @@ class MainWindow : public KXmlGuiWindow void setupActions(); void setupWidgets(); QString activeSessionDir() const; - + void disconnectController(SessionController* controller); + private: ViewManager* _viewManager; BookmarkHandler* _bookmarkHandler;