summaryrefslogtreecommitdiff
path: root/sw/qa
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-09-27 13:24:38 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-09-27 13:24:38 +0200
commit45fa73f87258f51bf37c92052723c4b99c49dc2d (patch)
tree5c7bb6e2e5ee5ba1f2f7835efeae35cb48ff1cda /sw/qa
parentd3ab1f8499a5e7040ff6bdf85b951bb9a3d6ac40 (diff)
sw: avoid emitting invalid cursor pos during end text edit of comment
A comment text edit (provided by editeng) works with relative twip coordinates, conversion of the cursor position to absolute twips happens in ImpEditView::ShowCursor(), provided that the pOutWin member has a map mode origin that respresents the offset correctly. This is not true during SwSidebarWin::DeactivatePostIt(), the map mode origin is already reset back to 0, so just don't emit callbacks during shutdown, the sw body text cursor will be shown later anyway. Change-Id: I02c15bb9fad99db8e43fd2f37df770dd165be788
Diffstat (limited to 'sw/qa')
-rw-r--r--sw/qa/extras/tiledrendering/tiledrendering.cxx47
1 files changed, 45 insertions, 2 deletions
diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx
index 1e1a6bbc0a40..47beefc70e54 100644
--- a/sw/qa/extras/tiledrendering/tiledrendering.cxx
+++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx
@@ -75,6 +75,7 @@ public:
void testCreateViewGraphicSelection();
void testCreateViewTextSelection();
void testRedlineColors();
+ void testCommentEndTextEdit();
CPPUNIT_TEST_SUITE(SwTiledRenderingTest);
CPPUNIT_TEST(testRegisterCallback);
@@ -114,10 +115,11 @@ public:
CPPUNIT_TEST(testCreateViewGraphicSelection);
CPPUNIT_TEST(testCreateViewTextSelection);
CPPUNIT_TEST(testRedlineColors);
+ CPPUNIT_TEST(testCommentEndTextEdit);
CPPUNIT_TEST_SUITE_END();
private:
- SwXTextDocument* createDoc(const char* pName);
+ SwXTextDocument* createDoc(const char* pName = nullptr);
static void callback(int nType, const char* pPayload, void* pData);
void callbackImpl(int nType, const char* pPayload);
Rectangle m_aInvalidation;
@@ -147,7 +149,10 @@ SwTiledRenderingTest::SwTiledRenderingTest()
SwXTextDocument* SwTiledRenderingTest::createDoc(const char* pName)
{
- load(DATA_DIRECTORY, pName);
+ if (!pName)
+ loadURL("private:factory/swriter", nullptr);
+ else
+ load(DATA_DIRECTORY, pName);
SwXTextDocument* pTextDocument = dynamic_cast<SwXTextDocument*>(mxComponent.get());
CPPUNIT_ASSERT(pTextDocument);
@@ -621,6 +626,7 @@ class ViewCallback
{
public:
bool m_bOwnCursorInvalidated;
+ bool m_bOwnCursorAtOrigin;
Rectangle m_aOwnCursor;
bool m_bViewCursorInvalidated;
Rectangle m_aViewCursor;
@@ -635,6 +641,7 @@ public:
ViewCallback()
: m_bOwnCursorInvalidated(false),
+ m_bOwnCursorAtOrigin(false),
m_bViewCursorInvalidated(false),
m_bOwnSelectionSet(false),
m_bViewSelectionSet(false),
@@ -673,6 +680,8 @@ public:
m_aOwnCursor.setY(aSeq[1].toInt32());
m_aOwnCursor.setWidth(aSeq[2].toInt32());
m_aOwnCursor.setHeight(aSeq[3].toInt32());
+ if (m_aOwnCursor.getX() == 0 && m_aOwnCursor.getY() == 0)
+ m_bOwnCursorAtOrigin = true;
}
break;
case LOK_CALLBACK_INVALIDATE_VIEW_CURSOR:
@@ -1460,6 +1469,40 @@ void SwTiledRenderingTest::testRedlineColors()
comphelper::LibreOfficeKit::setActive(false);
}
+void SwTiledRenderingTest::testCommentEndTextEdit()
+{
+ // Create a document, type a character and remember the cursor position.
+ comphelper::LibreOfficeKit::setActive();
+ SwXTextDocument* pXTextDocument = createDoc();
+ ViewCallback aView1;
+ SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView1);
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'x', 0);
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYUP, 'x', 0);
+ Rectangle aBodyCursor = aView1.m_aOwnCursor;
+
+ // Create a comment and type a character there as well.
+ const int nCtrlAltC = KEY_MOD1 + KEY_MOD2 + 512 + 'c' - 'a';
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'c', nCtrlAltC);
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYUP, 'c', nCtrlAltC);
+ Scheduler::ProcessEventsToIdle();
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 'x', 0);
+ pXTextDocument->postKeyEvent(LOK_KEYEVENT_KEYUP, 'x', 0);
+
+ // End comment text edit by clicking in the body text area, and assert that
+ // no unexpected cursor callbacks are emitted at origin (top left corner of
+ // the document).
+ aView1.m_bOwnCursorAtOrigin = false;
+ pXTextDocument->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONDOWN, aBodyCursor.getX(), aBodyCursor.getY(), 1, MOUSE_LEFT, 0);
+ pXTextDocument->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONUP, aBodyCursor.getX(), aBodyCursor.getY(), 1, MOUSE_LEFT, 0);
+ // This failed, the cursor was at 0, 0 at some point during end text edit
+ // of the comment.
+ CPPUNIT_ASSERT(!aView1.m_bOwnCursorAtOrigin);
+
+ mxComponent->dispose();
+ mxComponent.clear();
+ comphelper::LibreOfficeKit::setActive(false);
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SwTiledRenderingTest);
CPPUNIT_PLUGIN_IMPLEMENT();