summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Bastian <thierry.bastian@nokia.com>2009-10-30 10:11:26 (GMT)
committerThierry Bastian <thierry.bastian@nokia.com>2009-10-30 10:12:51 (GMT)
commit2cdea6a10da75b7b8870f27c432a5e02f7500340 (patch)
treecb3cf290e42851c45513f052c1b41b96ec6fdc14
parenta5c3cd6d540f282f59c7c5891598ed8f2c6e033f (diff)
downloadQt-2cdea6a10da75b7b8870f27c432a5e02f7500340.zip
Qt-2cdea6a10da75b7b8870f27c432a5e02f7500340.tar.gz
Qt-2cdea6a10da75b7b8870f27c432a5e02f7500340.tar.bz2
QActionGroup: reset the checkedAction when it is unchecked
Task-number: QTBUG-1019 Reviewed-by: Gabriel
-rw-r--r--src/gui/kernel/qactiongroup.cpp14
-rw-r--r--tests/auto/qactiongroup/tst_qactiongroup.cpp21
2 files changed, 31 insertions, 4 deletions
diff --git a/src/gui/kernel/qactiongroup.cpp b/src/gui/kernel/qactiongroup.cpp
index 40d18a2..8db76e4 100644
--- a/src/gui/kernel/qactiongroup.cpp
+++ b/src/gui/kernel/qactiongroup.cpp
@@ -72,10 +72,16 @@ void QActionGroupPrivate::_q_actionChanged()
Q_Q(QActionGroup);
QAction *action = qobject_cast<QAction*>(q->sender());
Q_ASSERT_X(action != 0, "QWidgetGroup::_q_actionChanged", "internal error");
- if(exclusive && action->isChecked() && action != current) {
- if(current)
- current->setChecked(false);
- current = action;
+ if(exclusive) {
+ if (action->isChecked()) {
+ if (action != current) {
+ if(current)
+ current->setChecked(false);
+ current = action;
+ }
+ } else if (action == current) {
+ current = 0;
+ }
}
}
diff --git a/tests/auto/qactiongroup/tst_qactiongroup.cpp b/tests/auto/qactiongroup/tst_qactiongroup.cpp
index 2d215a0..7259479 100644
--- a/tests/auto/qactiongroup/tst_qactiongroup.cpp
+++ b/tests/auto/qactiongroup/tst_qactiongroup.cpp
@@ -70,6 +70,7 @@ private slots:
void separators();
void testActionInTwoQActionGroup();
+ void unCheckCurrentAction();
};
tst_QActionGroup::tst_QActionGroup()
@@ -278,5 +279,25 @@ void tst_QActionGroup::testActionInTwoQActionGroup()
QCOMPARE(group1.actions().isEmpty(), true);
}
+void tst_QActionGroup::unCheckCurrentAction()
+{
+ QActionGroup group(0);
+ QAction action1(&group) ,action2(&group);
+ action1.setCheckable(true);
+ action2.setCheckable(true);
+ QVERIFY(!action1.isChecked());
+ QVERIFY(!action2.isChecked());
+ action1.setChecked(true);
+ QVERIFY(action1.isChecked());
+ QVERIFY(!action2.isChecked());
+ QAction *current = group.checkedAction();
+ QCOMPARE(current, &action1);
+ current->setChecked(false);
+ QVERIFY(!action1.isChecked());
+ QVERIFY(!action2.isChecked());
+ QVERIFY(group.checkedAction() == 0);
+}
+
+
QTEST_MAIN(tst_QActionGroup)
#include "tst_qactiongroup.moc"