aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/options/container.cpp
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2010-11-17 00:58:53 +0000
committerGravatar Szymon Tomasz Stefanek2010-11-17 00:58:53 +0000
commit0d2a7c454e485af6dbc4082b122454141767133a (patch)
tree216697b5b5c578454552a9c751b2c2c2779ada40 /src/modules/options/container.cpp
parentdon't try to reuse already opened option widgets (fixes #1018) (diff)
downloadKVIrc-0d2a7c454e485af6dbc4082b122454141767133a.tar.gz
KVIrc-0d2a7c454e485af6dbc4082b122454141767133a.tar.bz2
KVIrc-0d2a7c454e485af6dbc4082b122454141767133a.zip
Complete the fix for #1018
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5144 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/options/container.cpp')
-rw-r--r--src/modules/options/container.cpp37
1 files changed, 34 insertions, 3 deletions
diff --git a/src/modules/options/container.cpp b/src/modules/options/container.cpp
index 1e9878738..953bb8c78 100644
--- a/src/modules/options/container.cpp
+++ b/src/modules/options/container.cpp
@@ -47,14 +47,17 @@ KviOptionsWidgetContainer::KviOptionsWidgetContainer(QWidget * par,bool bModal)
m_pLayout = new QGridLayout(this);
setObjectName("container");
- m_pOptionsWidget = 0;
+
+ m_pOptionsWidget = NULL;
+
if(bModal)
setWindowModality(Qt::ApplicationModal);
}
KviOptionsWidgetContainer::~KviOptionsWidgetContainer()
{
- if(m_pOptionsWidget)delete m_pOptionsWidget;
+ if(m_pOptionsWidget)
+ delete m_pOptionsWidget;
}
void KviOptionsWidgetContainer::setLeftCornerWidget(QWidget * pWidget)
@@ -64,9 +67,33 @@ void KviOptionsWidgetContainer::setLeftCornerWidget(QWidget * pWidget)
m_pLayout->addWidget(pWidget,1,0);
}
+void KviOptionsWidgetContainer::optionsWidgetDestroyed()
+{
+ m_pOptionsWidget = NULL;
+}
+
+void KviOptionsWidgetContainer::childEvent(QChildEvent * e)
+{
+ // This handles reparents which may happen when
+ // options.edit and options.dialog are used without closing
+ // the corresponding widgets.
+ if(m_pOptionsWidget && (e->type() == QEvent::ChildRemoved))
+ {
+ if(e->child() == static_cast<QObject *>(m_pOptionsWidget))
+ {
+ QObject::disconnect(m_pOptionsWidget,SIGNAL(destroyed()),this,SLOT(optionsWidgetDestroyed()));
+ m_pOptionsWidget = NULL;
+ }
+ }
+
+ QWidget::childEvent(e);
+}
void KviOptionsWidgetContainer::setup(KviOptionsWidget * w)
{
+ if(m_pOptionsWidget)
+ QObject::disconnect(m_pOptionsWidget,SIGNAL(destroyed()),this,SLOT(optionsWidgetDestroyed()));
+
m_pLayout->addWidget(w,0,0,1,3);
//g->addMultiCellWidget(w,0,0,0,2);
@@ -96,6 +123,9 @@ void KviOptionsWidgetContainer::setup(KviOptionsWidget * w)
}
m_pOptionsWidget = w;
+
+ if(m_pOptionsWidget)
+ QObject::connect(m_pOptionsWidget,SIGNAL(destroyed()),this,SLOT(optionsWidgetDestroyed()));
}
void KviOptionsWidgetContainer::closeEvent(QCloseEvent *e)
@@ -122,7 +152,8 @@ void KviOptionsWidgetContainer::reject()
void KviOptionsWidgetContainer::okClicked()
{
- if(m_pOptionsWidget)m_pOptionsWidget->commit();
+ if(m_pOptionsWidget)
+ m_pOptionsWidget->commit();
g_pApp->saveOptions();
delete this;
}