void KShortcutsEditorDelegate::stealShortcut( const QKeySequence &seq, KAction *action) { QTreeWidget *view = static_cast<QTreeWidget *>(parent()); // Iterate over all items QTreeWidgetItemIterator it(view, QTreeWidgetItemIterator::NoChildren); for (; (*it); ++it) { KShortcutsEditorItem* item = dynamic_cast<KShortcutsEditorItem *>(*it); if (item && item->data(0, ObjectRole).value<QObject*>() == action) { // We found the action, snapshot the current state. Steal the // shortcut. We will save the change later. KShortcut cut = action->shortcut(); if ( cut.primary().matches(seq) != QKeySequence::NoMatch || seq.matches(cut.primary()) != QKeySequence::NoMatch) { item->setKeySequence(LocalPrimary, QKeySequence()); } if ( cut.alternate().matches(seq) != QKeySequence::NoMatch || seq.matches(cut.alternate()) != QKeySequence::NoMatch) { item->setKeySequence(LocalAlternate, QKeySequence()); } break; } } }
void KGlobalShortcutTest::testSaveRestore() { setupTest("testSaveRestore"); //It /would be nice/ to test persistent storage. That is not so easy... KShortcut cutA = m_actionA->globalShortcut(); // Delete the action delete m_actionA; // Recreate it m_actionA = new KAction("Text For Action A", this); m_actionA->setObjectName("Action A:testSaveRestore"); // Now it's empty QVERIFY(m_actionA->globalShortcut().isEmpty()); m_actionA->setGlobalShortcut(KShortcut()); // Now it's restored QCOMPARE(m_actionA->globalShortcut(), cutA); // And again delete m_actionA; m_actionA = new KAction("Text For Action A", this); m_actionA->setObjectName("Action A:testSaveRestore"); m_actionA->setGlobalShortcut(KShortcut(QKeySequence(), cutA.primary())); QCOMPARE(m_actionA->globalShortcut(), cutA); }
void parsing() { KShortcut cut; cut = KShortcut(";, Alt+;; ;, Alt+A, ;"); QVERIFY(cut.primary() == QKeySequence::fromString(";, Alt+;")); QVERIFY(cut.alternate() == QKeySequence::fromString(";, Alt+A, ;")); cut = KShortcut("Win+E"); //QTest::ignoreMessage(QtWarningMsg, "QKeySequence::fromString: Unknown modifier 'win+'"); QEXPECT_FAIL("", "Qt Bug 205255 - QKeySequence silently discards unknown key modifiers", Continue); QVERIFY(cut.isEmpty()); cut = KShortcut("Meta+E"); QVERIFY(cut.primary()[0] == (Qt::META | Qt::Key_E)); //qDebug() << QKeySequence(Qt::ALT | Qt::Key_Plus).toString(); //qDebug() << QKeySequence(Qt::ALT | Qt::Key_Minus).toString(); cut = KShortcut("Alt+Plus"); // KDE3 said "Alt+Plus", while Qt4 says "Alt++", so KShortcut has to handle this QVERIFY(cut.primary()[0] == (Qt::ALT | Qt::Key_Plus)); cut = KShortcut("Alt+Minus"); // KDE3 said "Alt+Minus", while Qt4 says "Alt+-", so KShortcut has to handle this QVERIFY(cut.primary()[0] == (Qt::ALT | Qt::Key_Minus)); }