From e496b55a592caf0ca07f5477285a72d50cee6501 Mon Sep 17 00:00:00 2001 From: Szymon Kłos Date: Thu, 25 Aug 2022 10:44:51 +0200 Subject: lok: masterpage: don't render text edits from different mode In Impress we can have 2 different EditMode : Page and MasterPage. Don't render text edits from other views in Page mode on Master Page. Change-Id: I62341941215165281d2663af3d3b7cca034762a9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138803 Tested-by: Jenkins CollaboraOffice Reviewed-by: Henry Castro --- svx/source/svdraw/svdpntv.cxx | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'svx') diff --git a/svx/source/svdraw/svdpntv.cxx b/svx/source/svdraw/svdpntv.cxx index 68345e345bdc..310c024c1972 100644 --- a/svx/source/svdraw/svdpntv.cxx +++ b/svx/source/svdraw/svdpntv.cxx @@ -639,28 +639,31 @@ void SdrPaintView::EndCompleteRedraw(SdrPaintWindow& rPaintWindow, bool bPaintFo // look for active TextEdit. As long as this cannot be painted to a VDev, // it cannot get part of buffering. In that case, output evtl. prerender // early and paint text edit to window. - if(IsTextEdit() && GetSdrPageView()) + SdrPageView* pPageView = GetSdrPageView(); + if(IsTextEdit() && pPageView) { if (!comphelper::LibreOfficeKit::isActive() || mbPaintTextEdit) static_cast< SdrView* >(this)->TextEditDrawing(rPaintWindow); } - if (comphelper::LibreOfficeKit::isActive()) + if (comphelper::LibreOfficeKit::isActive() && mbPaintTextEdit && pPageView) { // Look for active text edits in other views showing the same page, - // and show them as well. - if (SdrPageView* pPageView = GetSdrPageView()) + // and show them as well. Show only if Page/MasterPage mode is matching. + SdrViewIter aIter(pPageView->GetPage()); + bool bRequireMasterPage = pPageView->GetPage() ? pPageView->GetPage()->IsMasterPage() : false; + for (SdrView* pView = aIter.FirstView(); pView; pView = aIter.NextView()) { - SdrViewIter aIter(pPageView->GetPage()); - for (SdrView* pView = aIter.FirstView(); pView; pView = aIter.NextView()) - { - if (pView == this) - continue; + SdrPageView* pCurrentPageView = pView->GetSdrPageView(); + bool bIsCurrentMasterPage = (pCurrentPageView && pCurrentPageView->GetPage()) ? + pCurrentPageView->GetPage()->IsMasterPage() : false; - if (pView->IsTextEdit() && pView->GetSdrPageView()) - { - pView->TextEditDrawing(rPaintWindow); - } + if (pView == this || bRequireMasterPage != bIsCurrentMasterPage) + continue; + + if (pView->IsTextEdit() && pView->GetSdrPageView()) + { + pView->TextEditDrawing(rPaintWindow); } } } -- cgit