diff options
author | Janne Anttila <janne.anttila@digia.com> | 2009-12-07 14:05:01 +0200 |
---|---|---|
committer | Janne Anttila <janne.anttila@digia.com> | 2009-12-07 14:05:45 +0200 |
commit | 245c9cc07ff1581dd126f213985c3557b2667aca (patch) | |
tree | 8f0d5da7330b0a5a89ef1aeb9948eb7c49397453 /src/gui/widgets/qdialogbuttonbox.cpp | |
parent | 91b4a40bd3cc9d004baddd9c19ced07ed37afef2 (diff) | |
download | qt4-tools-245c9cc07ff1581dd126f213985c3557b2667aca.tar.gz |
Added dimming support for disabled softkeys in Symbian.
If QAction::setEnabled(false) is called, the CBA buttons are dimmed
to have visual indication about disabled state.
Since enabled/disabled state of buttons in QDialogButtonBox is
controlled via QPushButton::setEnabled API, and because button box
content in Symbian is mapped to sofkkeys we also need to have proxy
for button enabled state to forward the information for underlying
QAction.
Reviewed-by: Sami Merila
Diffstat (limited to 'src/gui/widgets/qdialogbuttonbox.cpp')
-rw-r--r-- | src/gui/widgets/qdialogbuttonbox.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/gui/widgets/qdialogbuttonbox.cpp b/src/gui/widgets/qdialogbuttonbox.cpp index 0e859f17bd..56cf545242 100644 --- a/src/gui/widgets/qdialogbuttonbox.cpp +++ b/src/gui/widgets/qdialogbuttonbox.cpp @@ -259,6 +259,30 @@ static const int layouts[2][5][14] = } }; +class QDialogButtonEnabledProxy : public QObject +{ +public: + QDialogButtonEnabledProxy(QObject *parent, QWidget *src, QAction *trg) : QObject(parent), source(src), target(trg) + { + source->installEventFilter(this); + } + ~QDialogButtonEnabledProxy() + { + source->removeEventFilter(this); + } + bool eventFilter(QObject *object, QEvent *event) + { + if (object == source && event->type() == QEvent::EnabledChange) { + target->setEnabled(source->isEnabled()); + } + return false; + }; +private: + QWidget *source; + QAction *target; +}; + + class QDialogButtonBoxPrivate : public QWidgetPrivate { Q_DECLARE_PUBLIC(QDialogButtonBox) @@ -548,7 +572,9 @@ void QDialogButtonBoxPrivate::addButton(QAbstractButton *button, QDialogButtonBo QObject::connect(button, SIGNAL(destroyed()), q, SLOT(_q_handleButtonDestroyed())); buttonLists[role].append(button); #ifdef QT_SOFTKEYS_ENABLED - softKeyActions.insert(button, createSoftKey(button, role)); + QAction *action = createSoftKey(button, role); + softKeyActions.insert(button, action); + new QDialogButtonEnabledProxy(action, button, action); #endif if (doLayout) layoutButtons(); |