+
+QVector<QPair<QSharedPointer<OrgKdeDolphinMainWindowInterface>, QStringList>> Dolphin::dolphinGuiInstances(const QString &preferredService)
+{
+#ifdef HAVE_KACTIVITIES
+ static std::once_flag one_consumer;
+ static KActivities::Consumer *consumer;
+ std::call_once(one_consumer, []() {
+ consumer = new KActivities::Consumer();
+ // ensures the consumer is ready for query
+ QEventLoop loop;
+ QObject::connect(consumer, &KActivities::Consumer::serviceStatusChanged, &loop, &QEventLoop::quit);
+ loop.exec();
+ });
+#endif
+
+ QVector<QPair<QSharedPointer<OrgKdeDolphinMainWindowInterface>, QStringList>> dolphinInterfaces;
+ const auto tryAppendInterface = [&dolphinInterfaces](const QString &service) {
+ // Check if instance can handle our URLs
+ QSharedPointer<OrgKdeDolphinMainWindowInterface> interface(
+ new OrgKdeDolphinMainWindowInterface(service, QStringLiteral("/dolphin/Dolphin_1"), QDBusConnection::sessionBus()));
+ if (interface->isValid() && !interface->lastError().isValid()) {
+#ifdef HAVE_KACTIVITIES
+ const auto currentActivity = consumer->currentActivity();
+ if (currentActivity.isEmpty() || currentActivity == QStringLiteral("00000000-0000-0000-0000-000000000000")
+ || interface->isOnActivity(consumer->currentActivity()))
+#endif
+ if (interface->isOnCurrentDesktop()) {
+ dolphinInterfaces.append(qMakePair(interface, QStringList()));
+ }
+ }
+ };
+
+ if (!preferredService.isEmpty()) {
+ tryAppendInterface(preferredService);
+ }
+
+ // Look for dolphin instances among all available dbus services.
+ QDBusConnectionInterface *sessionInterface = QDBusConnection::sessionBus().interface();
+ const QStringList dbusServices = sessionInterface ? sessionInterface->registeredServiceNames().value() : QStringList();
+ // Don't match the service without trailing "-" (unique instance)
+ const QString pattern = QStringLiteral("org.kde.dolphin-");
+ // Don't match the pid without leading "-"
+ const QString myPid = QLatin1Char('-') + QString::number(QCoreApplication::applicationPid());
+ for (const QString &service : dbusServices) {
+ if (service.startsWith(pattern) && !service.endsWith(myPid)) {
+ tryAppendInterface(service);
+ }
+ }
+
+ return dolphinInterfaces;
+}
+
+QPair<QString, Qt::SortOrder> Dolphin::sortOrderForUrl(QUrl &url)
+{
+ ViewProperties globalProps(url);
+ return QPair<QString, Qt::SortOrder>(globalProps.sortRole(), globalProps.sortOrder());
+}
+
+double GlobalConfig::animationDurationFactor()
+{
+ if (s_animationDurationFactor >= 0.0) {
+ return s_animationDurationFactor;
+ }
+ // This is the first time this method is called.
+ auto kdeGlobalsConfig = KConfigGroup(KSharedConfig::openConfig(), QStringLiteral("KDE"));
+ updateAnimationDurationFactor(kdeGlobalsConfig, {"AnimationDurationFactor"});
+
+ KConfigWatcher::Ptr configWatcher = KConfigWatcher::create(KSharedConfig::openConfig());
+ connect(configWatcher.data(), &KConfigWatcher::configChanged, &GlobalConfig::updateAnimationDurationFactor);
+ return s_animationDurationFactor;
+}
+
+void GlobalConfig::updateAnimationDurationFactor(const KConfigGroup &group, const QByteArrayList &names)
+{
+ if (group.name() == QLatin1String("KDE") && names.contains(QByteArrayLiteral("AnimationDurationFactor"))) {
+ s_animationDurationFactor = std::max(0.0, group.readEntry("AnimationDurationFactor", 1.0));
+ }
+}
+
+double GlobalConfig::s_animationDurationFactor = -1.0;