]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/startup/startupsettingspage.cpp
Merge branch 'release/20.12'
[dolphin.git] / src / settings / startup / startupsettingspage.cpp
index f0c2d53cfc371c75fdab6135bc2c48b1c2a08435..a7fcec4fa3320f818a0e7e1711d316b038941719 100644 (file)
@@ -13,6 +13,7 @@
 
 #include <KLocalizedString>
 #include <KMessageBox>
+#include <KProtocolManager>
 
 #include <QButtonGroup>
 #include <QCheckBox>
@@ -138,11 +139,17 @@ void StartupSettingsPage::applySettings()
     GeneralSettings* settings = GeneralSettings::self();
 
     const QUrl url(QUrl::fromUserInput(m_homeUrl->text(), QString(), QUrl::AssumeLocalFile));
-    KFileItem fileItem(url);
-    if ((url.isValid() && fileItem.isDir()) || (url.scheme() == QLatin1String("timeline"))) {
-        settings->setHomeUrl(url.toDisplayString(QUrl::PreferLocalFile));
+    if (url.isValid() && KProtocolManager::supportsListing(url)) {
+        KIO::StatJob* job = KIO::statDetails(url, KIO::StatJob::SourceSide, KIO::StatDetail::StatBasic, KIO::JobFlag::HideProgressInfo);
+        connect(job, &KJob::result, this, [this, settings, url](KJob* job) {
+            if (job->error() == 0 && qobject_cast<KIO::StatJob*>(job)->statResult().isDir()) {
+                settings->setHomeUrl(url.toDisplayString(QUrl::PreferLocalFile));
+            } else {
+                showSetDefaultDirectoryError();
+            }
+        });
     } else {
-        KMessageBox::error(this, i18nc("@info", "The location for the home folder is invalid or does not exist, it will not be applied."));
+        showSetDefaultDirectoryError();
     }
 
     // Remove saved state if "remember open tabs" has been turned off
@@ -180,7 +187,7 @@ void StartupSettingsPage::slotSettingsChanged()
 
     // Enable and disable home URL controls appropriately
     updateInitialViewOptions();
-    emit changed();
+    Q_EMIT changed();
 }
 
 void StartupSettingsPage::updateInitialViewOptions()
@@ -222,3 +229,8 @@ void StartupSettingsPage::loadSettings()
     m_showFullPathInTitlebar->setChecked(GeneralSettings::showFullPathInTitlebar());
     m_openExternallyCalledFolderInNewTab->setChecked(GeneralSettings::openExternallyCalledFolderInNewTab());
 }
+
+void StartupSettingsPage::showSetDefaultDirectoryError()
+{
+    KMessageBox::error(this, i18nc("@info", "The location for the home folder is invalid or does not exist, it will not be applied."));
+}