[Libreoffice-commits] core.git: include/svx sd/source svx/source

Caolán McNamara caolanm at redhat.com
Fri Jul 3 08:17:57 PDT 2015


 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 abbe4f9d64073d77c4be93b7c89c03d0651bacef
Author: Caolán McNamara <caolanm at 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

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 dd63708..000ac60 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 e308e2e..c3b4090 100644
--- a/sd/source/ui/func/futext.cxx
+++ b/sd/source/ui/func/futext.cxx
@@ -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;
+                }
             }
         }
     }
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index f58f88b..d281507 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);


More information about the Libreoffice-commits mailing list