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
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -657,9 +657,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user