[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.4' - 2 commits - desktop/qa desktop/source sd/qa
Tomaž Vajngerl (via logerrit)
logerrit at kemper.freedesktop.org
Mon Aug 10 21:08:33 UTC 2020
desktop/qa/data/BlankDrawDocument.odg |binary
desktop/qa/desktop_lib/test_desktop_lib.cxx | 68 +++++++++++++++++++++++++++
desktop/source/lib/init.cxx | 52 ++++++++++++++++++++
sd/qa/unit/tiledrendering/data/dummy.odg |binary
sd/qa/unit/tiledrendering/tiledrendering.cxx | 56 +++++++++++++++++++++-
5 files changed, 172 insertions(+), 4 deletions(-)
New commits:
commit 68e5ff123e7bca884fcf23cf9f69422eb41fa0f7
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Jul 26 21:58:33 2020 +0200
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Mon Aug 10 23:08:14 2020 +0200
allow to .uno:Save a PDF doc - divert to SaveAs to the doc. file
To save PDF annotations, we need to allow a .uno:Save if the
document was opened from a PDF file. When we get a .uno:Save
command, we need to divert that to SaveAs into the same file as
the current document was opened with.
Change-Id: I0c511c4e5501de03ea8b0efb5aaf37cd09936e6e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99463
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
(cherry picked from commit 6f55a64f002d80a19201e2a9b0171725fb71a7fb)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99883
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 906d3c4c6baa..fdd92d2d3430 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -105,6 +105,8 @@
#include <editeng/flstitem.hxx>
#include <sfx2/app.hxx>
#include <sfx2/objsh.hxx>
+#include <sfx2/docfilt.hxx>
+#include <sfx2/docfile.hxx>
#include <sfx2/viewsh.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/msgpool.hxx>
@@ -721,6 +723,28 @@ std::string extractPrivateKey(const std::string & privateKey)
return privateKey.substr(pos1, pos2);
}
+OUString lcl_getCurrentDocumentMimeType(LibLODocument_Impl* pDocument)
+{
+ OUString aMimeType;
+ SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(pDocument->mxComponent.get());
+ if (!pBaseModel)
+ return aMimeType;
+
+ SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell();
+ if (!pObjectShell)
+ return aMimeType;
+
+ SfxMedium* pMedium = pObjectShell->GetMedium();
+ if (!pMedium)
+ return aMimeType;
+
+ auto pFilter = pMedium->GetFilter();
+ if (!pFilter)
+ return aMimeType;
+
+ return pFilter->GetMimeType();
+}
+
// Gets an undo manager to enter and exit undo context. Needed by ToggleOrientation
css::uno::Reference< css::document::XUndoManager > getUndoManager( const css::uno::Reference< css::frame::XFrame >& rxFrame )
{
@@ -2463,6 +2487,9 @@ static int doc_saveAs(LibreOfficeKitDocument* pThis, const char* sUrl, const cha
OUString sFormat = getUString(pFormat);
OUString aURL(getAbsoluteURL(sUrl));
+
+ uno::Reference<frame::XStorable> xStorable(pDocument->mxComponent, uno::UNO_QUERY_THROW);
+
if (aURL.isEmpty())
{
SetLastExceptionMsg("Filename to save to was not provided.");
@@ -2603,7 +2630,6 @@ static int doc_saveAs(LibreOfficeKitDocument* pThis, const char* sUrl, const cha
aSaveMediaDescriptor[MediaDescriptor::PROP_INTERACTIONHANDLER()] <<= xInteraction;
}
- uno::Reference<frame::XStorable> xStorable(pDocument->mxComponent, uno::UNO_QUERY_THROW);
if (bTakeOwnership)
xStorable->storeAsURL(aURL, aSaveMediaDescriptor.getAsConstPropertyValueList());
@@ -3785,6 +3811,30 @@ static void doc_postUnoCommand(LibreOfficeKitDocument* pThis, const char* pComma
// handle potential interaction
if (gImpl && aCommand == ".uno:Save")
{
+ // Check if saving a PDF file
+ OUString aMimeType = lcl_getCurrentDocumentMimeType(pDocument);
+ if (aMimeType == "application/pdf")
+ {
+ // If we have a PDF file (for saving annotations for example), we need
+ // to run save-as to the same file as the opened document. Plain save
+ // doesn't work as the PDF is not a "native" format.
+ uno::Reference<frame::XStorable> xStorable(pDocument->mxComponent, uno::UNO_QUERY_THROW);
+ OUString aURL = xStorable->getLocation();
+ OString aURLUtf8 = OUStringToOString(aURL, RTL_TEXTENCODING_UTF8);
+ bool bResult = doc_saveAs(pThis, aURLUtf8.getStr(), "pdf", nullptr);
+
+ // Send the result of save
+ boost::property_tree::ptree aTree;
+ aTree.put("commandName", pCommand);
+ aTree.put("success", bResult);
+ std::stringstream aStream;
+ boost::property_tree::write_json(aStream, aTree);
+ OString aPayload = aStream.str().c_str();
+ pDocument->mpCallbackFlushHandlers[nView]->queue(LOK_CALLBACK_UNO_COMMAND_RESULT, aPayload.getStr());
+ return;
+ }
+
+
rtl::Reference<LOKInteractionHandler> const pInteraction(
new LOKInteractionHandler("save", gImpl, pDocument));
uno::Reference<task::XInteractionHandler2> const xInteraction(pInteraction.get());
commit b4d0b45ba6bce22501fbd623ac2ebf5da29ee356
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sat Jul 11 21:18:34 2020 +0200
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Mon Aug 10 23:07:59 2020 +0200
add test for editing of annotations (using .uno:EditAnnotation)
Change-Id: Ic798ab94bb63a3ae80882e77cf1582d875e27d4b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98583
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
(cherry picked from commit fbecbb6872db7c40c8d632955589223a6c456475)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99882
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
diff --git a/desktop/qa/data/BlankDrawDocument.odg b/desktop/qa/data/BlankDrawDocument.odg
new file mode 100644
index 000000000000..19ae49d63b36
Binary files /dev/null and b/desktop/qa/data/BlankDrawDocument.odg differ
diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx
index 864041b71d49..7acb50499ae9 100644
--- a/desktop/qa/desktop_lib/test_desktop_lib.cxx
+++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx
@@ -55,6 +55,7 @@
#include <ostream>
#include <config_features.h>
#include <config_mpl.h>
+#include <tools/json_writer.hxx>
#include <lib/init.hxx>
#include <svx/svxids.hrc>
@@ -206,6 +207,7 @@ public:
void testCommentsCalc();
void testCommentsImpress();
void testCommentsCallbacksWriter();
+ void testCommentsAddEditDeleteDraw();
void testRunMacro();
void testExtractParameter();
void testGetSignatureState_NonSigned();
@@ -265,6 +267,7 @@ public:
CPPUNIT_TEST(testCommentsCalc);
CPPUNIT_TEST(testCommentsImpress);
CPPUNIT_TEST(testCommentsCallbacksWriter);
+ CPPUNIT_TEST(testCommentsAddEditDeleteDraw);
CPPUNIT_TEST(testRunMacro);
CPPUNIT_TEST(testExtractParameter);
CPPUNIT_TEST(testGetSignatureState_Signed);
@@ -2346,6 +2349,71 @@ void DesktopLOKTest::testCommentsCallbacksWriter()
CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(5), aTree.get_child("comments").size());
}
+namespace
+{
+
+void addParameter(tools::JsonWriter& rJson, const char* sName, OString const & type, OString const & value)
+{
+ auto testNode = rJson.startNode(sName);
+ rJson.put("type", type);
+ rJson.put("value", value);
+}
+
+}
+
+void DesktopLOKTest::testCommentsAddEditDeleteDraw()
+{
+ // Comments callback are emitted only if tiled annotations are off
+ comphelper::LibreOfficeKit::setTiledAnnotations(false);
+ LibLODocument_Impl* pDocument = loadDoc("BlankDrawDocument.odg");
+ pDocument->m_pDocumentClass->initializeForRendering(pDocument, "{}");
+ ViewCallback aView1(pDocument);
+
+ // Add a new comment
+ OString aCommandArgs;
+ {
+ tools::JsonWriter aJson;
+ addParameter(aJson, "Text", "string", "Comment");
+ addParameter(aJson, "Author", "string", "LOK User1");
+ aCommandArgs = aJson.extractAsOString();
+ }
+
+ pDocument->pClass->postUnoCommand(pDocument, ".uno:InsertAnnotation", aCommandArgs.getStr(), false);
+ Scheduler::ProcessEventsToIdle();
+
+ // We received a LOK_CALLBACK_COMMENT callback with comment 'Add' action
+ CPPUNIT_ASSERT_EQUAL(std::string("Add"), aView1.m_aCommentCallbackResult.get<std::string>("action"));
+ int nCommentId1 = aView1.m_aCommentCallbackResult.get<int>("id");
+
+ // Edit the previously added comment
+ {
+ tools::JsonWriter aJson;
+ addParameter(aJson, "Id", "string", OString::number(nCommentId1));
+ addParameter(aJson, "Text", "string", "Edited comment");
+ aCommandArgs = aJson.extractAsOString();
+ }
+
+ pDocument->pClass->postUnoCommand(pDocument, ".uno:EditAnnotation", aCommandArgs.getStr(), false);
+ Scheduler::ProcessEventsToIdle();
+
+ // We received a LOK_CALLBACK_COMMENT callback with comment 'Modify' action
+ CPPUNIT_ASSERT_EQUAL(std::string("Modify"), aView1.m_aCommentCallbackResult.get<std::string>("action"));
+ CPPUNIT_ASSERT_EQUAL(nCommentId1, aView1.m_aCommentCallbackResult.get<int>("id"));
+
+ // Delete Comment
+ {
+ tools::JsonWriter aJson;
+ addParameter(aJson, "Id", "string", OString::number(nCommentId1));
+ aCommandArgs = aJson.extractAsOString();
+ }
+ pDocument->pClass->postUnoCommand(pDocument, ".uno:DeleteAnnotation", aCommandArgs.getStr(), false);
+ Scheduler::ProcessEventsToIdle();
+
+ // We received a LOK_CALLBACK_COMMENT callback with comment 'Remove' action
+ CPPUNIT_ASSERT_EQUAL(std::string("Remove"), aView1.m_aCommentCallbackResult.get<std::string>("action"));
+ CPPUNIT_ASSERT_EQUAL(nCommentId1, aView1.m_aCommentCallbackResult.get<int>("id"));
+}
+
void DesktopLOKTest::testRunMacro()
{
LibLibreOffice_Impl aOffice;
diff --git a/sd/qa/unit/tiledrendering/data/dummy.odg b/sd/qa/unit/tiledrendering/data/dummy.odg
new file mode 100644
index 000000000000..19ae49d63b36
Binary files /dev/null and b/sd/qa/unit/tiledrendering/data/dummy.odg differ
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index b6090961ebb7..d7c2719e105a 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -110,7 +110,8 @@ public:
void testTdf81754();
void testTdf105502();
void testCommentCallbacks();
- void testCommentChange();
+ void testCommentChangeImpress();
+ void testCommentChangeDraw();
void testMultiViewInsertDeletePage();
void testDisableUndoRepair();
void testDocumentRepair();
@@ -160,7 +161,8 @@ public:
CPPUNIT_TEST(testTdf81754);
CPPUNIT_TEST(testTdf105502);
CPPUNIT_TEST(testCommentCallbacks);
- CPPUNIT_TEST(testCommentChange);
+ CPPUNIT_TEST(testCommentChangeImpress);
+ CPPUNIT_TEST(testCommentChangeDraw);
CPPUNIT_TEST(testMultiViewInsertDeletePage);
CPPUNIT_TEST(testDisableUndoRepair);
CPPUNIT_TEST(testDocumentRepair);
@@ -1781,7 +1783,7 @@ void SdTiledRenderingTest::testCommentCallbacks()
comphelper::LibreOfficeKit::setTiledAnnotations(true);
}
-void SdTiledRenderingTest::testCommentChange()
+void SdTiledRenderingTest::testCommentChangeImpress()
{
uno::Sequence<beans::PropertyValue> aArgs;
@@ -1829,6 +1831,54 @@ void SdTiledRenderingTest::testCommentChange()
comphelper::LibreOfficeKit::setTiledAnnotations(true);
}
+void SdTiledRenderingTest::testCommentChangeDraw()
+{
+ uno::Sequence<beans::PropertyValue> aArgs;
+
+ // Load the document.
+ // Set the tiled annotations off
+ comphelper::LibreOfficeKit::setTiledAnnotations(false);
+
+ createDoc("dummy.odg", comphelper::InitPropertySequence(
+ {
+ {".uno:Author", uno::makeAny(OUString("LOK User1"))},
+ }));
+
+ ViewCallback aView1;
+
+ // Add a new comment
+ aArgs = comphelper::InitPropertySequence(
+ {
+ {"Text", uno::makeAny(OUString("Comment"))},
+ });
+ comphelper::dispatchCommand(".uno:InsertAnnotation", aArgs);
+ Scheduler::ProcessEventsToIdle();
+
+ CPPUNIT_ASSERT_EQUAL(std::string("Add"), aView1.m_aCommentCallbackResult.get<std::string>("action"));
+
+ int nComment1 = aView1.m_aCommentCallbackResult.get<int>("id");
+
+ CPPUNIT_ASSERT(!aView1.m_aCommentCallbackResult.get<std::string>("parthash").empty());
+ CPPUNIT_ASSERT_EQUAL(std::string("Comment"), aView1.m_aCommentCallbackResult.get<std::string>("text"));
+ CPPUNIT_ASSERT_EQUAL(std::string("0, 0, 0, 0"), aView1.m_aCommentCallbackResult.get<std::string>("rectangle"));
+
+ // Edit this annotation now
+ aArgs = comphelper::InitPropertySequence(
+ {
+ {"Id", uno::makeAny(OUString::number(nComment1))},
+ {"PositionX", uno::makeAny(sal_Int32(10))},
+ {"PositionY", uno::makeAny(sal_Int32(20))}
+ });
+ comphelper::dispatchCommand(".uno:EditAnnotation", aArgs);
+ Scheduler::ProcessEventsToIdle();
+
+ CPPUNIT_ASSERT_EQUAL(std::string("Modify"), aView1.m_aCommentCallbackResult.get<std::string>("action"));
+ CPPUNIT_ASSERT_EQUAL(std::string("Comment"), aView1.m_aCommentCallbackResult.get<std::string>("text"));
+ CPPUNIT_ASSERT_EQUAL(std::string("10, 20, 0, 0"), aView1.m_aCommentCallbackResult.get<std::string>("rectangle"));
+
+ comphelper::LibreOfficeKit::setTiledAnnotations(true);
+}
+
void SdTiledRenderingTest::testMultiViewInsertDeletePage()
{
// Load the document.
More information about the Libreoffice-commits
mailing list