diff options
-rw-r--r-- | editeng/source/editeng/editeng.cxx | 2 | ||||
-rw-r--r-- | editeng/source/editeng/editview.cxx | 8 | ||||
-rw-r--r-- | editeng/source/outliner/outlvw.cxx | 8 | ||||
-rw-r--r-- | include/editeng/editview.hxx | 4 | ||||
-rw-r--r-- | include/editeng/outliner.hxx | 4 | ||||
-rw-r--r-- | sd/qa/unit/tiledrendering/tiledrendering.cxx | 40 | ||||
-rw-r--r-- | sd/source/ui/func/futext.cxx | 4 | ||||
-rw-r--r-- | svx/source/svdraw/svdedxv.cxx | 2 |
8 files changed, 55 insertions, 17 deletions
diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx index f984d0699634..bf2746cb283b 100644 --- a/editeng/source/editeng/editeng.cxx +++ b/editeng/source/editeng/editeng.cxx @@ -1435,7 +1435,7 @@ void EditEngine::SetUpdateMode( bool bUpdate ) { pImpEditEngine->SetUpdateMode( bUpdate ); if ( pImpEditEngine->pActiveView ) - pImpEditEngine->pActiveView->ShowCursor( false, false ); + pImpEditEngine->pActiveView->ShowCursor( false, false, /*bActivate=*/true ); } bool EditEngine::GetUpdateMode() const diff --git a/editeng/source/editeng/editview.cxx b/editeng/source/editeng/editview.cxx index 66b0425d8900..7ace1b879fbc 100644 --- a/editeng/source/editeng/editview.cxx +++ b/editeng/source/editeng/editview.cxx @@ -392,7 +392,7 @@ void EditView::Command( const CommandEvent& rCEvt ) pImpEditView->Command( rCEvt ); } -void EditView::ShowCursor( bool bGotoCursor, bool bForceVisCursor ) +void EditView::ShowCursor( bool bGotoCursor, bool bForceVisCursor, bool bActivate ) { if ( pImpEditView->pEditEngine->HasView( this ) ) { @@ -401,18 +401,18 @@ void EditView::ShowCursor( bool bGotoCursor, bool bForceVisCursor ) bGotoCursor = false; pImpEditView->ShowCursor( bGotoCursor, bForceVisCursor ); - if (comphelper::LibreOfficeKit::isActive()) + if (comphelper::LibreOfficeKit::isActive() && !bActivate) { pImpEditView->libreOfficeKitViewCallback(LOK_CALLBACK_CURSOR_VISIBLE, OString::boolean(true).getStr()); } } } -void EditView::HideCursor() +void EditView::HideCursor(bool bDeactivate) { pImpEditView->GetCursor()->Hide(); - if (comphelper::LibreOfficeKit::isActive()) + if (comphelper::LibreOfficeKit::isActive() && !bDeactivate) { pImpEditView->libreOfficeKitViewCallback(LOK_CALLBACK_CURSOR_VISIBLE, OString::boolean(false).getStr()); } diff --git a/editeng/source/outliner/outlvw.cxx b/editeng/source/outliner/outlvw.cxx index 12e6f9130d7e..a6fed496f83e 100644 --- a/editeng/source/outliner/outlvw.cxx +++ b/editeng/source/outliner/outlvw.cxx @@ -1234,14 +1234,14 @@ bool OutlinerView::HasSelection() const return pEditView->HasSelection(); } -void OutlinerView::ShowCursor( bool bGotoCursor ) +void OutlinerView::ShowCursor( bool bGotoCursor, bool bActivate ) { - pEditView->ShowCursor( bGotoCursor ); + pEditView->ShowCursor( bGotoCursor, /*bForceVisCursor=*/true, bActivate ); } -void OutlinerView::HideCursor() +void OutlinerView::HideCursor(bool bDeactivate) { - pEditView->HideCursor(); + pEditView->HideCursor(bDeactivate); } void OutlinerView::SetWindow( vcl::Window* pWin ) diff --git a/include/editeng/editview.hxx b/include/editeng/editview.hxx index d4e88b288d13..818f503d129f 100644 --- a/include/editeng/editview.hxx +++ b/include/editeng/editview.hxx @@ -111,8 +111,8 @@ public: void Invalidate(); Pair Scroll( long nHorzScroll, long nVertScroll, ScrollRangeCheck nRangeCheck = ScrollRangeCheck::NoNegative ); - void ShowCursor( bool bGotoCursor = true, bool bForceVisCursor = true ); - void HideCursor(); + void ShowCursor( bool bGotoCursor = true, bool bForceVisCursor = true, bool bActivate = false ); + void HideCursor( bool bDeactivate = false ); void SetSelectionMode( EESelectionMode eMode ); diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx index d467ef56419a..99b79fe9c9c8 100644 --- a/include/editeng/outliner.hxx +++ b/include/editeng/outliner.hxx @@ -231,8 +231,8 @@ public: void ReleaseMouse(); bool MouseMove( const MouseEvent& ); - void ShowCursor( bool bGotoCursor = true ); - void HideCursor(); + void ShowCursor( bool bGotoCursor = true, bool bActivate = false ); + void HideCursor( bool bDeactivate = false ); Outliner* GetOutliner() const { return pOwner; } diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx index acff325c6498..e26c0334209e 100644 --- a/sd/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx @@ -65,6 +65,7 @@ public: void testResizeTableColumn(); void testViewCursors(); void testViewCursorParts(); + void testCursorViews(); CPPUNIT_TEST_SUITE(SdTiledRenderingTest); CPPUNIT_TEST(testRegisterCallback); @@ -86,6 +87,7 @@ public: CPPUNIT_TEST(testResizeTableColumn); CPPUNIT_TEST(testViewCursors); CPPUNIT_TEST(testViewCursorParts); + CPPUNIT_TEST(testCursorViews); CPPUNIT_TEST_SUITE_END(); private: @@ -818,11 +820,13 @@ public: bool m_bGraphicViewSelectionInvalidated; /// Our current part, to be able to decide if a view cursor/selection is relevant for us. int m_nPart; + bool m_bCursorVisibleChanged; ViewCallback() : m_bGraphicSelectionInvalidated(false), m_bGraphicViewSelectionInvalidated(false), - m_nPart(0) + m_nPart(0), + m_bCursorVisibleChanged(false) { } @@ -850,6 +854,11 @@ public: m_bGraphicViewSelectionInvalidated = true; } break; + case LOK_CALLBACK_CURSOR_VISIBLE: + { + m_bCursorVisibleChanged = true; + } + break; } } }; @@ -925,6 +934,35 @@ void SdTiledRenderingTest::testViewCursorParts() comphelper::LibreOfficeKit::setActive(false); } +void SdTiledRenderingTest::testCursorViews() +{ + comphelper::LibreOfficeKit::setActive(); + + // Create the first view. + SdXImpressDocument* pXImpressDocument = createDoc("shape.odp"); + ViewCallback aView1; + SfxViewShell::Current()->registerLibreOfficeKitViewCallback(&ViewCallback::callback, &aView1); + + // Begin text edit on the only object on the slide. + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + SdPage* pActualPage = pViewShell->GetActualPage(); + SdrObject* pObject = pActualPage->GetObj(0); + SdrView* pView = pViewShell->GetView(); + pView->MarkObj(pObject, pView->GetSdrPageView()); + pView->SdrBeginTextEdit(pObject); + + // Make sure that cursor state is not changed just because we create a second view. + aView1.m_bCursorVisibleChanged = false; + SfxLokHelper::createView(); + pXImpressDocument->initializeForTiledRendering(uno::Sequence<beans::PropertyValue>()); + Scheduler::ProcessEventsToIdle(); + CPPUNIT_ASSERT(!aView1.m_bCursorVisibleChanged); + + mxComponent->dispose(); + mxComponent.clear(); + comphelper::LibreOfficeKit::setActive(false); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdTiledRenderingTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sd/source/ui/func/futext.cxx b/sd/source/ui/func/futext.cxx index cb0e848bdab7..f1bea725f2cd 100644 --- a/sd/source/ui/func/futext.cxx +++ b/sd/source/ui/func/futext.cxx @@ -977,7 +977,7 @@ void FuText::Activate() OutlinerView* pOLV = mpView->GetTextEditOutlinerView(); if (pOLV) - pOLV->ShowCursor(); + pOLV->ShowCursor(/*bGotoCursor=*/true, /*bActivate=*/true); FuConstruct::Activate(); @@ -990,7 +990,7 @@ void FuText::Deactivate() OutlinerView* pOLV = mpView->GetTextEditOutlinerView(); if (pOLV) - pOLV->HideCursor(); + pOLV->HideCursor(/*bDeactivate=*/true); mpView->SetHitTolerancePixel( HITPIX ); diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index 7fe6dd3840c8..ac38317c1d81 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -385,7 +385,7 @@ void SdrObjEditView::ImpPaintOutlinerView(OutlinerView& rOutlView, const Rectang } } - rOutlView.ShowCursor(); + rOutlView.ShowCursor(/*bGotoCursor=*/true, /*bActivate=*/true); } void SdrObjEditView::ImpInvalidateOutlinerView(OutlinerView& rOutlView) const |