diff --git a/conf/okular.kcfg b/conf/okular.kcfg index ddf56f01e..7021f6408 100644 --- a/conf/okular.kcfg +++ b/conf/okular.kcfg @@ -207,6 +207,9 @@ Replace + + + @@ -216,8 +219,6 @@ - - @@ -242,9 +243,6 @@ false - - true - -2 -2 diff --git a/part/dlgpresentation.cpp b/part/dlgpresentation.cpp index 8c97ec6bd..29a0ca4cb 100644 --- a/part/dlgpresentation.cpp +++ b/part/dlgpresentation.cpp @@ -98,14 +98,11 @@ DlgPresentation::DlgPresentation(QWidget *parent) layout->addRow(new QLabel(this)); // BEGIN Transitions section - // Checkbox: Enable transitions - QCheckBox *enableTransitions = new QCheckBox(this); - enableTransitions->setText(i18nc("@option:check Config dialog, presentation page, transitions", "Enable transitions")); - enableTransitions->setObjectName(QStringLiteral("kcfg_SlidesTransitionsEnabled")); - layout->addRow(QString(), enableTransitions); - // Combobox: Default transition QComboBox *defaultTransition = new QComboBox(this); + defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Instant (Never use animations)")); + defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Replace")); + defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Random transition")); defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Blinds vertical")); defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Blinds horizontal")); defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Box in")); @@ -115,8 +112,6 @@ DlgPresentation::DlgPresentation(QWidget *parent) defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Glitter down")); defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Glitter right")); defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Glitter right-down")); - defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Random transition")); - defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Replace")); defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Split horizontal in")); defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Split horizontal out")); defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Split vertical in")); @@ -127,8 +122,6 @@ DlgPresentation::DlgPresentation(QWidget *parent) defaultTransition->addItem(i18nc("@item:inlistbox Config dialog, presentation page, transitions", "Wipe up")); defaultTransition->setObjectName(QStringLiteral("kcfg_SlidesTransition")); layout->addRow(i18nc("@label:listbox Config dialog, presentation page, transitions", "Default transition:"), defaultTransition); - defaultTransition->setEnabled(Okular::Settings::slidesTransitionsEnabled()); - connect(enableTransitions, &QCheckBox::toggled, defaultTransition, &QComboBox::setEnabled); // END Transitions section layout->addRow(new QLabel(this)); diff --git a/part/part.cpp b/part/part.cpp index 5c3370a60..f99c74724 100644 --- a/part/part.cpp +++ b/part/part.cpp @@ -304,49 +304,7 @@ Part::Part(QWidget *parentWidget, QObject *parent, const QVariantList &args) // when this part is used in an application other than okular (e.g. unit tests) setComponentName(QStringLiteral("okular"), QString()); - const QLatin1String configFileName("okularpartrc"); - - // first, we check if a config file name has been specified - QString configFilePath = detectConfigFileName(args); - - if (configFilePath.isEmpty()) { - configFilePath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QLatin1Char('/') + configFileName; - } - - // Migrate old config - if (!QFile::exists(configFilePath)) { - qCDebug(OkularUiDebug) << "Did not find a config file, attempting to look for old config"; - - // Migrate old config + UI - Kdelibs4ConfigMigrator configMigrator(componentName()); - // UI file is handled automatically, we only need to specify config name because we're a part - configMigrator.setConfigFiles(QStringList(configFileName)); - - // If there's no old okular config to migrate, look for kpdf - if (!configMigrator.migrate()) { - qCDebug(OkularUiDebug) << "Did not find an old okular config file, attempting to look for kpdf config"; - - // First try the automatic detection, using $KDEHOME etc. - Kdelibs4Migration migration; - QString kpdfConfig = migration.locateLocal("config", QStringLiteral("kpdfpartrc")); - - // Fallback just in case it tried e. g. ~/.kde4 - if (kpdfConfig.isEmpty()) { - kpdfConfig = QDir::homePath() + QStringLiteral("/.kde/share/config/kpdfpartrc"); - } - - if (QFile::exists(kpdfConfig)) { - qCDebug(OkularUiDebug) << "Found old kpdf config" << kpdfConfig << "copying to" << configFilePath; - QFile::copy(kpdfConfig, configFilePath); - } else { - qCDebug(OkularUiDebug) << "Did not find an old kpdf config file"; - } - } else { - qCDebug(OkularUiDebug) << "Migrated old okular config"; - } - } - - Okular::Settings::instance(configFilePath); + setupConfigSkeleton(args, componentName()); #if KXMLGUI_VERSION < QT_VERSION_CHECK(5, 78, 0) // TODO KF6: Remove this section and part/xmlgui_helper.{cpp,h}. // In KXMLGUI 5.78, https://invent.kde.org/frameworks/kxmlgui/-/merge_requests/5 @@ -634,6 +592,64 @@ Part::Part(QWidget *parentWidget, QObject *parent, const QVariantList &args) #endif } +void Part::setupConfigSkeleton(const QVariantList &args, const QString &componentName) +{ + const QLatin1String configFileName("okularpartrc"); + + // first, we check if a config file name has been specified + QString configFilePath = detectConfigFileName(args); + + if (configFilePath.isEmpty()) { + configFilePath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QLatin1Char('/') + configFileName; + } + + // Migrate old config + if (!QFile::exists(configFilePath)) { + qCDebug(OkularUiDebug) << "Did not find a config file, attempting to look for old config"; + + // Migrate old config + UI + Kdelibs4ConfigMigrator configMigrator(componentName); + // UI file is handled automatically, we only need to specify config name because we're a part + configMigrator.setConfigFiles(QStringList(configFileName)); + + // If there's no old okular config to migrate, look for kpdf + if (!configMigrator.migrate()) { + qCDebug(OkularUiDebug) << "Did not find an old okular config file, attempting to look for kpdf config"; + + // First try the automatic detection, using $KDEHOME etc. + Kdelibs4Migration migration; + QString kpdfConfig = migration.locateLocal("config", QStringLiteral("kpdfpartrc")); + + // Fallback just in case it tried e. g. ~/.kde4 + if (kpdfConfig.isEmpty()) { + kpdfConfig = QDir::homePath() + QStringLiteral("/.kde/share/config/kpdfpartrc"); + } + + if (QFile::exists(kpdfConfig)) { + qCDebug(OkularUiDebug) << "Found old kpdf config" << kpdfConfig << "copying to" << configFilePath; + QFile::copy(kpdfConfig, configFilePath); + } else { + qCDebug(OkularUiDebug) << "Did not find an old kpdf config file"; + } + } else { + qCDebug(OkularUiDebug) << "Migrated old okular config"; + } + } + + KSharedConfigPtr config = KSharedConfig::openConfig(configFilePath); + + // Configuration update: SlidesTransitionsEnabled -> SlidesTransition = NoTransitions. + // See https://invent.kde.org/graphics/okular/-/merge_requests/357 + KConfigGroup slidesConfigGroup = config.data()->group("Dlg Presentation"); + if (slidesConfigGroup.readEntry("SlidesTransitionsEnabled", true) == false) { + slidesConfigGroup.writeEntry("SlidesTransition", "NoTransitions"); + } + slidesConfigGroup.deleteEntry("SlidesTransitionsEnabled"); + config.data()->sync(); + + Okular::Settings::instance(config); +} + void Part::setupViewerActions() { // ACTIONS diff --git a/part/part.h b/part/part.h index 84f9b9d91..743d04402 100644 --- a/part/part.h +++ b/part/part.h @@ -297,6 +297,15 @@ private: bool tryOpeningUrlWithFragmentAsName(); + /** + * Initializes Okular::Settings. + * Determines the config file path, and performs configuration updates not handled by kconf_update. + * + * @param args As passed to Part::Part(). + * @param componentName As KXMLGUIClient::componentName(), probably "okular". + */ + void setupConfigSkeleton(const QVariantList &args, const QString &componentName); + static int numberOfParts; QTemporaryFile *m_tempfile; diff --git a/part/presentationwidget.cpp b/part/presentationwidget.cpp index 2ad2414b6..e11b43a6a 100644 --- a/part/presentationwidget.cpp +++ b/part/presentationwidget.cpp @@ -1046,7 +1046,8 @@ void PresentationWidget::generatePage(bool disableTransition) #endif // start transition on pages that have one - if (!disableTransition && Okular::Settings::slidesTransitionsEnabled()) { + disableTransition |= (Okular::Settings::slidesTransition() == Okular::Settings::EnumSlidesTransition::NoTransitions); + if (!disableTransition) { const Okular::PageTransition *transition = m_frameIndex != -1 ? m_frames[m_frameIndex]->page->transition() : nullptr; if (transition) initTransition(transition); @@ -1819,6 +1820,7 @@ const Okular::PageTransition PresentationWidget::defaultTransition(int type) con return Okular::PageTransition(Okular::PageTransition::Fade); break; } + case Okular::Settings::EnumSlidesTransition::NoTransitions: case Okular::Settings::EnumSlidesTransition::Replace: default: return Okular::PageTransition(Okular::PageTransition::Replace);