From 1ea62b68f9de0f3c197a00a9136449b576b7f388 Mon Sep 17 00:00:00 2001 From: Michael Haeckel Date: Sat, 2 Dec 2000 15:26:49 +0000 Subject: [PATCH] Fix crash when closing the search dialog or KMail while search is in progress. svn path=/trunk/kdenetwork/kmail/; revision=73081 --- kmfldsearch.cpp | 15 +++++++++++++++ kmfldsearch.h | 5 ++++- kmmainwin.cpp | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/kmfldsearch.cpp b/kmfldsearch.cpp index a13762914..b686c368c 100644 --- a/kmfldsearch.cpp +++ b/kmfldsearch.cpp @@ -41,6 +41,7 @@ KMFldSearch::KMFldSearch(KMMainWin* w, const char* name, mNumRules = 2; mSearching = false; + mCloseRequested = false; setCaption(i18n("Search in Folders")); mGrid = new QGridLayout(this, mNumRules+4, 5, 4, 4); @@ -338,6 +339,7 @@ void KMFldSearch::slotSearch() enableGUI(); if( mLastFocus ) mLastFocus->setFocus(); + if (mCloseRequested) close(); } @@ -354,6 +356,19 @@ void KMFldSearch::slotClose() } +//----------------------------------------------------------------------------- +void KMFldSearch::closeEvent(QCloseEvent *e) +{ + if (mSearching) + { + mSearching = false; + mCloseRequested = true; + e->ignore(); + } + else e->accept(); +} + + //----------------------------------------------------------------------------- void KMFldSearch::slotShowMsg(QListViewItem *item) { diff --git a/kmfldsearch.h b/kmfldsearch.h index 7584ec32c..930ad03f5 100644 --- a/kmfldsearch.h +++ b/kmfldsearch.h @@ -58,6 +58,9 @@ protected: /** Reimplemented to react to Escape. */ virtual void keyPressEvent(QKeyEvent*); + /** Reimplemented to stop searching when the window is closed */ + virtual void closeEvent(QCloseEvent*); + protected: QGridLayout* mGrid; QComboBox *mCbxFolders; @@ -68,7 +71,7 @@ protected: int mNumRules, mNumMatches; int mCount; QString mSearchFolder; - bool mSearching, mStopped; + bool mSearching, mStopped, mCloseRequested; KMMainWin* mMainWin; QWidget* mLastFocus; }; diff --git a/kmmainwin.cpp b/kmmainwin.cpp index 517079c02..2820d35a2 100644 --- a/kmmainwin.cpp +++ b/kmmainwin.cpp @@ -125,7 +125,7 @@ KMMainWin::KMMainWin(QWidget *, char *name) : KMMainWin::~KMMainWin() { if (searchWin) - delete searchWin; + searchWin->close(); writeConfig(); writeFolderConfig();