sc/qa/unit/tiledrendering/tiledrendering.cxx | 44 ++++++++++++++ sc/qa/unit/tiledrendering/tiledrenderingmodeltestbase.cxx | 10 +++ 2 files changed, 54 insertions(+)
New commits: commit e29de7e8d1fe2da1a96e5a190565863951178c9f Author: Gökay Şatır <gokaysa...@gmail.com> AuthorDate: Wed Apr 9 16:49:51 2025 +0300 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Mon Apr 14 14:30:08 2025 +0200 Calc Test: Ensure text cursor visibility after a paste event. Change-Id: I1fc688bb683d7bf62ed6330c168227a7761ec2ae Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184143 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx index 788e047eb1a9..be54455154dd 100644 --- a/sc/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx @@ -3569,6 +3569,50 @@ CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testFreezeRowOrColumn) CPPUNIT_ASSERT_EQUAL(std::string("8"), index); } +CPPUNIT_TEST_FIXTURE(ScTiledRenderingTest, testCursorVisibilityAfterPaste) +{ + ScModelObj* pModelObj = createDoc("empty.ods"); + ViewCallback aView; + SfxLokHelper::createView(); + pModelObj->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); + + ScTabViewShell* pView = dynamic_cast<ScTabViewShell*>(SfxViewShell::Current()); + + // copy text view 1 + pView->SetCursor(0, 0); // Go to A1. + + Scheduler::ProcessEventsToIdle(); + + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'B', 0); // Type B. + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 'B', 0); + Scheduler::ProcessEventsToIdle(); + + + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, awt::Key::TAB); + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::TAB); + Scheduler::ProcessEventsToIdle(); + + pView->SetCursor(0, 0); // Go to A1. + Scheduler::ProcessEventsToIdle(); + + pView->GetViewFrame().GetBindings().Execute(SID_COPY); // Copy B. + Scheduler::ProcessEventsToIdle(); + + pView->SetCursor(0, 1); // Go to A2. + Scheduler::ProcessEventsToIdle(); + + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'B', 0); // Type B. + pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 'B', 0); + Scheduler::ProcessEventsToIdle(); + + uno::Sequence<beans::PropertyValue> aArgs; + dispatchCommand(mxComponent, u".uno:Paste"_ustr, aArgs); // Paste B. + Scheduler::ProcessEventsToIdle(); + + // Text cursor should still be visible. + CPPUNIT_ASSERT_EQUAL(true, aView.m_textCursorVisible); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/qa/unit/tiledrendering/tiledrenderingmodeltestbase.cxx b/sc/qa/unit/tiledrendering/tiledrenderingmodeltestbase.cxx index 5b92a884d25a..99917ea72ca2 100644 --- a/sc/qa/unit/tiledrendering/tiledrenderingmodeltestbase.cxx +++ b/sc/qa/unit/tiledrendering/tiledrenderingmodeltestbase.cxx @@ -252,6 +252,7 @@ class ViewCallback final public: bool m_bOwnCursorInvalidated; bool m_bViewCursorInvalidated; + bool m_textCursorVisible; bool m_bTextViewSelectionInvalidated; bool m_bGraphicSelection; bool m_bGraphicViewSelection; @@ -277,6 +278,7 @@ public: ViewCallback(bool bDeleteListenerOnDestruct = true) : m_bOwnCursorInvalidated(false) , m_bViewCursorInvalidated(false) + , m_textCursorVisible(false) , m_bTextViewSelectionInvalidated(false) , m_bGraphicSelection(false) , m_bGraphicViewSelection(false) @@ -311,6 +313,14 @@ public: { switch (nType) { + case LOK_CALLBACK_VIEW_CURSOR_VISIBLE: + { + boost::property_tree::ptree aTree; + std::stringstream aStream(pPayload); + boost::property_tree::read_json(aStream, aTree); + m_textCursorVisible = aTree.get_child("visible").get_value<std::string>() == "true"; + } + break; case LOK_CALLBACK_CELL_CURSOR: { m_bOwnCursorInvalidated = true;