Fix context menu launch on mis-spelled word in a cell.

This was broken when the spell check handler was re-implemented
after the cell storage rework.

Change-Id: I4e7e718ffba45b2163bea4dd382f2a49f75fd5f9
diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx
index 1fb0fc8..4cc2242 100644
--- a/sc/source/ui/inc/gridwin.hxx
+++ b/sc/source/ui/inc/gridwin.hxx
@@ -274,8 +274,8 @@ class ScGridWindow : public Window, public DropTargetHelper, public DragSourceHe

    bool            GetEditUrl( const Point& rPos,
                                OUString* pName=0, OUString* pUrl=0, OUString* pTarget=0 );
    bool            GetEditUrlOrError( bool bSpellErr, const Point& rPos,
                                       OUString* pName=0, OUString* pUrl=0, OUString* pTarget=0 );
    bool GetEditUrlOrError(
        const Point& rPos, OUString* pName = NULL, OUString* pUrl = NULL, OUString* pTarget = NULL );

    bool            HitRangeFinder( const Point& rMouse, RfCorner& rCorner, sal_uInt16* pIndex = NULL,
                                    SCsCOL* pAddX = NULL, SCsROW* pAddY = NULL );
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 62b1651..7a6a753 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -2946,11 +2946,12 @@ void ScGridWindow::Command( const CommandEvent& rCEvt )
        Point aPosPixel = rCEvt.GetMousePosPixel();
        Point aMenuPos = aPosPixel;

        SCsCOL nCellX = -1;
        SCsROW nCellY = -1;
        pViewData->GetPosFromPixel(aPosPixel.X(), aPosPixel.Y(), eWhich, nCellX, nCellY);

        if ( bMouse )
        {
            SCsCOL nCellX = -1;
            SCsROW nCellY = -1;
            pViewData->GetPosFromPixel(aPosPixel.X(), aPosPixel.Y(), eWhich, nCellX, nCellY);
            ScDocument* pDoc = pViewData->GetDocument();
            SCTAB nTab = pViewData->GetTabNo();
            const ScTableProtection* pProtect = pDoc->GetTabProtection(nTab);
@@ -2978,10 +2979,12 @@ void ScGridWindow::Command( const CommandEvent& rCEvt )

        sal_Bool bDone = false;
        sal_Bool bEdit = pViewData->HasEditView(eWhich);
        bool bSpellError = mpSpellCheckCxt->isMisspelled(nCellX, nCellY);

        if ( !bEdit )
        {
                // Edit-Zelle mit Spelling-Errors ?
            if ( bMouse && GetEditUrlOrError( sal_True, aPosPixel ) )
            if (bMouse && (GetEditUrlOrError(aPosPixel) || bSpellError))
            {
                //  GetEditUrlOrError hat den Cursor schon bewegt

@@ -3015,7 +3018,7 @@ void ScGridWindow::Command( const CommandEvent& rCEvt )
            //  IsCursorAtWrongSpelledWord could be used for !bMouse
            //  if there was a corresponding ExecuteSpellPopup call

            if( pEditView->IsWrongSpelledWordAtPos( aMenuPos ) )
            if (bSpellError)
            {
                //  Wenn man unter OS/2 neben das Popupmenue klickt, kommt MouseButtonDown
                //  vor dem Ende des Menue-Execute, darum muss SetModified vorher kommen
@@ -5112,11 +5115,11 @@ void ScGridWindow::RFMouseMove( const MouseEvent& rMEvt, sal_Bool bUp )
bool ScGridWindow::GetEditUrl( const Point& rPos,
                               OUString* pName, OUString* pUrl, OUString* pTarget )
{
    return GetEditUrlOrError( false, rPos, pName, pUrl, pTarget );
    return GetEditUrlOrError(rPos, pName, pUrl, pTarget);
}

bool ScGridWindow::GetEditUrlOrError( bool bSpellErr, const Point& rPos,
                                OUString* pName, OUString* pUrl, OUString* pTarget )
bool ScGridWindow::GetEditUrlOrError(
    const Point& rPos, OUString* pName, OUString* pUrl, OUString* pTarget )
{
    //! nPosX/Y mit uebergeben?
    SCsCOL nPosX;
@@ -5177,8 +5180,6 @@ bool ScGridWindow::GetEditUrlOrError( bool bSpellErr, const Point& rPos,
    }
    aDefault.Put( SvxAdjustItem( eSvxAdjust, EE_PARA_JUST ) );
    aEngine.SetDefaults( aDefault );
    if (bSpellErr)
        aEngine.SetControlWord( aEngine.GetControlWord() | EE_CNTRL_ONLINESPELLING );

    MapMode aEditMode = pViewData->GetLogicMode(eWhich);            // ohne Drawing-Skalierung
    Rectangle aLogicEdit = PixelToLogic( aEditRect, aEditMode );
@@ -5254,33 +5255,23 @@ bool ScGridWindow::GetEditUrlOrError( bool bSpellErr, const Point& rPos,
        MapMode aOld = GetMapMode();
        SetMapMode(aEditMode);                  // kein return mehr

        if (bSpellErr)                          // Spelling-Fehler suchen
        const SvxFieldItem* pFieldItem = aTempView.GetFieldUnderMousePointer();
        if (pFieldItem)
        {
            bRet = aTempView.IsWrongSpelledWordAtPos( rPos );
            if ( bRet )
                pViewData->GetView()->SetCursor( nPosX, nPosY );        // Cursor setzen
        }
        else                                    // URL suchen
        {
            const SvxFieldItem* pFieldItem = aTempView.GetFieldUnderMousePointer();

            if (pFieldItem)
            const SvxFieldData* pField = pFieldItem->GetField();
            if ( pField && pField->ISA(SvxURLField) )
            {
                const SvxFieldData* pField = pFieldItem->GetField();
                if ( pField && pField->ISA(SvxURLField) )
                if ( pName || pUrl || pTarget )
                {
                    if ( pName || pUrl || pTarget )
                    {
                        const SvxURLField* pURLField = (const SvxURLField*)pField;
                        if (pName)
                            *pName = pURLField->GetRepresentation();
                        if (pUrl)
                            *pUrl = pURLField->GetURL();
                        if (pTarget)
                            *pTarget = pURLField->GetTargetFrame();
                    }
                    bRet = sal_True;
                    const SvxURLField* pURLField = (const SvxURLField*)pField;
                    if (pName)
                        *pName = pURLField->GetRepresentation();
                    if (pUrl)
                        *pUrl = pURLField->GetURL();
                    if (pTarget)
                        *pTarget = pURLField->GetTargetFrame();
                }
                bRet = sal_True;
            }
        }