--- main/sw/inc/fesh.hxx (revision 1343549) +++ main/sw/inc/fesh.hxx (working copy) @@ -475,6 +475,7 @@ const SdrObject* GetBestObject( sal_Bool bNext, sal_uInt16 eType = GOTOOBJ_DRAW_ANY, sal_Bool bFlat = sal_True, const ::svx::ISdrObjectFilter* pFilter = NULL ); sal_Bool GotoObj( sal_Bool bNext, sal_uInt16 /*GOTOOBJ_...*/ eType = GOTOOBJ_DRAW_ANY); + void GotoStartEndObj( sal_Bool bStart); //Setzen vom DragMode (z.B. Rotate), tut nix bei Rahmenselektion. void SetDragMode( sal_uInt16 eSdrDragMode ); --- main/sw/source/core/frmedt/feshview.cxx (revision 1343549) +++ main/sw/source/core/frmedt/feshview.cxx (working copy) @@ -1276,6 +1276,37 @@ }; } +void SwFEShell::GotoStartEndObj(sal_Bool bStart) +{ + if (!Imp() || !Imp()->HasDrawView()) + return; + + const SdrMarkList &rMrkList = Imp()->GetDrawView()->GetMarkedObjectList(); + if (rMrkList.GetMark(0) == NULL) + return; + const SdrObject* pStartObj = rMrkList.GetMark(0)->GetMarkedSdrObj(); + + if (!pStartObj) + return; + + SdrObjList* pList = pStartObj->GetObjList(); + + if (!pList) + return; + + if (pList->GetObjCount() == 0) + return; + + sal_uLong nEnd = pList->GetObjCount() - 1; + SdrObject* pObj = bStart ? pList->GetObj( 0 ) : pList->GetObj( nEnd ); + + if (!pObj) + return; + + SelectObj(Point(), 0, pObj); + + return; +} const SdrObject* SwFEShell::GetBestObject( sal_Bool bNext, sal_uInt16 /*GOTOOBJ_...*/ eType, sal_Bool bFlat, const ::svx::ISdrObjectFilter* pFilter ) { if( !Imp()->HasDrawView() ) --- main/sw/source/ui/docvw/edtwin.cxx (revision 1343549) +++ main/sw/source/ui/docvw/edtwin.cxx (working copy) @@ -1473,6 +1473,7 @@ KS_NextCell, KS_PrevCell, KS_OutlineUp, KS_OutlineDown, KS_GlossaryExpand, KS_NextPrevGlossary, KS_AutoFmtByInput, + KS_StartObj, KS_EndObj, KS_NextObject, KS_PrevObject, KS_KeyToView, KS_LaunchOLEObject, KS_GoIntoFly, KS_GoIntoDrawing, @@ -1917,6 +1918,22 @@ nTblChgSize = pModOpt->GetTblVInsert(); goto KEYINPUT_CHECKTABLE_INSDEL; } + case KEY_HOME | KEY_MOD1: + { + if(rSh.GetSelectionType() & nsSelectionType::SEL_DRW) + { + eKeyState = KS_StartObj; + } + } + break; + case KEY_END | KEY_MOD1: + { + if(rSh.GetSelectionType() & nsSelectionType::SEL_DRW) + { + eKeyState = KS_EndObj; + } + } + break; case KEY_TAB: { @@ -2445,6 +2462,12 @@ // case KS_NumOrNoNum: // break; + case KS_StartObj: + case KS_EndObj: + { + rSh.GotoStartEndObj(eKeyState == KS_StartObj); + } + break; case KS_NextObject: case KS_PrevObject: if(rSh.GotoObj( KS_NextObject == eKeyState, GOTOOBJ_GOTO_ANY))