Advertisement
Guest User

Untitled

a guest
Oct 9th, 2022
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.45 KB | None | 0 0
  1. diff --git a/src/settings/dolphin_generalsettings.kcfg b/src/settings/dolphin_generalsettings.kcfg
  2. index aedc24ea4..85786ea1b 100644
  3. --- a/src/settings/dolphin_generalsettings.kcfg
  4. +++ b/src/settings/dolphin_generalsettings.kcfg
  5. @@ -59,6 +59,14 @@
  6. <label>Should the filter bar be shown</label>
  7. <default>false</default>
  8. </entry>
  9. + <entry name="LocalViewProps" type="Bool">
  10. + <label>Should view properties be stored in folders</label>
  11. + <default>true</default>
  12. + </entry>
  13. + <entry name="UserViewProps" type="Bool">
  14. + <label>Should the view properties be stored in user .local</label>
  15. + <default>true</default>
  16. + </entry>
  17. <entry name="GlobalViewProps" type="Bool">
  18. <label>Should the view properties be used for all folders</label>
  19. <default>true</default>
  20. diff --git a/src/settings/general/behaviorsettingspage.cpp b/src/settings/general/behaviorsettingspage.cpp
  21. index 4e78447c7..de62304eb 100644
  22. --- a/src/settings/general/behaviorsettingspage.cpp
  23. +++ b/src/settings/general/behaviorsettingspage.cpp
  24. @@ -21,6 +21,7 @@ BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) :
  25. SettingsPageBase(parent),
  26. m_url(url),
  27. m_localViewProps(nullptr),
  28. + m_userViewProps(nullptr),
  29. m_globalViewProps(nullptr),
  30. m_showToolTips(nullptr),
  31. m_showSelectionToggle(nullptr),
  32. @@ -32,16 +33,24 @@ BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) :
  33. {
  34. QFormLayout* topLayout = new QFormLayout(this);
  35.  
  36. -
  37. // View properties
  38. - m_globalViewProps = new QRadioButton(i18nc("@option:radio", "Use common display style for all folders"));
  39. - m_localViewProps = new QRadioButton(i18nc("@option:radio", "Remember display style for each folder"));
  40. - m_localViewProps->setToolTip(i18nc("@info", "Dolphin will create a hidden .directory file in each folder you change view properties for."));
  41. + m_globalViewProps = new QRadioButton(i18nc(
  42. + "@option:radio", "Use common display for all folders"));
  43. + m_userViewProps = new QRadioButton(i18nc(
  44. + "@option:radio", "User .local remembers all folder settings"));
  45. + m_userViewProps->setToolTip(i18nc("@info",
  46. + "Dolphin will create a hidden .directory file in user .local for changed view properties."));
  47. + m_localViewProps = new QRadioButton(i18nc(
  48. + "@option:radio", "Each folder remembers own settings"));
  49. + m_localViewProps->setToolTip(i18nc("@info",
  50. + "Dolphin will create a hidden .directory file in each folder for changed view properties."));
  51.  
  52. QButtonGroup* viewGroup = new QButtonGroup(this);
  53. viewGroup->addButton(m_globalViewProps);
  54. + viewGroup->addButton(m_userViewProps);
  55. viewGroup->addButton(m_localViewProps);
  56. - topLayout->addRow(i18nc("@title:group", "View: "), m_globalViewProps);
  57. + topLayout->addRow(i18nc("@title:group", "View Style: "), m_globalViewProps);
  58. + topLayout->addRow(QString(), m_userViewProps);
  59. topLayout->addRow(QString(), m_localViewProps);
  60.  
  61.  
  62. @@ -95,6 +104,7 @@ BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) :
  63. loadSettings();
  64.  
  65. connect(m_localViewProps, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed);
  66. + connect(m_userViewProps, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed);
  67. connect(m_globalViewProps, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed);
  68. #if HAVE_BALOO
  69. connect(m_showToolTips, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed);
  70. @@ -117,8 +127,9 @@ void BehaviorSettingsPage::applySettings()
  71. GeneralSettings* settings = GeneralSettings::self();
  72. ViewProperties props(m_url); // read current view properties
  73.  
  74. - const bool useGlobalViewProps = m_globalViewProps->isChecked();
  75. - settings->setGlobalViewProps(useGlobalViewProps);
  76. + settings->setLocalViewProps(m_localViewProps->isChecked());
  77. + settings->setUserViewProps(m_userViewProps->isChecked());
  78. + settings->setGlobalViewProps(m_globalViewProps->isChecked());
  79. #if HAVE_BALOO
  80. settings->setShowToolTips(m_showToolTips->isChecked());
  81. #endif
  82. @@ -129,7 +140,7 @@ void BehaviorSettingsPage::applySettings()
  83. settings->setCloseActiveSplitView(m_closeActiveSplitView->isChecked());
  84. settings->save();
  85.  
  86. - if (useGlobalViewProps) {
  87. + if (m_globalViewProps->isChecked()) {
  88. // Remember the global view properties by applying the current view properties.
  89. // It is important that GeneralSettings::globalViewProps() is set before
  90. // the class ViewProperties is used, as ViewProperties uses this setting
  91. @@ -149,9 +160,9 @@ void BehaviorSettingsPage::restoreDefaults()
  92.  
  93. void BehaviorSettingsPage::loadSettings()
  94. {
  95. - const bool useGlobalViewProps = GeneralSettings::globalViewProps();
  96. - m_localViewProps->setChecked(!useGlobalViewProps);
  97. - m_globalViewProps->setChecked(useGlobalViewProps);
  98. + m_localViewProps->setChecked(GeneralSettings::localViewProps());
  99. + m_userViewProps->setChecked(GeneralSettings::userViewProps());
  100. + m_globalViewProps->setChecked(GeneralSettings::globalViewProps());
  101.  
  102. #if HAVE_BALOO
  103. m_showToolTips->setChecked(GeneralSettings::showToolTips());
  104. diff --git a/src/settings/general/behaviorsettingspage.h b/src/settings/general/behaviorsettingspage.h
  105. index b054e6d35..a630f0090 100644
  106. --- a/src/settings/general/behaviorsettingspage.h
  107. +++ b/src/settings/general/behaviorsettingspage.h
  108. @@ -41,6 +41,7 @@ private:
  109. QUrl m_url;
  110.  
  111. QRadioButton* m_localViewProps;
  112. + QRadioButton* m_userViewProps;
  113. QRadioButton* m_globalViewProps;
  114.  
  115. QCheckBox* m_showToolTips;
  116. diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
  117. index d4a7457cb..fc9891ca5 100644
  118. --- a/src/tests/CMakeLists.txt
  119. +++ b/src/tests/CMakeLists.txt
  120. @@ -56,6 +56,11 @@ ecm_add_test(viewpropertiestest.cpp testdir.cpp
  121. TEST_NAME viewpropertiestest
  122. LINK_LIBRARIES dolphinprivate dolphinstatic Qt${QT_MAJOR_VERSION}::Test)
  123.  
  124. +# UserViewPropertiesTest
  125. +ecm_add_test(userviewpropertiestest.cpp testdir.cpp
  126. +TEST_NAME userviewpropertiestest
  127. +LINK_LIBRARIES dolphinprivate dolphinstatic Qt${QT_MAJOR_VERSION}::Test)
  128. +
  129. # DolphinMainWindowTest
  130. ecm_add_test(dolphinmainwindowtest.cpp testdir.cpp ${CMAKE_SOURCE_DIR}/src/dolphin.qrc
  131. TEST_NAME dolphinmainwindowtest
  132. diff --git a/src/tests/userviewpropertiestest.cpp b/src/tests/userviewpropertiestest.cpp
  133. new file mode 100644
  134. index 000000000..9f36f65ce
  135. --- /dev/null
  136. +++ b/src/tests/userviewpropertiestest.cpp
  137. @@ -0,0 +1,90 @@
  138. +/*
  139. + * SPDX-FileCopyrightText: 2012 Peter Penz <peter.penz19@gmail.com>
  140. + *
  141. + * SPDX-License-Identifier: GPL-2.0-or-later
  142. + */
  143. +
  144. +#include "dolphin_generalsettings.h"
  145. +#include "views/viewproperties.h"
  146. +#include "testdir.h"
  147. +
  148. +#include <QTest>
  149. +
  150. +class UserViewPropertiesTest : public QObject
  151. +{
  152. + Q_OBJECT
  153. +
  154. +private Q_SLOTS:
  155. + void initTestCase();
  156. + void init();
  157. + void cleanup();
  158. +
  159. + void testUserView();
  160. +
  161. +private:
  162. + bool m_globalViewProps;
  163. + bool m_userViewProps;
  164. + bool m_localViewProps;
  165. +
  166. + TestDir* m_testDir;
  167. +};
  168. +
  169. +void UserViewPropertiesTest::initTestCase()
  170. +{
  171. + QStandardPaths::setTestModeEnabled(true);
  172. +}
  173. +
  174. +void UserViewPropertiesTest::init()
  175. +{
  176. + m_globalViewProps = GeneralSettings::self()->globalViewProps();
  177. + m_userViewProps = GeneralSettings::self()->userViewProps();
  178. + m_localViewProps = GeneralSettings::self()->localViewProps();
  179. +
  180. + // Setup test props.
  181. + GeneralSettings::self()->setGlobalViewProps(false);
  182. + GeneralSettings::self()->setUserViewProps(true);
  183. + GeneralSettings::self()->setLocalViewProps(false);
  184. + GeneralSettings::self()->save();
  185. +
  186. + // It is mandatory to create the test-directory inside the home-directory
  187. + // of the user: ViewProperties does not write inside directories
  188. + // outside the home-directory to prevent overwriting other user-settings
  189. + // in case if write-permissions are given.
  190. + m_testDir = new TestDir(QDir::homePath() + "/.userViewPropertiesTest-");
  191. +}
  192. +
  193. +void UserViewPropertiesTest::cleanup()
  194. +{
  195. + delete m_testDir;
  196. + m_testDir = nullptr;
  197. +
  198. + GeneralSettings::self()->setGlobalViewProps(m_globalViewProps);
  199. + GeneralSettings::self()->setUserViewProps(m_userViewProps);
  200. + GeneralSettings::self()->setLocalViewProps(m_localViewProps);
  201. + GeneralSettings::self()->save();
  202. +}
  203. +
  204. +void UserViewPropertiesTest::testUserView()
  205. +{
  206. + // Ensure no user .directory file exists.
  207. + QString dotDirectoryFile =
  208. + QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
  209. + dotDirectoryFile.append("/view_properties");
  210. + dotDirectoryFile.append("/local");
  211. + dotDirectoryFile.append(m_testDir->url().toLocalFile());
  212. + dotDirectoryFile.append("/.directory");
  213. + QVERIFY(!QFile::exists(dotDirectoryFile));
  214. +
  215. + // Trigger action to create one.
  216. + QScopedPointer<ViewProperties> props(new ViewProperties(m_testDir->url()));
  217. + QVERIFY(props->isAutoSaveEnabled());
  218. + props->setSortRole("someNewSortRole");
  219. + props.reset();
  220. +
  221. + // Ensure it now exists.
  222. + QVERIFY(QFile::exists(dotDirectoryFile));
  223. +}
  224. +
  225. +QTEST_GUILESS_MAIN(UserViewPropertiesTest)
  226. +
  227. +#include "userviewpropertiestest.moc"
  228. diff --git a/src/tests/viewpropertiestest.cpp b/src/tests/viewpropertiestest.cpp
  229. index 14d59be0a..e85d08692 100644
  230. --- a/src/tests/viewpropertiestest.cpp
  231. +++ b/src/tests/viewpropertiestest.cpp
  232. @@ -24,6 +24,9 @@ private Q_SLOTS:
  233.  
  234. private:
  235. bool m_globalViewProps;
  236. + bool m_userViewProps;
  237. + bool m_localViewProps;
  238. +
  239. TestDir* m_testDir;
  240. };
  241.  
  242. @@ -35,7 +38,13 @@ void ViewPropertiesTest::initTestCase()
  243. void ViewPropertiesTest::init()
  244. {
  245. m_globalViewProps = GeneralSettings::self()->globalViewProps();
  246. + m_userViewProps = GeneralSettings::self()->userViewProps();
  247. + m_localViewProps = GeneralSettings::self()->localViewProps();
  248. +
  249. + // Setup test props.
  250. GeneralSettings::self()->setGlobalViewProps(false);
  251. + GeneralSettings::self()->setUserViewProps(false);
  252. + GeneralSettings::self()->setLocalViewProps(true);
  253. GeneralSettings::self()->save();
  254.  
  255. // It is mandatory to create the test-directory inside the home-directory
  256. @@ -51,6 +60,8 @@ void ViewPropertiesTest::cleanup()
  257. m_testDir = nullptr;
  258.  
  259. GeneralSettings::self()->setGlobalViewProps(m_globalViewProps);
  260. + GeneralSettings::self()->setUserViewProps(m_userViewProps);
  261. + GeneralSettings::self()->setLocalViewProps(m_localViewProps);
  262. GeneralSettings::self()->save();
  263. }
  264.  
  265. diff --git a/src/views/viewproperties.cpp b/src/views/viewproperties.cpp
  266. index e6dbcd811..4bdc299e4 100644
  267. --- a/src/views/viewproperties.cpp
  268. +++ b/src/views/viewproperties.cpp
  269. @@ -74,7 +74,11 @@ ViewProperties::ViewProperties(const QUrl& url) :
  270. if (!useDestinationDir) {
  271. const QFileInfo dirInfo(m_filePath);
  272. const QFileInfo fileInfo(m_filePath + QDir::separator() + ViewPropertiesFileName);
  273. - useDestinationDir = !dirInfo.isWritable() || (dirInfo.size() > 0 && fileInfo.exists() && !(fileInfo.isReadable() && fileInfo.isWritable()));
  274. + useDestinationDir = settings->userViewProps() ||
  275. + !dirInfo.isWritable() ||
  276. + (dirInfo.size() > 0 && fileInfo.exists() &&
  277. + !(fileInfo.isReadable() && fileInfo.isWritable())
  278. + );
  279. }
  280.  
  281. if (useDestinationDir) {
  282.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement