aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Fabio Bas2008-11-19 11:10:10 +0000
committerGravatar Fabio Bas2008-11-19 11:10:10 +0000
commite5ce1b096f2d126035090996bdf114e438da9130 (patch)
tree1901ce3dc75033ab2e72aaff75574265ad470d3d /src
parentfixed #292 (diff)
downloadKVIrc-e5ce1b096f2d126035090996bdf114e438da9130.tar.gz
KVIrc-e5ce1b096f2d126035090996bdf114e438da9130.tar.bz2
KVIrc-e5ce1b096f2d126035090996bdf114e438da9130.zip
fix for #294
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@2897 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
-rw-r--r--src/kvirc/ui/kvi_window.cpp15
-rw-r--r--src/modules/editor/libkvieditor.cpp8
2 files changed, 22 insertions, 1 deletions
diff --git a/src/kvirc/ui/kvi_window.cpp b/src/kvirc/ui/kvi_window.cpp
index 9fd8899d2..70205236b 100644
--- a/src/kvirc/ui/kvi_window.cpp
+++ b/src/kvirc/ui/kvi_window.cpp
@@ -892,7 +892,20 @@ void KviWindow::delayedClose()
void KviWindow::closeEvent(QCloseEvent *e)
{
e->ignore();
- g_pFrame->childWindowCloseRequest(this);
+ if(g_pFrame)
+ {
+ g_pFrame->childWindowCloseRequest(this);
+ } else {
+ /* In kvi_app destructor, g_pFrame gets deleted before modules gets unloaded.
+ * So if a module tries to destroy a kviwindow while it gets unloaded, we end up here,
+ * having to delete this window without the help of g_pFrame.
+ * So we have 3 choices:
+ * 1) delete this => will just print a qt warning "don't delete things on their event handler"
+ * 2) deleteLater() => will tipically create an infinite recursion in the module unload routine
+ * 3) do nothing => same as #2
+ */
+ delete this;
+ }
}
void KviWindow::updateIcon()
diff --git a/src/modules/editor/libkvieditor.cpp b/src/modules/editor/libkvieditor.cpp
index b9290840f..6f36648e8 100644
--- a/src/modules/editor/libkvieditor.cpp
+++ b/src/modules/editor/libkvieditor.cpp
@@ -44,6 +44,13 @@ static bool editor_module_init(KviModule * m)
static bool editor_module_cleanup(KviModule *)
{
+ /*
+ * This causes 2 crashes: one in KviApp destructor (closing windows needs
+ * g_pFrame, that is deleted before this unloading routine) and the second in
+ * the codetester window (it deletes us in its denstructor, and we tries to back-delete it)
+ * So it's commented out by now..
+ */
+/*
while(g_pScriptEditorWindowList->first())
{
QObject * w = g_pScriptEditorWindowList->first()->parent();;
@@ -61,6 +68,7 @@ static bool editor_module_cleanup(KviModule *)
}
delete g_pScriptEditorWindowList->first();
}
+*/
delete g_pScriptEditorWindowList;
g_pScriptEditorWindowList = 0;