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 a20f52eadcd3..970f6b3289d3 100644 --- a/editeng/source/editeng/editeng.cxx +++ b/editeng/source/editeng/editeng.cxx @@ -1432,7 +1432,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 8dca0867cdc9..38dac90d197a 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 ea011f2924c2..fb18848de740 100644 --- a/editeng/source/outliner/outlvw.cxx +++ b/editeng/source/outliner/outlvw.cxx @@ -1229,14 +1229,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 f609aa679a25..b8d16cefd22d 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 be989e5b1e70..f019696d43e0 100644 --- a/include/editeng/outliner.hxx +++ b/include/editeng/outliner.hxx @@ -229,8 +229,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 948f06d9a9a0..40fc29639a05 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 a80fd6cd2c51..a27c0c49a7e9 100644 --- a/sd/source/ui/func/futext.cxx +++ b/sd/source/ui/func/futext.cxx @@ -979,7 +979,7 @@ void FuText::Activate() OutlinerView* pOLV = mpView->GetTextEditOutlinerView(); if (pOLV) - pOLV->ShowCursor(); + pOLV->ShowCursor(/*bGotoCursor=*/true, /*bActivate=*/true); FuConstruct::Activate(); @@ -992,7 +992,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 a0fcb8129625..bcd01d3a2921 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -384,7 +384,7 @@ void SdrObjEditView::ImpPaintOutlinerView(OutlinerView& rOutlView, const Rectang } } - rOutlView.ShowCursor(); + rOutlView.ShowCursor(/*bGotoCursor=*/true, /*bActivate=*/true); } void SdrObjEditView::ImpInvalidateOutlinerView(OutlinerView& rOutlView) const |