]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/tests/kitemlistcontrollertest.cpp
Merge remote-tracking branch 'origin/KDE/4.11'
[dolphin.git] / src / tests / kitemlistcontrollertest.cpp
index 2085dead6143101ad61f3222ace58ef51c0cd969..60e93e539abc9f87926ba7c9c0dcbf36440a4569 100644 (file)
 #include "kitemviews/private/kitemlistviewlayouter.h"
 #include "testdir.h"
 
+#include <KConfigGroup>
+#include <KGlobalSettings>
+
+#include <QGraphicsSceneMouseEvent>
+
 namespace {
     const int DefaultTimeout = 2000;
 };
@@ -51,6 +56,7 @@ private slots:
 
     void testKeyboardNavigation_data();
     void testKeyboardNavigation();
+    void testMouseClickActivation();
 
 private:
     /**
@@ -92,7 +98,7 @@ void KItemListControllerTest::initTestCase()
         << "b1"
         << "c1" << "c2" << "c3" << "c4" << "c5"
         << "d1" << "d2" << "d3" << "d4"
-        << "e1" << "e2" << "e3" << "e4" << "e5" << "e6" << "e7";
+        << "e" << "e 2" << "e 3" << "e 4" << "e 5" << "e 6" << "e 7";
 
     m_testDir->createFiles(files);
     m_model->loadDirectory(m_testDir->url());
@@ -276,7 +282,14 @@ void KItemListControllerTest::testKeyboardNavigation_data()
                         << qMakePair(KeyPress(Qt::Key_Home), ViewState(0, QSet<int>() << 0))
                         << qMakePair(KeyPress(Qt::Key_Space, Qt::ControlModifier), ViewState(0, QSet<int>()))
                         << qMakePair(KeyPress(Qt::Key_Enter), ViewState(0, QSet<int>(), true))
-                        << qMakePair(KeyPress(Qt::Key_Space, Qt::ControlModifier), ViewState(0, QSet<int>() << 0));
+                        << qMakePair(KeyPress(Qt::Key_Space, Qt::ControlModifier), ViewState(0, QSet<int>() << 0))
+                        << qMakePair(KeyPress(Qt::Key_Space, Qt::ControlModifier), ViewState(0, QSet<int>()))
+                        << qMakePair(KeyPress(Qt::Key_Space), ViewState(0, QSet<int>() << 0))
+                        << qMakePair(KeyPress(Qt::Key_E), ViewState(13, QSet<int>() << 13))
+                        << qMakePair(KeyPress(Qt::Key_Space), ViewState(14, QSet<int>() << 14))
+                        << qMakePair(KeyPress(Qt::Key_3), ViewState(15, QSet<int>() << 15))
+                        << qMakePair(KeyPress(Qt::Key_Home), ViewState(0, QSet<int>() << 0))
+                        << qMakePair(KeyPress(Qt::Key_Escape), ViewState(0, QSet<int>()));
 
                     // Next, we test combinations of key presses which only work for a
                     // particular number of columns and either enabled or disabled grouping.
@@ -506,6 +519,141 @@ void KItemListControllerTest::testKeyboardNavigation()
     }
 }
 
+void KItemListControllerTest::testMouseClickActivation()
+{
+    m_view->setItemLayout(KFileItemListView::IconsLayout);
+
+    // Make sure that we have a large window, such that
+    // the items are visible and clickable.
+    adjustGeometryForColumnCount(5);
+
+    // Make sure that the first item is visible in the view.
+    m_view->setScrollOffset(0);
+    QCOMPARE(m_view->firstVisibleIndex(), 0);
+
+    const QPointF pos = m_view->itemContextRect(0).center();
+
+    // Save the "single click" setting.
+    const bool restoreKGlobalSettingsSingleClick = KGlobalSettings::singleClick();
+
+    KConfig config("kcminputrc");
+    KConfigGroup group = config.group("KDE");
+
+    QGraphicsSceneMouseEvent mousePressEvent(QEvent::GraphicsSceneMousePress);
+    mousePressEvent.setPos(pos);
+    mousePressEvent.setButton(Qt::LeftButton);
+    mousePressEvent.setButtons(Qt::LeftButton);
+
+    QGraphicsSceneMouseEvent mouseReleaseEvent(QEvent::GraphicsSceneMouseRelease);
+    mouseReleaseEvent.setPos(pos);
+    mouseReleaseEvent.setButton(Qt::LeftButton);
+    mouseReleaseEvent.setButtons(Qt::NoButton);
+
+    QSignalSpy spyItemActivated(m_controller, SIGNAL(itemActivated(int)));
+
+    // Default setting: single click activation.
+    group.writeEntry("SingleClick", true, KConfig::Persistent|KConfig::Global);
+    config.sync();
+    KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged, KGlobalSettings::SETTINGS_MOUSE);
+
+    int iterations = 0;
+    const int maxIterations = 20;
+    while (!KGlobalSettings::singleClick() && iterations < maxIterations) {
+        QTest::qWait(50);
+        ++iterations;
+    }
+
+    if (!KGlobalSettings::singleClick()) {
+        // TODO: Try to find a way to make sure that changing the global setting works.
+        QSKIP("Failed to change the KGlobalSettings::singleClick() setting!", SkipSingle);
+    }
+
+    m_view->event(&mousePressEvent);
+    m_view->event(&mouseReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 1);
+    spyItemActivated.clear();
+
+    // Set the global setting to "double click activation".
+    group.writeEntry("SingleClick", false, KConfig::Persistent|KConfig::Global);
+    config.sync();
+    KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged, KGlobalSettings::SETTINGS_MOUSE);
+
+    iterations = 0;
+    while (KGlobalSettings::singleClick() && iterations < maxIterations) {
+        QTest::qWait(50);
+        ++iterations;
+    }
+
+    if (KGlobalSettings::singleClick()) {
+        // TODO: Try to find a way to make sure that changing the global setting works.
+        QSKIP("Failed to change the KGlobalSettings::singleClick() setting!", SkipSingle);
+    }
+
+    m_view->event(&mousePressEvent);
+    m_view->event(&mouseReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 0);
+    spyItemActivated.clear();
+
+    // Enforce single click activation in the controller.
+    m_controller->setSingleClickActivationEnforced(true);
+    m_view->event(&mousePressEvent);
+    m_view->event(&mouseReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 1);
+    spyItemActivated.clear();
+
+    // Do not enforce single click activation in the controller.
+    m_controller->setSingleClickActivationEnforced(false);
+    m_view->event(&mousePressEvent);
+    m_view->event(&mouseReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 0);
+    spyItemActivated.clear();
+
+    // Set the global setting back to "single click activation".
+    group.writeEntry("SingleClick", true, KConfig::Persistent|KConfig::Global);
+    config.sync();
+    KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged, KGlobalSettings::SETTINGS_MOUSE);
+
+    iterations = 0;
+    while (!KGlobalSettings::singleClick() && iterations < maxIterations) {
+        QTest::qWait(50);
+        ++iterations;
+    }
+
+    if (!KGlobalSettings::singleClick()) {
+        // TODO: Try to find a way to make sure that changing the global setting works.
+        QSKIP("Failed to change the KGlobalSettings::singleClick() setting!", SkipSingle);
+    }
+
+    m_view->event(&mousePressEvent);
+    m_view->event(&mouseReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 1);
+    spyItemActivated.clear();
+
+    // Enforce single click activation in the controller.
+    m_controller->setSingleClickActivationEnforced(true);
+    m_view->event(&mousePressEvent);
+    m_view->event(&mouseReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 1);
+    spyItemActivated.clear();
+
+    // Restore previous settings.
+    m_controller->setSingleClickActivationEnforced(true);
+    group.writeEntry("SingleClick", restoreKGlobalSettingsSingleClick, KConfig::Persistent|KConfig::Global);
+    config.sync();
+    KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged, KGlobalSettings::SETTINGS_MOUSE);
+    
+    iterations = 0;
+    while (KGlobalSettings::singleClick() != restoreKGlobalSettingsSingleClick && iterations < maxIterations) {
+        QTest::qWait(50);
+        ++iterations;
+    }
+
+    if (KGlobalSettings::singleClick() != restoreKGlobalSettingsSingleClick) {
+        // TODO: Try to find a way to make sure that changing the global setting works.
+        QSKIP("Failed to change the KGlobalSettings::singleClick() setting!", SkipSingle);
+    }
+}
+
 void KItemListControllerTest::adjustGeometryForColumnCount(int count)
 {
     const QSize size = m_view->itemSize().toSize();