Kaydet (Commit) 1417638d authored tarafından Caolán McNamara's avatar Caolán McNamara Kaydeden (comit) Andras Timar

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 abbe4f9d)
üst d7802365
...@@ -235,6 +235,11 @@ public: ...@@ -235,6 +235,11 @@ public:
// Beim Gruppenobjekt muss wenigstens ein Member sichtbar sein, // Beim Gruppenobjekt muss wenigstens ein Member sichtbar sein,
// gesperrt sein darf keiner. // gesperrt sein darf keiner.
bool IsObjMarkable(SdrObject* pObj) const; 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 // Betreten (Editieren) einer Objektgruppe. Anschliessend liegen alle
// Memberobjekte der Gruppe im direkten Zugriff. Alle anderen Objekte // Memberobjekte der Gruppe im direkten Zugriff. Alle anderen Objekte
......
...@@ -684,9 +684,12 @@ bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt) ...@@ -684,9 +684,12 @@ bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt)
**************************************************************/ **************************************************************/
if (mpView->PickObj(aMDPos, mpView->getHitTolLog(), pObj, pPV, SdrSearchOptions::ALSOONMASTER | SdrSearchOptions::BEFOREMARK)) if (mpView->PickObj(aMDPos, mpView->getHitTolLog(), pObj, pPV, SdrSearchOptions::ALSOONMASTER | SdrSearchOptions::BEFOREMARK))
{ {
mpView->UnmarkAllObj(); if (pPV->IsObjSelectable(pObj))
mpView->MarkObj(pObj,pPV,false,false); {
return true; mpView->UnmarkAllObj();
mpView->MarkObj(pObj,pPV,false,false);
return true;
}
} }
/************************************************************** /**************************************************************
* Toggle between selection and rotation * Toggle between selection and rotation
......
...@@ -656,9 +656,12 @@ bool FuText::MouseButtonUp(const MouseEvent& rMEvt) ...@@ -656,9 +656,12 @@ bool FuText::MouseButtonUp(const MouseEvent& rMEvt)
**************************************************************/ **************************************************************/
if (mpView->PickObj(aMDPos, mpView->getHitTolLog(), pObj, pPV, SdrSearchOptions::ALSOONMASTER | SdrSearchOptions::BEFOREMARK)) if (mpView->PickObj(aMDPos, mpView->getHitTolLog(), pObj, pPV, SdrSearchOptions::ALSOONMASTER | SdrSearchOptions::BEFOREMARK))
{ {
mpView->UnmarkAllObj(); if (pPV->IsObjSelectable(pObj))
mpView->MarkObj(pObj,pPV,false,false); {
return bReturn; mpView->UnmarkAllObj();
mpView->MarkObj(pObj,pPV,false,false);
return bReturn;
}
} }
} }
} }
......
...@@ -1226,6 +1226,33 @@ void SdrMarkView::SetRef2(const Point& rPt) ...@@ -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() void SdrMarkView::CheckMarked()
{ {
for (size_t nm=GetMarkedObjectCount(); nm>0;) { for (size_t nm=GetMarkedObjectCount(); nm>0;) {
...@@ -1233,29 +1260,7 @@ void SdrMarkView::CheckMarked() ...@@ -1233,29 +1260,7 @@ void SdrMarkView::CheckMarked()
SdrMark* pM=GetSdrMarkByIndex(nm); SdrMark* pM=GetSdrMarkByIndex(nm);
SdrObject* pObj=pM->GetMarkedSdrObj(); SdrObject* pObj=pM->GetMarkedSdrObj();
SdrPageView* pPV=pM->GetPageView(); SdrPageView* pPV=pM->GetPageView();
SdrLayerID nLay=pObj->GetLayer(); bool bRaus=!pPV->IsObjSelectable(pObj);
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;
}
if (bRaus) if (bRaus)
{ {
GetMarkedObjectListWriteAccess().DeleteMark(nm); GetMarkedObjectListWriteAccess().DeleteMark(nm);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment