diff options
| author | 2010-11-17 00:58:53 +0000 | |
|---|---|---|
| committer | 2010-11-17 00:58:53 +0000 | |
| commit | 0d2a7c454e485af6dbc4082b122454141767133a (patch) | |
| tree | 216697b5b5c578454552a9c751b2c2c2779ada40 /src/modules/options/container.cpp | |
| parent | don't try to reuse already opened option widgets (fixes #1018) (diff) | |
| download | KVIrc-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.cpp | 37 |
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; } |
