diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-09-13 10:06:52 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-09-13 09:36:27 +0000 |
commit | 786cc8a5a3cd34329c72b867e5fd7896b10a7351 (patch) | |
tree | 326a40470c79c6d77827afe75368d318d0492491 | |
parent | 465d3076835d88972d99c92b9b518a0e1762fea2 (diff) |
sw: emit LOK_CALLBACK_GRAPHIC_VIEW_SELECTION as part of registerCallback()
Have a Writer shape selection in the first view, create a new view, the
second view doesn't see the selection. But the same works if the shape
selection is created when the second view was created earlier.
Emit the svx selection state as part of SwCursorShell::NotifyCursor() to
fix the problem, but take care of not sending the status to the new view
itself.
Change-Id: Iff3979235e1c12cc64867c3184354967f451370b
Reviewed-on: https://gerrit.libreoffice.org/28857
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
-rw-r--r-- | svx/source/svdraw/svdmrkv.cxx | 5 | ||||
-rw-r--r-- | sw/qa/extras/tiledrendering/tiledrendering.cxx | 4 | ||||
-rw-r--r-- | sw/source/core/crsr/crsrsh.cxx | 9 |
3 files changed, 14 insertions, 4 deletions
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx index eb14f29fc25c..402c61e4d40f 100644 --- a/svx/source/svdraw/svdmrkv.cxx +++ b/svx/source/svdraw/svdmrkv.cxx @@ -767,9 +767,12 @@ void SdrMarkView::SetMarkHandles(SfxViewShell* pOtherShell) if(SfxViewShell* pViewShell = GetSfxViewShell()) { if (pOtherShell) + { // An other shell wants to know about our existing // selection. - SfxLokHelper::notifyOtherView(pViewShell, pOtherShell, LOK_CALLBACK_GRAPHIC_VIEW_SELECTION, "selection", sSelection); + if (pViewShell != pOtherShell) + SfxLokHelper::notifyOtherView(pViewShell, pOtherShell, LOK_CALLBACK_GRAPHIC_VIEW_SELECTION, "selection", sSelection); + } else { // We have a new selection, so both pViewShell and the diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx index e61f23ff7e37..a2a88e17c868 100644 --- a/sw/qa/extras/tiledrendering/tiledrendering.cxx +++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx @@ -1303,10 +1303,14 @@ void SwTiledRenderingTest::testCreateViewGraphicSelection() // Make sure that the hidden text cursor isn't visible in the second view, either. ViewCallback aView2; aView2.m_bViewCursorVisible = true; + aView2.m_bGraphicViewSelection = false; SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView2); // This was true, the second view didn't get the visibility of the text // cursor of the first view. CPPUNIT_ASSERT(!aView2.m_bViewCursorVisible); + // This was false, the second view didn't get the graphic selection of the + // first view. + CPPUNIT_ASSERT(aView2.m_bGraphicViewSelection); mxComponent->dispose(); mxComponent.clear(); diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx index bfa0bc0702c0..241d8d43ead8 100644 --- a/sw/source/core/crsr/crsrsh.cxx +++ b/sw/source/core/crsr/crsrsh.cxx @@ -1192,12 +1192,15 @@ OUString SwCursorShell::getPageRectangles() return OUString::fromUtf8(comphelper::string::join("; ", v).getStr()); } -void SwCursorShell::NotifyCursor(SfxViewShell* pViewShell) const +void SwCursorShell::NotifyCursor(SfxViewShell* pOtherShell) const { // Cursor position and visibility. - m_pVisibleCursor->SetPosAndShow(pViewShell); + m_pVisibleCursor->SetPosAndShow(pOtherShell); // Text selection. - m_pCurrentCursor->Show(pViewShell); + m_pCurrentCursor->Show(pOtherShell); + // Graphic selection. + auto pView = const_cast<SdrView*>(GetDrawView()); + pView->AdjustMarkHdl(pOtherShell); } /// go to the next SSelection |