include/svx/svdpagv.hxx | 5 ++++ sd/source/ui/func/fusel.cxx | 9 ++++--- sd/source/ui/func/futext.cxx | 9 ++++--- svx/source/svdraw/svdmrkv.cxx | 51 +++++++++++++++++++++++------------------- 4 files changed, 45 insertions(+), 29 deletions(-)
New commits: commit 4189530530320a82adc785a4426735423a1188c1 Author: Caolán McNamara <caol...@redhat.com> Date: Fri Jul 3 15:53:00 2015 +0100 fix deselect of textbox on slides with images in underlying master The original work of tdf#55430 tries to select an object under another one on the second click, but these images are unselectable so this fails. Red Hat has a whole new shiny bunch of templates which have such images in their masters. Check if the object is selectable before continuing Change-Id: I182abaf50e8bb1084c5819dc9e1ffd8b386a9e93 (cherry picked from commit abbe4f9d64073d77c4be93b7c89c03d0651bacef) diff --git a/include/svx/svdpagv.hxx b/include/svx/svdpagv.hxx index 5369616..8bf305f 100644 --- a/include/svx/svdpagv.hxx +++ b/include/svx/svdpagv.hxx @@ -235,6 +235,11 @@ public: // Beim Gruppenobjekt muss wenigstens ein Member sichtbar sein, // gesperrt sein darf keiner. bool IsObjMarkable(SdrObject* pObj) const; + // hmm, selectable is surely the same as markable, now that I + // see this as I look for a place to put it. TO-DO, + // merge these + bool IsObjSelectable(SdrObject *pObj) const; + // Betreten (Editieren) einer Objektgruppe. Anschliessend liegen alle // Memberobjekte der Gruppe im direkten Zugriff. Alle anderen Objekte diff --git a/sd/source/ui/func/fusel.cxx b/sd/source/ui/func/fusel.cxx index 9c965f7..905ee88 100644 --- a/sd/source/ui/func/fusel.cxx +++ b/sd/source/ui/func/fusel.cxx @@ -684,9 +684,12 @@ bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt) **************************************************************/ if (mpView->PickObj(aMDPos, mpView->getHitTolLog(), pObj, pPV, SdrSearchOptions::ALSOONMASTER | SdrSearchOptions::BEFOREMARK)) { - mpView->UnmarkAllObj(); - mpView->MarkObj(pObj,pPV,false,false); - return true; + if (pPV->IsObjSelectable(pObj)) + { + mpView->UnmarkAllObj(); + mpView->MarkObj(pObj,pPV,false,false); + return true; + } } /************************************************************** * Toggle between selection and rotation diff --git a/sd/source/ui/func/futext.cxx b/sd/source/ui/func/futext.cxx index ac6fb71..b848762 100644 --- a/sd/source/ui/func/futext.cxx +++ b/sd/source/ui/func/futext.cxx @@ -656,9 +656,12 @@ bool FuText::MouseButtonUp(const MouseEvent& rMEvt) **************************************************************/ if (mpView->PickObj(aMDPos, mpView->getHitTolLog(), pObj, pPV, SdrSearchOptions::ALSOONMASTER | SdrSearchOptions::BEFOREMARK)) { - mpView->UnmarkAllObj(); - mpView->MarkObj(pObj,pPV,false,false); - return bReturn; + if (pPV->IsObjSelectable(pObj)) + { + mpView->UnmarkAllObj(); + mpView->MarkObj(pObj,pPV,false,false); + return bReturn; + } } } } diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx index 808f432..0eaaced 100644 --- a/svx/source/svdraw/svdmrkv.cxx +++ b/svx/source/svdraw/svdmrkv.cxx @@ -1226,6 +1226,33 @@ void SdrMarkView::SetRef2(const Point& rPt) } } +bool SdrPageView::IsObjSelectable(SdrObject *pObj) const +{ + SdrLayerID nLay=pObj->GetLayer(); + bool bRaus=!pObj->IsInserted(); // Obj deleted? + if (!pObj->Is3DObj()) { + bRaus=bRaus || pObj->GetPage()!=GetPage(); // Obj suddenly in different Page or Group + } + bRaus=bRaus || GetLockedLayers().IsSet(nLay) || // Layer locked? + !GetVisibleLayers().IsSet(nLay); // Layer invisible? + + if( !bRaus ) + bRaus = !pObj->IsVisible(); // invisible objects can not be selected + + if (!bRaus) { + // Grouped objects can now be selected. + // After EnterGroup the higher-level objects, + // have to be deselected, though. + const SdrObjList* pOOL=pObj->GetObjList(); + const SdrObjList* pVOL=GetObjList(); + while (pOOL!=NULL && pOOL!=pVOL) { + pOOL=pOOL->GetUpList(); + } + bRaus=pOOL!=pVOL; + } + return !bRaus; +} + void SdrMarkView::CheckMarked() { for (size_t nm=GetMarkedObjectCount(); nm>0;) { @@ -1233,29 +1260,7 @@ void SdrMarkView::CheckMarked() SdrMark* pM=GetSdrMarkByIndex(nm); SdrObject* pObj=pM->GetMarkedSdrObj(); SdrPageView* pPV=pM->GetPageView(); - SdrLayerID nLay=pObj->GetLayer(); - bool bRaus=!pObj->IsInserted(); // Obj deleted? - if (!pObj->Is3DObj()) { - bRaus=bRaus || pObj->GetPage()!=pPV->GetPage(); // Obj suddenly in different Page or Group - } - bRaus=bRaus || pPV->GetLockedLayers().IsSet(nLay) || // Layer locked? - !pPV->GetVisibleLayers().IsSet(nLay); // Layer invisible? - - if( !bRaus ) - bRaus = !pObj->IsVisible(); // invisible objects can not be selected - - if (!bRaus) { - // Grouped objects can now be selected. - // After EnterGroup the higher-level objects, - // have to be deselected, though. - const SdrObjList* pOOL=pObj->GetObjList(); - const SdrObjList* pVOL=pPV->GetObjList(); - while (pOOL!=NULL && pOOL!=pVOL) { - pOOL=pOOL->GetUpList(); - } - bRaus=pOOL!=pVOL; - } - + bool bRaus=!pPV->IsObjSelectable(pObj); if (bRaus) { GetMarkedObjectListWriteAccess().DeleteMark(nm);
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits