Resolves: #i123003# Corrected Handle/Overlay visualization...
when TextEdit is active
(cherry picked from commit 5960cf3dc57dc455bc98343dfafccafaf808ecdc)
Conflicts:
svx/source/svdraw/svdmrkv.cxx
Change-Id: I05c9c3d10ba3e9b29a1a759a18dbb19d85016640
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index cefe73b..896b19a6 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -624,33 +624,41 @@ void SdrMarkView::SetMarkHandles()
// correct position )
Point aGridOff = GetGridOffset();
// #i122142# for captions in TextEdit, force to FrameHdls to get the special text selection
if(!bFrmHdl && pMarkedObj && bSingleTextObjMark && dynamic_cast< SdrCaptionObj* >(pMarkedObj))
// check if text edit or ole is active and handles need to be suppressed. This may be the case
// when a single object is selected
// Using a strict return statement is okay here; no handles means *no* handles.
if(pMarkedObj)
{
bFrmHdl = true;
// formally #i33755#: If TextEdit is active the EditEngine will directly paint
// to the window, so suppress Overlay and handles completely; a text frame for
// the active text edit will be painted by the repaitnt mechanism in
// SdrObjEditView::ImpPaintOutlinerView in this case. This needs to be reworked
// in the future
// Also formally #122142#: Pretty much the same for SdrCaptionObj's in calc.
if(((SdrView*)this)->IsTextEdit())
{
const SdrTextObj* pSdrTextObj = dynamic_cast< const SdrTextObj* >(pMarkedObj);
if(pSdrTextObj && pSdrTextObj->IsInEditMode())
{
return;
}
}
// formally #i118524#: if inplace activated OLE is selected, suppress handles
const SdrOle2Obj* pSdrOle2Obj = dynamic_cast< const SdrOle2Obj* >(pMarkedObj);
if(pSdrOle2Obj && (pSdrOle2Obj->isInplaceActive() || pSdrOle2Obj->isUiActive()))
{
return;
}
}
if (bFrmHdl)
{
Rectangle aRect(GetMarkedObjRect());
// #i33755#
const bool bHideHandlesWhenInTextEdit(
((SdrView*)this)->IsTextEdit()
&& pMarkedObj
&& pMarkedObj->ISA(SdrTextObj)
&& ((SdrTextObj*)pMarkedObj)->IsInEditMode());
// #i118524# if inplace activated OLE is selected,
// suppress handles
bool bHideHandlesWhenOleActive(false);
const SdrOle2Obj* pSdrOle2Obj = dynamic_cast< const SdrOle2Obj* >(pMarkedObj);
if(pSdrOle2Obj && (pSdrOle2Obj->isInplaceActive() || pSdrOle2Obj->isUiActive()))
{
bHideHandlesWhenOleActive = true;
}
if(!aRect.IsEmpty() && !bHideHandlesWhenInTextEdit && !bHideHandlesWhenOleActive)
if(!aRect.IsEmpty())
{ // otherwise nothing is found
if( bSingleTextObjMark )
{