desktop/qa/desktop_lib/test_desktop_lib.cxx | 43 +++++++++++++++++++++++++++- desktop/source/lib/init.cxx | 3 + sfx2/source/control/bindings.cxx | 4 +- sfx2/source/control/unoctitm.cxx | 3 + 4 files changed, 49 insertions(+), 4 deletions(-)
New commits: commit cdf08b3aa74bb32ea18b583a9c0c41b91d7819ac Author: Miklos Vajna <[email protected]> Date: Tue Jan 19 16:30:59 2016 +0100 CppunitTest_desktop_lib: add ModifiedStatus callback testcase Change-Id: Ieb7e808ebc7619c3a4a013cad776eeefd6163e22 diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx index d55ae37..75b4f64 100644 --- a/desktop/qa/desktop_lib/test_desktop_lib.cxx +++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx @@ -15,6 +15,7 @@ #include <com/sun/star/awt/XReschedule.hpp> #include <com/sun/star/awt/Toolkit.hpp> #include <com/sun/star/drawing/XDrawPageSupplier.hpp> +#include <com/sun/star/util/XModifiable.hpp> #include <boost/property_tree/json_parser.hpp> #include <comphelper/processfactory.hxx> #include <sfx2/objsh.hxx> @@ -39,7 +40,8 @@ class DesktopLOKTest : public UnoApiTest public: DesktopLOKTest() : UnoApiTest("/desktop/qa/data/"), m_nSelectionBeforeSearchResult(0), - m_nSelectionAfterSearchResult(0) + m_nSelectionAfterSearchResult(0), + m_bModified(false) { } @@ -80,6 +82,7 @@ public: void testCellCursor(); void testCommandResult(); void testWriterComments(); + void testModifiedStatus(); CPPUNIT_TEST_SUITE(DesktopLOKTest); CPPUNIT_TEST(testGetStyles); @@ -98,6 +101,7 @@ public: CPPUNIT_TEST(testCellCursor); CPPUNIT_TEST(testCommandResult); CPPUNIT_TEST(testWriterComments); + CPPUNIT_TEST(testModifiedStatus); CPPUNIT_TEST_SUITE_END(); uno::Reference<lang::XComponent> mxComponent; @@ -110,6 +114,10 @@ public: // for testCommandResult osl::Condition m_aCommandResultCondition; OString m_aCommandResult; + + // for testModifiedStatus + osl::Condition m_aStateChangedCondition; + bool m_bModified; }; LibLODocument_Impl* DesktopLOKTest::loadDoc(const char* pName, LibreOfficeKitDocumentType eType) @@ -183,6 +191,17 @@ void DesktopLOKTest::callbackImpl(int nType, const char* pPayload) m_aCommandResultCondition.set(); } break; + case LOK_CALLBACK_STATE_CHANGED: + { + OString aPayload(pPayload); + OString aPrefix(".uno:ModifiedStatus="); + if (aPayload.startsWith(aPrefix)) + { + m_bModified = aPayload.copy(aPrefix.getLength()).toBoolean(); + m_aStateChangedCondition.set(); + } + } + break; } } @@ -600,6 +619,28 @@ void DesktopLOKTest::testWriterComments() comphelper::LibreOfficeKit::setActive(false); } +void DesktopLOKTest::testModifiedStatus() +{ + LibLibreOffice_Impl aOffice; + comphelper::LibreOfficeKit::setActive(); + LibLODocument_Impl* pDocument = loadDoc("blank_text.odt"); + pDocument->pClass->initializeForRendering(pDocument, nullptr); + pDocument->pClass->registerCallback(pDocument, &DesktopLOKTest::callback, this); + + // Set the document as modified. + m_aStateChangedCondition.reset(); + uno::Reference<util::XModifiable> xModifiable(mxComponent, uno::UNO_QUERY); + xModifiable->setModified(true); + TimeValue aTimeValue = { 2 , 0 }; // 2 seconds max + m_aStateChangedCondition.wait(aTimeValue); + Scheduler::ProcessEventsToIdle(); + + // This was false, there was no callback about the modified status change. + CPPUNIT_ASSERT(m_bModified); + + comphelper::LibreOfficeKit::setActive(false); +} + CPPUNIT_TEST_SUITE_REGISTRATION(DesktopLOKTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sfx2/source/control/bindings.cxx b/sfx2/source/control/bindings.cxx index aa62415..9e679b7 100644 --- a/sfx2/source/control/bindings.cxx +++ b/sfx2/source/control/bindings.cxx @@ -1587,7 +1587,9 @@ bool SfxBindings::NextJob_Impl(Timer * pTimer) } // if possible Update all server / happens in its own time slice - if ( pImp->bMsgDirty ) + // but process all events at once when unit testing, for reliability reasons + static bool bTest = getenv("LO_TESTNAME"); + if ( pImp->bMsgDirty && !bTest ) { UpdateSlotServer_Impl(); return false; commit abbfbb4d35d6fa9edbb8f331a9d9503183eb0356 Author: Miklos Vajna <[email protected]> Date: Tue Jan 19 15:18:52 2016 +0100 LOK: include ModifiedStatus in CALLBACK_STATE_CHANGED Change-Id: Ic44a9266a67bfad8b0490a8acb4a419af99ea42c diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index f8d6a6c..d2b4f60 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -684,7 +684,8 @@ static void doc_iniUnoCommands () OUString(".uno:SuperScript"), OUString(".uno:Strikeout"), OUString(".uno:StyleApply"), - OUString(".uno:Underline") + OUString(".uno:Underline"), + OUString(".uno:ModifiedStatus") }; util::URL aCommandURL; diff --git a/sfx2/source/control/unoctitm.cxx b/sfx2/source/control/unoctitm.cxx index 5b4b8af..7a2616c 100644 --- a/sfx2/source/control/unoctitm.cxx +++ b/sfx2/source/control/unoctitm.cxx @@ -1097,7 +1097,8 @@ void SfxDispatchController_Impl::InterceptLOKStateChangeEvent(const SfxObjectShe aEvent.FeatureURL.Path == "SubScript" || aEvent.FeatureURL.Path == "SuperScript" || aEvent.FeatureURL.Path == "Strikeout" || - aEvent.FeatureURL.Path == "Underline") + aEvent.FeatureURL.Path == "Underline" || + aEvent.FeatureURL.Path == "ModifiedStatus") { bool bTemp = false; aEvent.State >>= bTemp; _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
