summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
authorLennard <Wasserthal@nefkom.net>2012-10-27 18:59:14 +0200
committerThorsten Behrens <tbehrens@suse.com>2012-11-06 13:50:20 +0000
commit85ea03ae536831649b104694d08dced4d4c8663f (patch)
tree6be24bca1d78cfe864c0e1245798205f2e6bb6c9 /svx
parent6f79b2e35be0778bfec3e1854483f2e9a68f68f3 (diff)
fdo#55430 allow clicking objects in front of selected ones
Prevents that selected objects shadow selecting others in front of them. Change-Id: Iee4abf4eddf79ef7ed331221b0a0b23d3370ae2b Signed-off-by: Lennard <Wasserthal@nefkom.net> Reviewed-on: https://gerrit.libreoffice.org/927 Reviewed-by: Thorsten Behrens <tbehrens@suse.com> Tested-by: Thorsten Behrens <tbehrens@suse.com>
Diffstat (limited to 'svx')
-rw-r--r--svx/inc/svx/svdmrkv.hxx2
-rw-r--r--svx/source/svdraw/svdmrkv.cxx19
2 files changed, 19 insertions, 2 deletions
diff --git a/svx/inc/svx/svdmrkv.hxx b/svx/inc/svx/svdmrkv.hxx
index 37c31345e4eb..944d3bdab432 100644
--- a/svx/inc/svx/svdmrkv.hxx
+++ b/svx/inc/svx/svdmrkv.hxx
@@ -53,6 +53,7 @@
#define SDRSEARCH_MARKED 0x0400 /* Nur markierte Objekte/Punkte/... */
#define SDRSEARCH_PASS2BOUND 0x0800 /* Wenn nix gefunden, dann neuer 2. Versuch mit BoundRectHit */
#define SDRSEARCH_PASS3NEAREST 0x1000 /* Wenn nix gefunden, dann neuer 3. Versuch mit NearestBoundRectHit */
+#define SDRSEARCH_BEFOREMARK 0x2000 /* if one marked one found, ignore all behind that */
#define SDRSEARCH_PICKMARKABLE (SDRSEARCH_TESTMARKABLE)
#define SDRSEARCH_PICKTEXTEDIT (SDRSEARCH_DEEP|SDRSEARCH_TESTMARKABLE|SDRSEARCH_TESTTEXTEDIT)
@@ -181,6 +182,7 @@ protected:
//HMHvoid ImpShowMarkHdl(bool bNoRefHdl);
virtual SdrObject* CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObject* pObj, SdrPageView* pPV, sal_uIntPtr nOptions, const SetOfByte* pMVisLay) const;
virtual SdrObject* CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObjList* pOL, SdrPageView* pPV, sal_uIntPtr nOptions, const SetOfByte* pMVisLay, SdrObject*& rpRootObj) const;
+ virtual SdrObject* CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObjList* pOL, SdrPageView* pPV, sal_uIntPtr nOptions, const SetOfByte* pMVisLay, SdrObject*& rpRootObj,const SdrMarkList * pMarkList) const;
sal_Bool ImpIsFrameHandles() const;
void ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, String& rStr, sal_uInt16 nVal=0, sal_uInt16 nOpt=0) const;
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 2f16e1d1ec97..2bb822113efc 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -1573,7 +1573,12 @@ SdrObject* SdrMarkView::CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nT
SdrObject* SdrMarkView::CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObjList* pOL, SdrPageView* pPV, sal_uIntPtr nOptions, const SetOfByte* pMVisLay, SdrObject*& rpRootObj) const
{
+ return (*this).CheckSingleSdrObjectHit(rPnt,nTol,pOL,pPV,nOptions,pMVisLay,rpRootObj,NULL);
+}
+SdrObject* SdrMarkView::CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObjList* pOL, SdrPageView* pPV, sal_uIntPtr nOptions, const SetOfByte* pMVisLay, SdrObject*& rpRootObj,const SdrMarkList * pMarkList) const
+{
sal_Bool bBack=(nOptions & SDRSEARCH_BACKWARD)!=0;
+ sal_Bool bBefMrk=(nOptions & SDRSEARCH_BEFOREMARK)!=0;
SdrObject* pRet=NULL;
rpRootObj=NULL;
if (pOL!=NULL)
@@ -1595,7 +1600,16 @@ SdrObject* SdrMarkView::CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nT
{
pObj = pOL->GetObj(nObjNum);
}
-
+ if (bBefMrk)
+ {
+ if ((pMarkList)!=NULL)
+ {
+ if ((*pMarkList).FindObject(pObj)!=CONTAINER_ENTRY_NOTFOUND)
+ {
+ return NULL;
+ }
+ }
+ }
pRet=CheckSingleSdrObjectHit(rPnt,nTol,pObj,pPV,nOptions,pMVisLay);
if (pRet!=NULL) rpRootObj=pObj;
if (bBack) nObjNum++;
@@ -1689,7 +1703,7 @@ sal_Bool SdrMarkView::PickObj(const Point& rPnt, short nTol, SdrObject*& rpObj,
if (pnPassNum!=NULL) *pnPassNum|=SDRSEARCHPASS_MASTERPAGE;
nTmpOptions=nTmpOptions | SDRSEARCH_IMPISMASTER;
}
- pHitObj=CheckSingleSdrObjectHit(aPt,nTol,pObjList,pPV,nTmpOptions,pMVisLay,pObj);
+ pHitObj=CheckSingleSdrObjectHit(aPt,nTol,pObjList,pPV,nTmpOptions,pMVisLay,pObj,&(GetMarkedObjectList()));
if (bBack) nPgNum++;
}
}
@@ -1796,6 +1810,7 @@ sal_Bool SdrMarkView::PickMarkedObj(const Point& rPnt, SdrObject*& rpObj, SdrPag
return bFnd;
}
+
void SdrMarkView::UnmarkAllObj(SdrPageView* pPV)
{
if (GetMarkedObjectCount()!=0) {