--- sw-Orig/source/ui/inc/view.hxx 2007-06-19 18:39:34.000000000 +0800 +++ sw/source/ui/inc/view.hxx 2007-06-20 09:55:40.000000000 +0800 @@ -512,9 +512,10 @@ static USHORT GetMoveType(); static void SetMoveType(USHORT nSet); - void MoveNavigation(BOOL bNext); static void SetActMark(BYTE nSet); + DECL_STATIC_LINK( SwView, MoveNavigationHdl, BOOL* ); // #i75416# + BOOL HandleWheelCommands( const CommandEvent& ); // Rahmen einfuegen --- sw-Orig/source/ui/uiview/view2.cxx 2007-06-19 18:44:16.000000000 +0800 +++ sw/source/ui/uiview/view2.cxx 2007-06-21 10:59:34.000000000 +0800 @@ -1118,8 +1118,9 @@ if(pArgs && pArgs->GetItemState(FN_SCROLL_NEXT_PREV, FALSE, &pItem)) { // hier sollen nur die Handler der PageUp/DownButtons gerufen werden - BOOL bNext = ((const SfxBoolItem*)pItem)->GetValue(); - MoveNavigation(bNext); + BOOL* pbNext = new BOOL ( ((const SfxBoolItem*)pItem)->GetValue() ); + // #i75416# move the execution of the search to an asynchronously called static link + Application::PostUserEvent( STATIC_LINK(this, SwView, MoveNavigationHdl), pbNext ); } break; case SID_JUMPTOMARK: --- sw-Orig/source/ui/uiview/viewmdi.cxx 2007-06-19 18:43:06.000000000 +0800 +++ sw/source/ui/uiview/viewmdi.cxx 2007-06-21 11:02:50.000000000 +0800 @@ -42,6 +42,9 @@ #include "hintids.hxx" +#ifndef _SV_SVAPP_HXX +#include +#endif #ifndef _SFXDISPATCH_HXX //autogen #include #endif @@ -324,23 +327,28 @@ */ IMPL_LINK( SwView, BtnPage, Button *, pButton ) { - MoveNavigation(pButton == pPageDownBtn); + // #i75416# move the execution of the search to an asynchronously called static link + BOOL* pbNext = new BOOL( FALSE ); + if (pButton == pPageDownBtn) *pbNext = TRUE; + Application::PostUserEvent( STATIC_LINK(this, SwView, MoveNavigationHdl), pbNext ); return 0; } /*-----------------20.06.97 10:46------------------- --------------------------------------------------*/ -void SwView::MoveNavigation(BOOL bNext) +IMPL_STATIC_LINK( SwView, MoveNavigationHdl, BOOL *, pbNext ) { - SwWrtShell& rSh = GetWrtShell(); + if ( !pbNext ) + return 0; + SwWrtShell& rSh = pThis->GetWrtShell(); switch( nMoveType ) { case NID_PGE: - bNext ? PhyPageDown() : PhyPageUp(); + *pbNext ? pThis->PhyPageDown() : pThis->PhyPageUp(); break; case NID_TBL : rSh.EnterStdMode(); - if(bNext) + if(*pbNext) rSh.MoveTable(fnTableNext, fnTableStart); else rSh.MoveTable(fnTablePrev, fnTableStart); @@ -354,7 +362,7 @@ eType = FLY_GRF; else if(nMoveType == NID_OLE) eType = FLY_OLE; - BOOL bSuccess = bNext ? + BOOL bSuccess = *pbNext ? rSh.GotoNextFly(eType) : rSh.GotoPrevFly(eType); if(bSuccess) @@ -366,14 +374,14 @@ break; case NID_DRW : case NID_CTRL: - rSh.GotoObj(bNext, + rSh.GotoObj(*pbNext, nMoveType == NID_DRW ? DRAW_SIMPLE : DRAW_CONTROL); break; case NID_REG : rSh.EnterStdMode(); - if(bNext) + if(*pbNext) rSh.MoveRegion(fnRegionNext, fnRegionStart); else rSh.MoveRegion(fnRegionPrev, fnRegionStart); @@ -381,20 +389,20 @@ break; case NID_BKM : rSh.EnterStdMode(); - GetViewFrame()->GetDispatcher()->Execute(bNext ? + pThis->GetViewFrame()->GetDispatcher()->Execute(*pbNext ? FN_NEXT_BOOKMARK : FN_PREV_BOOKMARK); break; case NID_OUTL: rSh.EnterStdMode(); - bNext ? rSh.GotoNextOutline() : rSh.GotoPrevOutline(); + *pbNext ? rSh.GotoNextOutline() : rSh.GotoPrevOutline(); break; case NID_SEL : - bNext ? rSh.GoNextCrsr() : rSh.GoPrevCrsr(); + *pbNext ? rSh.GoNextCrsr() : rSh.GoPrevCrsr(); break; case NID_FTN: rSh.EnterStdMode(); - bNext ? + *pbNext ? rSh.GotoNextFtnAnchor() : rSh.GotoPrevFtnAnchor(); break; @@ -416,7 +424,7 @@ } if (nMarkCount) { - if(!bNext) + if(!(*pbNext)) { if (nActMark > 1) --nActMark; @@ -438,34 +446,38 @@ { SwFieldType* pFldType = rSh.GetFldType(0, RES_POSTITFLD); - rSh.MoveFldType( pFldType, bNext ); + rSh.MoveFldType( pFldType, *pbNext ); } break; case NID_SRCH_REP: if(pSrchItem) { BOOL bBackward = pSrchItem->GetBackward(); - if(rSh.HasSelection() && !bNext == rSh.IsCrsrPtAtEnd()) + if(rSh.HasSelection() && !(*pbNext) == rSh.IsCrsrPtAtEnd()) rSh.SwapPam(); - pSrchItem->SetBackward(!bNext); - SfxRequest aReq(FN_REPEAT_SEARCH, SFX_CALLMODE_SLOT, GetPool()); - ExecSearch(aReq); + pSrchItem->SetBackward(!(*pbNext)); + SfxRequest aReq(FN_REPEAT_SEARCH, SFX_CALLMODE_SLOT, pThis->GetPool()); + pThis->ExecSearch(aReq); pSrchItem->SetBackward(bBackward); } break; case NID_INDEX_ENTRY: - rSh.GotoNxtPrvTOXMark(bNext); + rSh.GotoNxtPrvTOXMark(*pbNext); break; case NID_TABLE_FORMULA: - rSh.GotoNxtPrvTblFormula( bNext ); + rSh.GotoNxtPrvTblFormula( *pbNext ); break; case NID_TABLE_FORMULA_ERROR: - rSh.GotoNxtPrvTblFormula( bNext, TRUE ); + rSh.GotoNxtPrvTblFormula( *pbNext, TRUE ); break; } - pEditWin->GrabFocus(); + pThis->pEditWin->GrabFocus(); + + delete pbNext; + + return 0; } /************************************************************************* --- sw-Orig/source/ui/utlui/navipi.cxx 2007-06-19 18:41:04.000000000 +0800 +++ sw/source/ui/utlui/navipi.cxx 2007-06-21 10:59:52.000000000 +0800 @@ -371,7 +371,12 @@ { case FN_UP: case FN_DOWN: - pView->MoveNavigation(FN_DOWN == nId); + { + // #i75416# move the execution of the search to an asynchronously called static link + BOOL* pbNext = new BOOL( FALSE ); + if (FN_DOWN == nId) *pbNext = TRUE; + Application::PostUserEvent( STATIC_LINK(pView, SwView, MoveNavigationHdl), pbNext ); + } break; case FN_SHOW_ROOT: {