summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
Diffstat (limited to 'sd')
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsClipboard.cxx38
-rw-r--r--sd/source/ui/slidesorter/controller/SlsVisibleAreaManager.cxx8
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsVisibleAreaManager.hxx1
3 files changed, 46 insertions, 1 deletions
diff --git a/sd/source/ui/slidesorter/controller/SlsClipboard.cxx b/sd/source/ui/slidesorter/controller/SlsClipboard.cxx
index 4545e371ea37..a0b725c96782 100755
--- a/sd/source/ui/slidesorter/controller/SlsClipboard.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsClipboard.cxx
@@ -46,6 +46,7 @@
#include "controller/SlsSelectionManager.hxx"
#include "controller/SlsTransferableData.hxx"
#include "controller/SlsSelectionObserver.hxx"
+#include "controller/SlsVisibleAreaManager.hxx"
#include "cache/SlsPageCache.hxx"
#include "ViewShellBase.hxx"
@@ -90,6 +91,37 @@
namespace sd { namespace slidesorter { namespace controller {
+namespace {
+/** Temporarily deactivate slide tracking of the VisibleAreaManager.
+ This is used as a workaround to avoid unwanted repositioning of
+ the visible area when the selection of slides is copied to the
+ clipboard (cloning of slides leads to model change notifications
+ for the original model.)
+*/
+class TemporarySlideTrackingDeactivator
+{
+public:
+ TemporarySlideTrackingDeactivator (SlideSorterController& rController)
+ : mrController(rController),
+ mbIsCurrentSlideTrackingActive (
+ mrController.GetVisibleAreaManager().IsCurrentSlideTrackingActive())
+ {
+ if (mbIsCurrentSlideTrackingActive)
+ mrController.GetVisibleAreaManager().DeactivateCurrentSlideTracking();
+ }
+ ~TemporarySlideTrackingDeactivator (void)
+ {
+ if (mbIsCurrentSlideTrackingActive)
+ mrController.GetVisibleAreaManager().ActivateCurrentSlideTracking();
+ }
+
+private:
+ SlideSorterController& mrController;
+ const bool mbIsCurrentSlideTrackingActive;
+};
+} // end of anonymous namespace
+
+
class Clipboard::UndoContext
{
public:
@@ -472,7 +504,11 @@ void Clipboard::CreateSlideTransferable (
pTransferable->SetStartPos (pActionWindow->PixelToLogic(
pActionWindow->GetPointerPosPixel()));
pTransferable->SetObjectDescriptor (aObjDesc);
- pTransferable->SetPageBookmarks (aBookmarkList, !bDrag);
+
+ {
+ TemporarySlideTrackingDeactivator aDeactivator (mrController);
+ pTransferable->SetPageBookmarks (aBookmarkList, !bDrag);
+ }
for (void* p=aBookmarkList.First(); p!=NULL; p=aBookmarkList.Next())
delete static_cast<String*>(p);
diff --git a/sd/source/ui/slidesorter/controller/SlsVisibleAreaManager.cxx b/sd/source/ui/slidesorter/controller/SlsVisibleAreaManager.cxx
index 76e9e411e81e..2b5c244833fc 100644
--- a/sd/source/ui/slidesorter/controller/SlsVisibleAreaManager.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsVisibleAreaManager.cxx
@@ -94,6 +94,14 @@ void VisibleAreaManager::DeactivateCurrentSlideTracking (void)
+bool VisibleAreaManager::IsCurrentSlideTrackingActive (void) const
+{
+ return mbIsCurrentSlideTrackingActive;
+}
+
+
+
+
void VisibleAreaManager::RequestVisible (
const model::SharedPageDescriptor& rpDescriptor,
const bool bForce)
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsVisibleAreaManager.hxx b/sd/source/ui/slidesorter/inc/controller/SlsVisibleAreaManager.hxx
index cdaf9b1588ea..e7a6f12c9dc7 100644
--- a/sd/source/ui/slidesorter/inc/controller/SlsVisibleAreaManager.hxx
+++ b/sd/source/ui/slidesorter/inc/controller/SlsVisibleAreaManager.hxx
@@ -47,6 +47,7 @@ public:
void ActivateCurrentSlideTracking (void);
void DeactivateCurrentSlideTracking (void);
+ bool IsCurrentSlideTrackingActive (void) const;
/** Request the current slide to be moved into the visible area.
This request is only obeyed when the current slide tracking is