From 5100c20c0df8ead9a7a97fa0ebb63f6fc8927dcb Mon Sep 17 00:00:00 2001 From: Emmanuel Pescosta Date: Sun, 1 Feb 2015 16:16:13 +0100 Subject: [PATCH] Port away from KGlobalSettings::singleClick() and use the mouse kcm module instead of implementing the single/double click settings on our one. REVIEW: 122311 --- src/kitemviews/kitemlistcontroller.cpp | 5 +- src/kitemviews/kitemlistcontroller.h | 2 +- .../navigation/navigationsettingspage.cpp | 32 ----- .../navigation/navigationsettingspage.h | 3 - src/tests/kitemlistcontrollertest.cpp | 117 ++++++++---------- 5 files changed, 53 insertions(+), 106 deletions(-) diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 812d1c949..5c68f10e4 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -23,7 +23,6 @@ #include "kitemlistcontroller.h" -#include #include #include "kitemlistview.h" @@ -773,7 +772,7 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, con } else if (shiftOrControlPressed) { // The mouse click should only update the selection, not trigger the item emitItemActivated = false; - } else if (!(KGlobalSettings::singleClick() || m_singleClickActivationEnforced)) { + } else if (!(m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) || m_singleClickActivationEnforced)) { emitItemActivated = false; } if (emitItemActivated) { @@ -803,7 +802,7 @@ bool KItemListController::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, } } - bool emitItemActivated = !(KGlobalSettings::singleClick() || m_singleClickActivationEnforced) && + bool emitItemActivated = !(m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) || m_singleClickActivationEnforced) && (event->button() & Qt::LeftButton) && index >= 0 && index < m_model->count(); if (emitItemActivated) { diff --git a/src/kitemviews/kitemlistcontroller.h b/src/kitemviews/kitemlistcontroller.h index ed5b71615..2824a1fc9 100644 --- a/src/kitemviews/kitemlistcontroller.h +++ b/src/kitemviews/kitemlistcontroller.h @@ -129,7 +129,7 @@ public: /** * If set to true, the signals itemActivated() and itemsActivated() are emitted * after a single-click of the left mouse button. If set to false (the default), - * the setting from KGlobalSettings::singleClick() is used. + * the setting from style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) is used. */ void setSingleClickActivationEnforced(bool singleClick); bool singleClickActivationEnforced() const; diff --git a/src/settings/navigation/navigationsettingspage.cpp b/src/settings/navigation/navigationsettingspage.cpp index 69feed3ee..81ea3bc82 100644 --- a/src/settings/navigation/navigationsettingspage.cpp +++ b/src/settings/navigation/navigationsettingspage.cpp @@ -22,12 +22,9 @@ #include "dolphin_generalsettings.h" #include -#include #include #include -#include -#include #include NavigationSettingsPage::NavigationSettingsPage(QWidget* parent) : @@ -44,19 +41,6 @@ NavigationSettingsPage::NavigationSettingsPage(QWidget* parent) : vBoxLayout->setSpacing(spacing); vBoxLayout->setAlignment(Qt::AlignTop); - // create 'Mouse' group - QGroupBox* mouseBox = new QGroupBox(i18nc("@title:group", "Mouse"), vBox); - vBoxLayout->addWidget(mouseBox); - mouseBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); - m_singleClick = new QRadioButton(i18nc("@option:check Mouse Settings", - "Single-click to open files and folders"), mouseBox); - m_doubleClick = new QRadioButton(i18nc("@option:check Mouse Settings", - "Double-click to open files and folders"), mouseBox); - - QVBoxLayout* mouseBoxLayout = new QVBoxLayout(mouseBox); - mouseBoxLayout->addWidget(m_singleClick); - mouseBoxLayout->addWidget(m_doubleClick); - m_openArchivesAsFolder = new QCheckBox(i18nc("@option:check", "Open archives as folder"), vBox); vBoxLayout->addWidget(m_openArchivesAsFolder); @@ -72,8 +56,6 @@ NavigationSettingsPage::NavigationSettingsPage(QWidget* parent) : loadSettings(); - connect(m_singleClick, &QRadioButton::toggled, this, &NavigationSettingsPage::changed); - connect(m_doubleClick, &QRadioButton::toggled, this, &NavigationSettingsPage::changed); connect(m_openArchivesAsFolder, &QCheckBox::toggled, this, &NavigationSettingsPage::changed); connect(m_autoExpandFolders, &QCheckBox::toggled, this, &NavigationSettingsPage::changed); } @@ -84,12 +66,6 @@ NavigationSettingsPage::~NavigationSettingsPage() void NavigationSettingsPage::applySettings() { - KConfig config("kcminputrc"); - KConfigGroup group = config.group("KDE"); - group.writeEntry("SingleClick", m_singleClick->isChecked(), KConfig::Persistent|KConfig::Global); - config.sync(); - KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged, KGlobalSettings::SETTINGS_MOUSE); - GeneralSettings* settings = GeneralSettings::self(); settings->setBrowseThroughArchives(m_openArchivesAsFolder->isChecked()); settings->setAutoExpandFolders(m_autoExpandFolders->isChecked()); @@ -103,18 +79,10 @@ void NavigationSettingsPage::restoreDefaults() settings->useDefaults(true); loadSettings(); settings->useDefaults(false); - - // The mouse settings stored in KGlobalSettings must be reset to - // the default values (= single click) manually. - m_singleClick->setChecked(true); - m_doubleClick->setChecked(false); } void NavigationSettingsPage::loadSettings() { - const bool singleClick = KGlobalSettings::singleClick(); - m_singleClick->setChecked(singleClick); - m_doubleClick->setChecked(!singleClick); m_openArchivesAsFolder->setChecked(GeneralSettings::browseThroughArchives()); m_autoExpandFolders->setChecked(GeneralSettings::autoExpandFolders()); } diff --git a/src/settings/navigation/navigationsettingspage.h b/src/settings/navigation/navigationsettingspage.h index ff1ed31ef..5410a4efa 100644 --- a/src/settings/navigation/navigationsettingspage.h +++ b/src/settings/navigation/navigationsettingspage.h @@ -22,7 +22,6 @@ #include class QCheckBox; -class QRadioButton; /** * @brief Page for the 'Navigation' settings of the Dolphin settings dialog. @@ -45,8 +44,6 @@ private: void loadSettings(); private: - QRadioButton* m_singleClick; - QRadioButton* m_doubleClick; QCheckBox* m_openArchivesAsFolder; QCheckBox* m_autoExpandFolders; }; diff --git a/src/tests/kitemlistcontrollertest.cpp b/src/tests/kitemlistcontrollertest.cpp index cd4d0a681..dafb9f854 100644 --- a/src/tests/kitemlistcontrollertest.cpp +++ b/src/tests/kitemlistcontrollertest.cpp @@ -25,12 +25,51 @@ #include "kitemviews/private/kitemlistviewlayouter.h" #include "testdir.h" -#include -#include - #include #include #include +#include + +/** + * \class KItemListControllerTestStyle is a proxy style for testing the + * KItemListController with different style hint options, e.g. single/double + * click activation. + */ +class KItemListControllerTestStyle : public QProxyStyle +{ +public: + KItemListControllerTestStyle(QStyle* style) : + QProxyStyle(style), + m_activateItemOnSingleClick((bool)style->styleHint(SH_ItemView_ActivateItemOnSingleClick)) + { + } + + void setActivateItemOnSingleClick(bool activateItemOnSingleClick) + { + m_activateItemOnSingleClick = activateItemOnSingleClick; + } + + bool activateItemOnSingleClick() const + { + return m_activateItemOnSingleClick; + } + + int styleHint(StyleHint hint, + const QStyleOption* option = nullptr, + const QWidget* widget = nullptr, + QStyleHintReturn* returnData = nullptr) const Q_DECL_OVERRIDE + { + switch (hint) { + case QStyle::SH_ItemView_ActivateItemOnSingleClick: + return (int)activateItemOnSingleClick(); + default: + return QProxyStyle::styleHint(hint, option, widget, returnData); + } + } + +private: + bool m_activateItemOnSingleClick; +}; Q_DECLARE_METATYPE(KFileItemListView::ItemLayout); Q_DECLARE_METATYPE(Qt::Orientation); @@ -66,6 +105,7 @@ private: KFileItemModel* m_model; TestDir* m_testDir; KItemListContainer* m_container; + KItemListControllerTestStyle* m_testStyle; }; /** @@ -85,6 +125,8 @@ void KItemListControllerTest::initTestCase() m_controller = m_container->controller(); m_controller->setSelectionBehavior(KItemListController::MultiSelection); m_selectionManager = m_controller->selectionManager(); + m_testStyle = new KItemListControllerTestStyle(m_view->style()); + m_view->setStyle(m_testStyle); QStringList files; files @@ -529,10 +571,7 @@ void KItemListControllerTest::testMouseClickActivation() 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"); + const bool restoreSettingsSingleClick = m_testStyle->activateItemOnSingleClick(); QGraphicsSceneMouseEvent mousePressEvent(QEvent::GraphicsSceneMousePress); mousePressEvent.setPos(pos); @@ -547,43 +586,14 @@ void KItemListControllerTest::testMouseClickActivation() 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!"); - } - + m_testStyle->setActivateItemOnSingleClick(true); 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!"); - } - + m_testStyle->setActivateItemOnSingleClick(false); m_view->event(&mousePressEvent); m_view->event(&mouseReleaseEvent); QCOMPARE(spyItemActivated.count(), 0); @@ -604,21 +614,7 @@ void KItemListControllerTest::testMouseClickActivation() 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!"); - } - + m_testStyle->setActivateItemOnSingleClick(true); m_view->event(&mousePressEvent); m_view->event(&mouseReleaseEvent); QCOMPARE(spyItemActivated.count(), 1); @@ -633,20 +629,7 @@ void KItemListControllerTest::testMouseClickActivation() // 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!"); - } + m_testStyle->setActivateItemOnSingleClick(restoreSettingsSingleClick); } void KItemListControllerTest::adjustGeometryForColumnCount(int count)