#include "kitemviews/private/kitemlistviewlayouter.h"
#include "testdir.h"
+#include <KConfigGroup>
+#include <KGlobalSettings>
+
+#include <QGraphicsSceneMouseEvent>
+
namespace {
const int DefaultTimeout = 2000;
};
void testKeyboardNavigation_data();
void testKeyboardNavigation();
+ void testMouseClickActivation();
private:
/**
<< "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());
<< 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.
}
}
+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();