diff options
author | Jason Barron <jbarron@trolltech.com> | 2009-11-24 14:52:38 (GMT) |
---|---|---|
committer | Jason Barron <jbarron@trolltech.com> | 2009-11-24 14:56:43 (GMT) |
commit | a0c8e134a284d45520dd3a229e68dbcd155299e6 (patch) | |
tree | 15f1f4423a4dac17c57f9810f6ac280d85583f89 /src/gui/widgets/qdialogbuttonbox.cpp | |
parent | 4817debee23a72f44eedbb8f33b6b611b5161174 (diff) | |
download | Qt-a0c8e134a284d45520dd3a229e68dbcd155299e6.zip Qt-a0c8e134a284d45520dd3a229e68dbcd155299e6.tar.gz Qt-a0c8e134a284d45520dd3a229e68dbcd155299e6.tar.bz2 |
Fix softkeys for QDialogButtonBoxes created without a parent.
Inthe case where a QDialogButtonBox was created without a parent, for
example in the FTP example, the softkeys that are automatically created
inside the button box were not being added to the right widget when the
button box was given a parent (or added to a layout) later.
This patch resolves that issue by handling the ParentChange event and
then adding the softkeys at this point.
Task-number: QTBUG-6086
Reviewed-by: axis
Diffstat (limited to 'src/gui/widgets/qdialogbuttonbox.cpp')
-rw-r--r-- | src/gui/widgets/qdialogbuttonbox.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/gui/widgets/qdialogbuttonbox.cpp b/src/gui/widgets/qdialogbuttonbox.cpp index 2ee5751..0e859f1 100644 --- a/src/gui/widgets/qdialogbuttonbox.cpp +++ b/src/gui/widgets/qdialogbuttonbox.cpp @@ -1215,6 +1215,30 @@ bool QDialogButtonBox::event(QEvent *event) }else if (event->type() == QEvent::LanguageChange) { d->retranslateStrings(); } +#ifdef QT_SOFTKEYS_ENABLED + else if (event->type() == QEvent::ParentChange) { + QWidget *dialog = 0; + QWidget *p = this; + while (p && !p->isWindow()) { + p = p->parentWidget(); + if ((dialog = qobject_cast<QDialog *>(p))) + break; + } + + // If the parent changes, then move the softkeys + for (QHash<QAbstractButton *, QAction *>::const_iterator it = d->softKeyActions.constBegin(); + it != d->softKeyActions.constEnd(); ++it) { + QAction *current = it.value(); + QList<QWidget *> widgets = current->associatedWidgets(); + foreach (QWidget *w, widgets) + w->removeAction(current); + if (dialog) + dialog->addAction(current); + else + addAction(current); + } + } +#endif return QWidget::event(event); } |