diff --git a/core/action.h b/core/action.h index c17c306b5..91f1a13ec 100644 --- a/core/action.h +++ b/core/action.h @@ -293,7 +293,8 @@ public: Find = 10, ///< Open find dialog GoToPage = 11, ///< Goto page Close = 12, ///< Close document - Print = 13 ///< Print the document @since 22.04 + Print = 13, ///< Print the document @since 22.04 + SaveAs = 14 ///< SaveAs the document @since 22.04 }; /** diff --git a/core/document.cpp b/core/document.cpp index b0ea154b2..ecb4b6c85 100644 --- a/core/document.cpp +++ b/core/document.cpp @@ -4018,6 +4018,9 @@ void Document::processAction(const Action *action) case DocumentAction::Print: emit requestPrint(); break; + case DocumentAction::SaveAs: + emit requestSaveAs(); + break; } } break; diff --git a/core/document.h b/core/document.h index 3de35c8ad..6cb2d7f8f 100644 --- a/core/document.h +++ b/core/document.h @@ -1133,6 +1133,13 @@ Q_SIGNALS: */ void requestPrint(); + /** + * This signal is emitted whenever an action requests a + * document save as operation. + * @since 22.04 + */ + void requestSaveAs(); + /** * This signal is emitted whenever an action requests an * application quit operation. diff --git a/generators/poppler/CMakeLists.txt b/generators/poppler/CMakeLists.txt index 23efdd06b..87e3e2152 100644 --- a/generators/poppler/CMakeLists.txt +++ b/generators/poppler/CMakeLists.txt @@ -66,6 +66,15 @@ int main() } " HAVE_POPPLER_22_02) +check_cxx_source_compiles(" +#include +#include +int main() +{ + (void)Poppler::LinkAction::SaveAs; +} +" HAVE_POPPLER_22_04) + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config-okular-poppler.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-okular-poppler.h diff --git a/generators/poppler/config-okular-poppler.h.cmake b/generators/poppler/config-okular-poppler.h.cmake index 24c165f5f..39f4ef1f3 100644 --- a/generators/poppler/config-okular-poppler.h.cmake +++ b/generators/poppler/config-okular-poppler.h.cmake @@ -15,3 +15,6 @@ /* Defined if we have the 22.02 version of the Poppler library or later */ #cmakedefine HAVE_POPPLER_22_02 1 + +/* Defined if we have the 22.04 version of the Poppler library or later */ +#cmakedefine HAVE_POPPLER_22_04 1 diff --git a/generators/poppler/generator_pdf.cpp b/generators/poppler/generator_pdf.cpp index 7ba5a0c9e..246d603d3 100644 --- a/generators/poppler/generator_pdf.cpp +++ b/generators/poppler/generator_pdf.cpp @@ -367,6 +367,10 @@ static Okular::DocumentAction::DocumentActionType popplerToOkular(Poppler::LinkA return Okular::DocumentAction::Close; case Poppler::LinkAction::Print: return Okular::DocumentAction::Print; +#ifdef HAVE_POPPLER_22_04 + case Poppler::LinkAction::SaveAs: + return Okular::DocumentAction::SaveAs; +#endif } qWarning() << "Unsupported Poppler::LinkAction::ActionType" << pat; diff --git a/part/part.cpp b/part/part.cpp index be3a97906..900c4b408 100644 --- a/part/part.cpp +++ b/part/part.cpp @@ -360,6 +360,7 @@ Part::Part(QWidget *parentWidget, QObject *parent, const QVariantList &args) connect(m_document->bookmarkManager(), &BookmarkManager::openUrl, this, &Part::openUrlFromBookmarks); connect(m_document, &Document::close, this, &Part::close); connect(m_document, &Document::requestPrint, this, &Part::slotPrint); + connect(m_document, &Document::requestSaveAs, this, [this] { slotSaveFileAs(); }); connect(m_document, &Document::undoHistoryCleanChanged, this, [this](bool clean) { setModified(!clean); setWindowTitleFromDocument();