slidesorter1: #i116412# Temporarily turning off slide tracking to avoid unwanted repositioning of visible area.

* found as LGPLv3-only fix at svn rev 1172132 (http://svn.apache.org/viewvc?view=revision&revision=1172132)
This commit is contained in:
mst 2011-09-17 22:43:38 +00:00 committed by Thorsten Behrens
parent bdfbbb33a4
commit 6e26550c82
3 changed files with 46 additions and 1 deletions

View file

@ -46,6 +46,7 @@
#include "controller/SlsSelectionManager.hxx"
#include "controller/SlsTransferable.hxx"
#include "controller/SlsSelectionObserver.hxx"
#include "controller/SlsVisibleAreaManager.hxx"
#include "cache/SlsPageCache.hxx"
#include "ViewShellBase.hxx"
@ -84,6 +85,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:
@ -466,7 +498,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);

View file

@ -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)

View file

@ -48,6 +48,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