fdo51023: Revert e4450c54aee85b295b933e91d207fd8220c01107 for Mac OS X

See bug for discussion. Basically, the root cause to the problem is
that on the Mac, all the drag-and-drop action happens during the call
to pSlideSorterViewShell->StartDrag() in the Initialize method. Thus
no wonder that mpDragAndDropContext is null in the ProcessDragEvent()
as it has not been initialized yet, and is in fact initialised
pointlessly only after the drag-and-drop already has finished.

Reverted just for Mac OS X and ifdefified in a straightforward even if
ugly fashion.

Change-Id: Icfb62fb24a5c72fda39c8bcea125267c99ecf624
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
index a451c12..516ba98 100644
--- a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
@@ -246,10 +246,17 @@ public:
    MultiSelectionModeHandler (
        SlideSorter& rSlideSorter,
        SelectionFunction& rSelectionFunction,
#ifndef MACOSX
        const Point& rMouseModelPosition);
#else
        const Point& rMouseModelPosition,
        const sal_uInt32 nEventCode);
#endif
    virtual ~MultiSelectionModeHandler (void);

#ifndef MACOSX
    void Initialize(const sal_uInt32 nEventCode);
#endif

    virtual SelectionFunction::Mode GetMode (void) const;
    virtual void Abort (void);
@@ -296,10 +303,19 @@ class DragAndDropModeHandler : public SelectionFunction::ModeHandler
public:
    DragAndDropModeHandler (
        SlideSorter& rSlideSorter,
#ifndef MACOSX
        SelectionFunction& rSelectionFunction);
#else
        SelectionFunction& rSelectionFunction,
        const Point& rMousePosition,
        ::Window* pWindow);
#endif
    virtual ~DragAndDropModeHandler (void);

#ifndef MACOSX
    void Initialize(const Point& rMousePosition, ::Window* pWindow);
#endif

    virtual SelectionFunction::Mode GetMode (void) const;
    virtual void Abort (void);

@@ -775,6 +791,7 @@ void SelectionFunction::SwitchToDragAndDropMode (const Point aMousePosition)
{
    if (mpModeHandler->GetMode() != DragAndDropMode)
    {
#ifndef MACOSX
        ::boost::shared_ptr<DragAndDropModeHandler> handler(
            new DragAndDropModeHandler(mrSlideSorter, *this));
        SwitchMode(handler);
@@ -782,6 +799,10 @@ void SelectionFunction::SwitchToDragAndDropMode (const Point aMousePosition)
        // could already trigger DND events, which would recursively trigger this code again,
        // and without mpModeHandler set it would again try to set a new handler.
        handler->Initialize(aMousePosition, mpWindow);
#else
        SwitchMode(::boost::shared_ptr<ModeHandler>(
            new DragAndDropModeHandler(mrSlideSorter, *this, aMousePosition, mpWindow)));
#endif
    }
}

@@ -793,6 +814,7 @@ void SelectionFunction::SwitchToMultiSelectionMode (
    const sal_uInt32 nEventCode)
{
    if (mpModeHandler->GetMode() != MultiSelectionMode)
#ifndef MACOSX
    {
        ::boost::shared_ptr<MultiSelectionModeHandler> handler(
            new MultiSelectionModeHandler(mrSlideSorter, *this, aMousePosition));
@@ -801,6 +823,10 @@ void SelectionFunction::SwitchToMultiSelectionMode (
        // is non-trivial, so it could possibly recurse just like the DND handler above.
        handler->Initialize(nEventCode);
    }
#else
        SwitchMode(::boost::shared_ptr<ModeHandler>(
            new MultiSelectionModeHandler(mrSlideSorter, *this, aMousePosition, nEventCode)));
#endif
}


@@ -1414,7 +1440,12 @@ void NormalModeHandler::ResetButtonDownLocation (void)
MultiSelectionModeHandler::MultiSelectionModeHandler (
    SlideSorter& rSlideSorter,
    SelectionFunction& rSelectionFunction,
#ifndef MACOSX
    const Point& rMouseModelPosition)
#else
    const Point& rMouseModelPosition,
    const sal_uInt32 nEventCode)
#endif
    : ModeHandler(rSlideSorter, rSelectionFunction, false),
      meSelectionMode(SM_Normal),
      maSecondCorner(rMouseModelPosition),
@@ -1423,11 +1454,13 @@ MultiSelectionModeHandler::MultiSelectionModeHandler (
      mnAnchorIndex(-1),
      mnSecondIndex(-1)
{
#ifndef MACOSX
}


void MultiSelectionModeHandler::Initialize(const sal_uInt32 nEventCode)
{
#endif
    const Pointer aSelectionPointer (POINTER_TEXT);
    mrSlideSorter.GetContentWindow()->SetPointer(aSelectionPointer);
    SetSelectionModeFromModifier(nEventCode);
@@ -1683,13 +1716,22 @@ void MultiSelectionModeHandler::UpdateSelection (void)

DragAndDropModeHandler::DragAndDropModeHandler (
    SlideSorter& rSlideSorter,
#ifndef MACOSX
    SelectionFunction& rSelectionFunction)
#else
    SelectionFunction& rSelectionFunction,
    const Point& rMousePosition,
    ::Window* pWindow)
#endif
    : ModeHandler(rSlideSorter, rSelectionFunction, false)
{
#ifndef MACOSX
}


void DragAndDropModeHandler::Initialize(const Point& rMousePosition, ::Window* pWindow)
{
#endif
    SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
    if (pDragTransferable==NULL && mrSlideSorter.GetViewShell() != NULL)
    {