summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
authorTor Lillqvist <tml@iki.fi>2012-11-07 15:50:21 +0200
committerTor Lillqvist <tml@iki.fi>2012-11-07 15:54:26 +0200
commit192a0eb2beccee5349c3c7b60208aa95eb985f35 (patch)
treebb1f58b387d010c4f5d8b4d5f98967debef8741b /sd
parent7551d099d853fe5fbafc4d6a3bf4d71ac0e66dd1 (diff)
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
Diffstat (limited to 'sd')
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx42
1 files changed, 42 insertions, 0 deletions
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
index a451c12c0176..516ba9811b15 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)
{