diff --git a/autotests/annotationtoolbartest.cpp b/autotests/annotationtoolbartest.cpp index ceaab201e..491068b5b 100644 --- a/autotests/annotationtoolbartest.cpp +++ b/autotests/annotationtoolbartest.cpp @@ -129,7 +129,7 @@ void AnnotationToolBarTest::testAnnotationToolBar() Okular::Settings::self()->setShellOpenFileInTabs(true); const QStringList paths = {QStringLiteral(KDESRCDIR "data/file1.pdf"), QStringLiteral(KDESRCDIR "data/file2.pdf")}; - QString serializedOptions = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString()); + QString serializedOptions = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString(), QString()); Okular::Status status = Okular::main(paths, serializedOptions); QCOMPARE(status, Okular::Success); @@ -255,7 +255,7 @@ void AnnotationToolBarTest::testAnnotationToolBarActionsEnabledState() QFETCH(QString, document); const QStringList paths = {document}; - QString serializedOptions = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString()); + QString serializedOptions = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString(), QString()); Okular::Status status = Okular::main(paths, serializedOptions); QCOMPARE(status, Okular::Success); @@ -345,7 +345,7 @@ void AnnotationToolBarTest::testAnnotationToolBarActionsEnabledState_data() void AnnotationToolBarTest::testAnnotationToolBarConfigActionsEnabledState() { const QStringList paths = {QStringLiteral(KDESRCDIR "data/file1.pdf")}; - QString serializedOptions = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString()); + QString serializedOptions = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString(), QString()); Okular::Status status = Okular::main(paths, serializedOptions); QCOMPARE(status, Okular::Success); diff --git a/autotests/mainshelltest.cpp b/autotests/mainshelltest.cpp index 860c59ea7..04f3312d1 100644 --- a/autotests/mainshelltest.cpp +++ b/autotests/mainshelltest.cpp @@ -199,11 +199,11 @@ void MainShellTest::testShell_data() file1AndToc << QStringLiteral(KDESRCDIR "data/tocreload.pdf"); const QString tocReload = QStringLiteral(KDESRCDIR "data/tocreload.pdf"); - const QString optionsPage2 = ShellUtils::serializeOptions(false, false, false, false, false, QStringLiteral("2"), QString()); - const QString optionsPage2Presentation = ShellUtils::serializeOptions(true, false, false, false, false, QStringLiteral("2"), QString()); - const QString optionsPrint = ShellUtils::serializeOptions(false, true, false, false, false, QString(), QString()); - const QString optionsUnique = ShellUtils::serializeOptions(false, false, false, true, false, QString(), QString()); - const QString optionsFind = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QStringLiteral("si:next-testing parameters!")); + const QString optionsPage2 = ShellUtils::serializeOptions(false, false, false, false, false, QStringLiteral("2"), QString(), QString()); + const QString optionsPage2Presentation = ShellUtils::serializeOptions(true, false, false, false, false, QStringLiteral("2"), QString(), QString()); + const QString optionsPrint = ShellUtils::serializeOptions(false, true, false, false, false, QString(), QString(), QString()); + const QString optionsUnique = ShellUtils::serializeOptions(false, false, false, true, false, QString(), QString(), QString()); + const QString optionsFind = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QStringLiteral("si:next-testing parameters!"), QString()); QTest::newRow("just show shell") << QStringList() << QString() << false << QString() << 0u << false << false << false << 0u << false << false << QString(); QTest::newRow("open file") << file1 << QString() << false << QString() << 0u << false << false << false << 0u << false << false << QString(); @@ -410,9 +410,9 @@ void MainShellTest::testFileRemembersPagePosition() const QStringList paths = QStringList(QStringLiteral(KDESRCDIR "data/contents.epub")); QString serializedOptions; if (mode == 1 || mode == 3) - serializedOptions = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString()); + serializedOptions = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString(), QString()); else - serializedOptions = ShellUtils::serializeOptions(false, false, false, true, false, QString(), QString()); + serializedOptions = ShellUtils::serializeOptions(false, false, false, true, false, QString(), QString(), QString()); Okular::Settings::self()->setShellOpenFileInTabs(mode == 3); @@ -460,11 +460,11 @@ void MainShellTest::test2FilesError_data() { QTest::addColumn("serializedOptions"); - QTest::newRow("startInPresentation") << ShellUtils::serializeOptions(true, false, false, false, false, QString(), QString()); - QTest::newRow("showPrintDialog") << ShellUtils::serializeOptions(false, true, false, false, false, QString(), QString()); - QTest::newRow("unique") << ShellUtils::serializeOptions(false, false, false, true, false, QString(), QString()); - QTest::newRow("pageNumber") << ShellUtils::serializeOptions(false, false, false, false, false, QStringLiteral("3"), QString()); - QTest::newRow("find") << ShellUtils::serializeOptions(false, false, false, false, false, QString(), QStringLiteral("silly")); + QTest::newRow("startInPresentation") << ShellUtils::serializeOptions(true, false, false, false, false, QString(), QString(), QString()); + QTest::newRow("showPrintDialog") << ShellUtils::serializeOptions(false, true, false, false, false, QString(), QString(), QString()); + QTest::newRow("unique") << ShellUtils::serializeOptions(false, false, false, true, false, QString(), QString(), QString()); + QTest::newRow("pageNumber") << ShellUtils::serializeOptions(false, false, false, false, false, QStringLiteral("3"), QString(), QString()); + QTest::newRow("find") << ShellUtils::serializeOptions(false, false, false, false, false, QString(), QStringLiteral("silly"), QString()); } void MainShellTest::test2FilesError() @@ -491,7 +491,7 @@ void MainShellTest::testSessionRestore_data() QStringList twoDocPaths(oneDocPaths); twoDocPaths << QStringLiteral(KDESRCDIR "data/formSamples.pdf"); - const QString options = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString()); + const QString options = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString(), QString()); QTest::newRow("1 doc, 1 window, tabs") << oneDocPaths << options << true << true; QTest::newRow("2 docs, 1 window, tabs") << twoDocPaths << options << true << true; @@ -584,7 +584,7 @@ void MainShellTest::testOpenInvalidFiles_data() QTest::addColumn>("files"); QTest::addColumn("options"); - QString options = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString()); + QString options = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString(), QString()); QUrl validFile1 = ShellUtils::urlFromArg(QStringLiteral(KDESRCDIR "data/file1.pdf"), ShellUtils::qfileExistFunc(), QString()); QUrl validFile2 = ShellUtils::urlFromArg(QStringLiteral(KDESRCDIR "data/file2.pdf"), ShellUtils::qfileExistFunc(), QString()); QUrl invalidFile = ShellUtils::urlFromArg(QStringLiteral(KDESRCDIR "data/non-existing-doc.pdf"), ShellUtils::qfileExistFunc(), QString()); @@ -640,7 +640,7 @@ void MainShellTest::testOpenInvalidFiles() void MainShellTest::testOpenTheSameFileSeveralTimes() { - QString options = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString()); + QString options = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString(), QString()); Okular::Settings::self()->setShellOpenFileInTabs(true); Okular::Status status = Okular::main(QStringList(), options); @@ -679,7 +679,7 @@ void MainShellTest::testMiddleButtonCloseUndo() { const QStringList paths = {QStringLiteral(KDESRCDIR "data/file1.pdf"), QStringLiteral(KDESRCDIR "data/file2.pdf")}; QString serializedOptions; - serializedOptions = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString()); + serializedOptions = ShellUtils::serializeOptions(false, false, false, false, false, QString(), QString(), QString()); Okular::Settings::self()->setShellOpenFileInTabs(true); Okular::Status status = Okular::main(paths, serializedOptions); diff --git a/core/document.cpp b/core/document.cpp index b6be827f1..2b44c54d0 100644 --- a/core/document.cpp +++ b/core/document.cpp @@ -2743,6 +2743,16 @@ Okular::CertificateStore *Document::certificateStore() const return d->m_generator ? d->m_generator->certificateStore() : nullptr; } +void Document::setEditorCommandOverride(const QString &editCmd) +{ + d->editorCommandOverride = editCmd; +} + +QString Document::editorCommandOverride() const +{ + return d->editorCommandOverride; +} + DocumentInfo Document::documentInfo() const { QSet keys; @@ -4215,12 +4225,15 @@ void Document::processSourceReference(const SourceReference *ref) editors = buildEditorsMap(); } - QHash::const_iterator it = editors.constFind(SettingsCore::externalEditor()); - QString p; - if (it != editors.constEnd()) - p = *it; - else - p = SettingsCore::externalEditorCommand(); + // prefer the editor from the command line + QString p = d->editorCommandOverride; + if (p.isEmpty()) { + QHash::const_iterator it = editors.constFind(SettingsCore::externalEditor()); + if (it != editors.constEnd()) + p = *it; + else + p = SettingsCore::externalEditorCommand(); + } // custom editor not yet configured if (p.isEmpty()) return; diff --git a/core/document.h b/core/document.h index ab0608916..9d4cd916f 100644 --- a/core/document.h +++ b/core/document.h @@ -1016,6 +1016,21 @@ public: */ CertificateStore *certificateStore() const; + /** sets the editor command to the command \p editCmd, as + * given at the commandline. + * + * @since 22.04 + */ + void setEditorCommandOverride(const QString &editCmd); + + /** returns the overriding editor command. + * + * If the editor command was not overriden, the string is empty. + * + * @since 22.04 + */ + QString editorCommandOverride() const; + public Q_SLOTS: /** * This slot is called whenever the user changes the @p rotation of diff --git a/core/document_p.h b/core/document_p.h index bd932db37..db0a3fe74 100644 --- a/core/document_p.h +++ b/core/document_p.h @@ -345,6 +345,9 @@ public: static QVector availableGenerators(); static QVector configurableGenerators(); static KPluginMetaData generatorForMimeType(const QMimeType &type, QWidget *widget, const QVector &triedOffers = QVector()); + + // overrides the editor command (for example with a command from the command line) + QString editorCommandOverride; }; class DocumentInfoPrivate diff --git a/part/part.cpp b/part/part.cpp index 7f514dbd9..d5747342c 100644 --- a/part/part.cpp +++ b/part/part.cpp @@ -2831,7 +2831,7 @@ void Part::checkNativeSaveDataLoss(bool *out_wontSaveForms, bool *out_wontSaveAn void Part::slotPreferences() { // Create dialog - PreferencesDialog *dialog = new PreferencesDialog(m_pageView, Okular::Settings::self(), m_embedMode); + PreferencesDialog *dialog = new PreferencesDialog(m_pageView, Okular::Settings::self(), m_embedMode, m_document->editorCommandOverride()); dialog->setAttribute(Qt::WA_DeleteOnClose); // Show it @@ -2852,7 +2852,7 @@ void Part::slotSetChangeColors(bool active) void Part::slotAccessibilityPreferences() { // Create dialog - PreferencesDialog *dialog = new PreferencesDialog(m_pageView, Okular::Settings::self(), m_embedMode); + PreferencesDialog *dialog = new PreferencesDialog(m_pageView, Okular::Settings::self(), m_embedMode, m_document->editorCommandOverride()); dialog->setAttribute(Qt::WA_DeleteOnClose); // Show it @@ -2863,7 +2863,7 @@ void Part::slotAccessibilityPreferences() void Part::slotAnnotationPreferences() { // Create dialog - PreferencesDialog *dialog = new PreferencesDialog(m_pageView, Okular::Settings::self(), m_embedMode); + PreferencesDialog *dialog = new PreferencesDialog(m_pageView, Okular::Settings::self(), m_embedMode, m_document->editorCommandOverride()); dialog->setAttribute(Qt::WA_DeleteOnClose); // Show it @@ -3672,6 +3672,11 @@ void Part::enableStartWithFind(const QString &text) m_textToFindOnOpen = QString(text); } +void Part::setEditorCmd(const QString &editorCmd) +{ + m_document->setEditorCommandOverride(editorCmd); +} + void Part::slotOpenContainingFolder() { KIO::highlightInFileManager({QUrl(localFilePath())}); diff --git a/part/part.h b/part/part.h index 0a7f81e49..63e257da1 100644 --- a/part/part.h +++ b/part/part.h @@ -170,6 +170,7 @@ public Q_SLOTS: // dbus Q_SCRIPTABLE Q_NOREPLY void enableStartWithPrint(); Q_SCRIPTABLE Q_NOREPLY void enableExitAfterPrint(); Q_SCRIPTABLE Q_NOREPLY void enableStartWithFind(const QString &text); + Q_SCRIPTABLE Q_NOREPLY void setEditorCmd(const QString &editorCmd); Q_SCRIPTABLE void slotOpenContainingFolder(); Q_SIGNALS: diff --git a/part/preferencesdialog.cpp b/part/preferencesdialog.cpp index 217b62479..504870f44 100644 --- a/part/preferencesdialog.cpp +++ b/part/preferencesdialog.cpp @@ -18,7 +18,9 @@ #include "dlgperformance.h" #include "dlgpresentation.h" -PreferencesDialog::PreferencesDialog(QWidget *parent, KConfigSkeleton *skeleton, Okular::EmbedMode embedMode) +#include + +PreferencesDialog::PreferencesDialog(QWidget *parent, KConfigSkeleton *skeleton, Okular::EmbedMode embedMode, const QString &editCmd) : KConfigDialog(parent, QStringLiteral("preferences"), skeleton) { setWindowModality(Qt::ApplicationModal); @@ -44,10 +46,18 @@ PreferencesDialog::PreferencesDialog(QWidget *parent, KConfigSkeleton *skeleton, } else { m_presentation = new DlgPresentation(this); m_annotations = new DlgAnnotations(this); - m_editor = new DlgEditor(this); addPage(m_presentation, i18n("Presentation"), QStringLiteral("view-presentation"), i18n("Options for Presentation Mode")); m_annotationsPage = addPage(m_annotations, i18n("Annotations"), QStringLiteral("draw-freehand"), i18n("Annotation Options")); - addPage(m_editor, i18n("Editor"), QStringLiteral("accessories-text-editor"), i18n("Editor Options")); + if (editCmd.isEmpty()) { + m_editor = new DlgEditor(this); + addPage(m_editor, i18n("Editor"), QStringLiteral("accessories-text-editor"), i18n("Editor Options")); + } else { + QString editStr = i18nc("Give the user a hint, that it enabled the option --editor-cmd together with the current value of the option.", + "The editor was set by the command line to \n %1 \nIf you want to use the setting, start okular without the option --editor-cmd", + editCmd); + auto m_editor = new QLabel(editStr, this); + addPage(m_editor, i18n("Editor"), QStringLiteral("accessories-text-editor"), i18n("Editor Options")); + } } #ifdef OKULAR_DEBUG_CONFIGPAGE addPage(m_debug, "Debug", "system-run", "Debug options"); diff --git a/part/preferencesdialog.h b/part/preferencesdialog.h index bc57a04f7..896a478e3 100644 --- a/part/preferencesdialog.h +++ b/part/preferencesdialog.h @@ -28,7 +28,7 @@ class PreferencesDialog : public KConfigDialog Q_OBJECT public: - PreferencesDialog(QWidget *parent, KConfigSkeleton *skeleton, Okular::EmbedMode embedMode); + PreferencesDialog(QWidget *parent, KConfigSkeleton *skeleton, Okular::EmbedMode embedMode, const QString &editCmd); void switchToAccessibilityPage(); void switchToAnnotationsPage(); diff --git a/shell/main.cpp b/shell/main.cpp index c75c810f7..0777196c1 100644 --- a/shell/main.cpp +++ b/shell/main.cpp @@ -75,6 +75,7 @@ int main(int argc, char **argv) parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("unique"), i18n("\"Unique instance\" control"))); parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("noraise"), i18n("Not raise window"))); parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("find"), i18n("Find a string on the text"), QStringLiteral("string"))); + parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("editor-cmd"), i18n("sets the external editor command"), QStringLiteral("string"))); parser.addPositionalArgument(QStringLiteral("urls"), i18n("Documents to open. Specify '-' to read from stdin.")); parser.process(app); diff --git a/shell/okular_main.cpp b/shell/okular_main.cpp index ffcbba7ef..0a0b9c415 100644 --- a/shell/okular_main.cpp +++ b/shell/okular_main.cpp @@ -19,6 +19,8 @@ #include #include +#include + static bool attachUniqueInstance(const QStringList &paths, const QString &serializedOptions) { if (!ShellUtils::unique(serializedOptions) || paths.count() != 1) @@ -28,6 +30,13 @@ static bool attachUniqueInstance(const QStringList &paths, const QString &serial if (!iface.isValid()) return false; + if (!ShellUtils::editorCmd(serializedOptions).isEmpty()) { + QString message = + i18n("You cannot set the editor command in an already running okular instance. Please disable the tabs and try again. Please note, that unique is also not supported when setting the editor command at the commandline.\n"); + std::cerr << message.toStdString(); + exit(1); + } + const QString page = ShellUtils::page(serializedOptions); iface.call(QStringLiteral("openDocument"), ShellUtils::urlFromArg(paths[0], ShellUtils::qfileExistFunc(), page).url(), serializedOptions); if (!ShellUtils::noRaise(serializedOptions)) { @@ -111,6 +120,13 @@ static bool attachExistingInstance(const QStringList &paths, const QString &seri return false; } + if (!ShellUtils::editorCmd(serializedOptions).isEmpty()) { + QString message( + i18n("You cannot set the editor command in an already running okular instance. Please disable the tabs and try again. Please note, that unique is also not supported when setting the editor command at the commandline.\n")); + std::cerr << message.toStdString(); + exit(1); + } + bestService->call(QStringLiteral("tryRaise")); return true; @@ -149,6 +165,7 @@ Status main(const QStringList &paths, const QString &serializedOptions) stream << i18n("Error: Can't open more than one document with the --find switch") << endl; return Error; } + // try to attach to existing session, unique or not if (attachUniqueInstance(paths, serializedOptions) || attachExistingInstance(paths, serializedOptions)) { return AttachedOtherProcess; diff --git a/shell/shell.cpp b/shell/shell.cpp index 862b6d4ae..5a0badf0a 100644 --- a/shell/shell.cpp +++ b/shell/shell.cpp @@ -138,6 +138,13 @@ Shell::Shell(const QString &serializedOptions) setAttribute(Qt::WA_ShowWithoutActivating); } + { + const QString editorCmd = ShellUtils::editorCmd(serializedOptions); + if (!editorCmd.isEmpty()) { + QMetaObject::invokeMethod(firstPart, "setEditorCmd", Q_ARG(QString, editorCmd)); + } + } + QDBusConnection::sessionBus().registerObject(QStringLiteral("/okularshell"), this, QDBusConnection::ExportScriptableSlots); } else { m_isValid = false; diff --git a/shell/shellutils.cpp b/shell/shellutils.cpp index 19796e0fa..07b7e00f8 100644 --- a/shell/shellutils.cpp +++ b/shell/shellutils.cpp @@ -58,20 +58,27 @@ QString serializeOptions(const QCommandLineParser &args) const bool noRaise = args.isSet(QStringLiteral("noraise")); const QString page = args.value(QStringLiteral("page")); const QString find = args.value(QStringLiteral("find")); + const QString editorCmd = args.value(QStringLiteral("editor-cmd")); - return serializeOptions(startInPresentation, showPrintDialog, showPrintDialogAndExit, unique, noRaise, page, find); + return serializeOptions(startInPresentation, showPrintDialog, showPrintDialogAndExit, unique, noRaise, page, find, editorCmd); } -QString serializeOptions(bool startInPresentation, bool showPrintDialog, bool showPrintDialogAndExit, bool unique, bool noRaise, const QString &page, const QString &find) +QString serializeOptions(bool startInPresentation, bool showPrintDialog, bool showPrintDialogAndExit, bool unique, bool noRaise, const QString &page, const QString &find, const QString &editorCmd) { - return QStringLiteral("%1:%2:%3:%4:%5:%6:%7").arg(startInPresentation).arg(showPrintDialog).arg(showPrintDialogAndExit).arg(unique).arg(noRaise).arg(page, QString::fromLatin1(find.toUtf8().toBase64())); + return QStringLiteral("%1:%2:%3:%4:%5:%6:%7:%8") + .arg(startInPresentation) + .arg(showPrintDialog) + .arg(showPrintDialogAndExit) + .arg(unique) + .arg(noRaise) + .arg(page, QString::fromLatin1(find.toUtf8().toBase64()), QString::fromLatin1(editorCmd.toUtf8().toBase64())); } -bool unserializeOptions(const QString &serializedOptions, bool *presentation, bool *print, bool *print_and_exit, bool *unique, bool *noraise, QString *page, QString *find) +static bool unserializeOptions(const QString &serializedOptions, bool *presentation, bool *print, bool *print_and_exit, bool *unique, bool *noraise, QString *page, QString *find, QString *editorCmd) { const QStringList args = serializedOptions.split(QStringLiteral(":")); - if (args.count() == 7) { + if (args.count() >= 8) { *presentation = args[0] == QLatin1String("1"); *print = args[1] == QLatin1String("1"); *print_and_exit = args[2] == QLatin1String("1"); @@ -79,6 +86,7 @@ bool unserializeOptions(const QString &serializedOptions, bool *presentation, bo *noraise = args[4] == QLatin1String("1"); *page = args[5]; *find = args[6]; + *editorCmd = args[7]; return true; } return false; @@ -88,42 +96,42 @@ bool startInPresentation(const QString &serializedOptions) { bool result, dummy; QString dummyString; - return unserializeOptions(serializedOptions, &result, &dummy, &dummy, &dummy, &dummy, &dummyString, &dummyString) && result; + return unserializeOptions(serializedOptions, &result, &dummy, &dummy, &dummy, &dummy, &dummyString, &dummyString, &dummyString) && result; } bool showPrintDialog(const QString &serializedOptions) { bool result, dummy; QString dummyString; - return unserializeOptions(serializedOptions, &dummy, &result, &dummy, &dummy, &dummy, &dummyString, &dummyString) && result; + return unserializeOptions(serializedOptions, &dummy, &result, &dummy, &dummy, &dummy, &dummyString, &dummyString, &dummyString) && result; } bool showPrintDialogAndExit(const QString &serializedOptions) { bool result, dummy; QString dummyString; - return unserializeOptions(serializedOptions, &dummy, &dummy, &result, &dummy, &dummy, &dummyString, &dummyString) && result; + return unserializeOptions(serializedOptions, &dummy, &dummy, &result, &dummy, &dummy, &dummyString, &dummyString, &dummyString) && result; } bool unique(const QString &serializedOptions) { bool result, dummy; QString dummyString; - return unserializeOptions(serializedOptions, &dummy, &dummy, &dummy, &result, &dummy, &dummyString, &dummyString) && result; + return unserializeOptions(serializedOptions, &dummy, &dummy, &dummy, &result, &dummy, &dummyString, &dummyString, &dummyString) && result; } bool noRaise(const QString &serializedOptions) { bool result, dummy; QString dummyString; - return unserializeOptions(serializedOptions, &dummy, &dummy, &dummy, &dummy, &result, &dummyString, &dummyString) && result; + return unserializeOptions(serializedOptions, &dummy, &dummy, &dummy, &dummy, &result, &dummyString, &dummyString, &dummyString) && result; } QString page(const QString &serializedOptions) { QString result, dummyString; bool dummy; - unserializeOptions(serializedOptions, &dummy, &dummy, &dummy, &dummy, &dummy, &result, &dummyString); + unserializeOptions(serializedOptions, &dummy, &dummy, &dummy, &dummy, &dummy, &result, &dummyString, &dummyString); return result; } @@ -131,8 +139,15 @@ QString find(const QString &serializedOptions) { QString result, dummyString; bool dummy; - unserializeOptions(serializedOptions, &dummy, &dummy, &dummy, &dummy, &dummy, &dummyString, &result); + unserializeOptions(serializedOptions, &dummy, &dummy, &dummy, &dummy, &dummy, &dummyString, &result, &dummyString); return QString::fromUtf8(QByteArray::fromBase64(result.toLatin1())); } +QString editorCmd(const QString &serializedOptions) +{ + QString result, dummyString; + bool dummy; + unserializeOptions(serializedOptions, &dummy, &dummy, &dummy, &dummy, &dummy, &dummyString, &dummyString, &result); + return QString::fromUtf8(QByteArray::fromBase64(result.toLatin1())); +} } diff --git a/shell/shellutils.h b/shell/shellutils.h index 68252ca1f..0fb7394d8 100644 --- a/shell/shellutils.h +++ b/shell/shellutils.h @@ -20,8 +20,7 @@ typedef bool (*FileExistFunc)(const QString &fileName); FileExistFunc qfileExistFunc(); QUrl urlFromArg(const QString &_arg, FileExistFunc exist_func, const QString &pageArg = QString()); QString serializeOptions(const QCommandLineParser &args); -QString serializeOptions(bool startInPresentation, bool showPrintDialog, bool showPrintDialogAndExit, bool unique, bool noRaise, const QString &page, const QString &find); -bool unserializeOptions(const QString &serializedOptions, bool *presentation, bool *print, bool *print_and_exit, bool *unique, bool *noraise, QString *page); +QString serializeOptions(bool startInPresentation, bool showPrintDialog, bool showPrintDialogAndExit, bool unique, bool noRaise, const QString &page, const QString &find, const QString &editorCmd); bool unique(const QString &serializedOptions); bool noRaise(const QString &serializedOptions); bool startInPresentation(const QString &serializedOptions); @@ -29,6 +28,7 @@ bool showPrintDialog(const QString &serializedOptions); bool showPrintDialogAndExit(const QString &serializedOptions); QString page(const QString &serializedOptions); QString find(const QString &serializedOptions); +QString editorCmd(const QString &serializedOptions); }