diff options
author | Thierry Bastian <thierry.bastian@nokia.com> | 2009-10-30 10:11:26 (GMT) |
---|---|---|
committer | Thierry Bastian <thierry.bastian@nokia.com> | 2009-10-30 10:12:51 (GMT) |
commit | 2cdea6a10da75b7b8870f27c432a5e02f7500340 (patch) | |
tree | cb3cf290e42851c45513f052c1b41b96ec6fdc14 | |
parent | a5c3cd6d540f282f59c7c5891598ed8f2c6e033f (diff) | |
download | Qt-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.cpp | 14 | ||||
-rw-r--r-- | tests/auto/qactiongroup/tst_qactiongroup.cpp | 21 |
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" |