summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
Diffstat (limited to 'sd')
-rwxr-xr-x[-rw-r--r--]sd/inc/EffectMigration.hxx3
-rwxr-xr-xsd/source/core/CustomAnimationEffect.cxx16
-rwxr-xr-xsd/source/core/CustomAnimationPreset.cxx4
-rwxr-xr-x[-rw-r--r--]sd/source/core/EffectMigration.cxx26
-rwxr-xr-xsd/source/core/stlpool.cxx17
-rwxr-xr-xsd/source/filter/html/htmlex.hxx2
-rwxr-xr-xsd/source/ui/accessibility/AccessibleTreeNode.cxx19
-rwxr-xr-xsd/source/ui/animations/CustomAnimationPane.cxx2
-rwxr-xr-xsd/source/ui/annotations/annotationmanager.cxx9
-rwxr-xr-xsd/source/ui/app/sdxfer.cxx51
-rwxr-xr-xsd/source/ui/dlg/SpellDialogChildWindow.cxx2
-rwxr-xr-xsd/source/ui/dlg/dlgass.cxx4
-rw-r--r--[-rwxr-xr-x]sd/source/ui/dlg/present.cxx42
-rwxr-xr-xsd/source/ui/dlg/sdtreelb.cxx126
-rwxr-xr-xsd/source/ui/docshell/docshel4.cxx1
-rwxr-xr-xsd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.cxx4
-rwxr-xr-xsd/source/ui/framework/configuration/ConfigurationUpdater.cxx4
-rwxr-xr-xsd/source/ui/framework/configuration/ResourceId.cxx12
-rw-r--r--sd/source/ui/framework/factories/BasicViewFactory.cxx2
-rwxr-xr-xsd/source/ui/func/fupage.cxx27
-rwxr-xr-xsd/source/ui/func/futempl.cxx41
-rwxr-xr-xsd/source/ui/inc/sdtreelb.hxx16
-rwxr-xr-xsd/source/ui/inc/sdxfer.hxx32
-rwxr-xr-xsd/source/ui/slideshow/slideshow.cxx59
-rwxr-xr-xsd/source/ui/slideshow/slideshow.src6
-rwxr-xr-xsd/source/ui/slideshow/slideshowimpl.cxx1
-rw-r--r--sd/source/ui/slidesorter/controller/SlideSorterController.cxx5
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsAnimator.cxx2
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsClipboard.cxx180
-rw-r--r--sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx19
-rw-r--r--sd/source/ui/slidesorter/controller/SlsInsertionIndicatorHandler.cxx2
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx2
-rwxr-xr-xsd/source/ui/slidesorter/controller/SlsTransferableData.cxx (renamed from sd/source/ui/slidesorter/controller/SlsTransferable.cxx)64
-rwxr-xr-xsd/source/ui/slidesorter/controller/makefile.mk2
-rwxr-xr-xsd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx23
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsInsertionIndicatorHandler.hxx4
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlsTransferableData.hxx (renamed from sd/source/ui/slidesorter/inc/controller/SlsTransferable.hxx)33
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx2
-rw-r--r--sd/source/ui/slidesorter/inc/view/SlsInsertionIndicatorOverlay.hxx9
-rw-r--r--sd/source/ui/slidesorter/view/SlideSorterView.cxx12
-rw-r--r--sd/source/ui/slidesorter/view/SlsInsertionIndicatorOverlay.cxx12
-rwxr-xr-xsd/source/ui/table/tablefunction.cxx5
-rwxr-xr-xsd/source/ui/toolpanel/controls/DocumentHelper.cxx2
-rwxr-xr-xsd/source/ui/unoidl/unoobj.cxx27
-rwxr-xr-xsd/source/ui/view/DocumentRenderer.cxx4
-rwxr-xr-xsd/source/ui/view/ViewTabBar.cxx2
-rwxr-xr-xsd/source/ui/view/sdview2.cxx4
-rwxr-xr-xsd/source/ui/view/sdwindow.cxx2
48 files changed, 694 insertions, 251 deletions
diff --git a/sd/inc/EffectMigration.hxx b/sd/inc/EffectMigration.hxx
index eb173f495de2..3dd0e0dfe8ad 100644..100755
--- a/sd/inc/EffectMigration.hxx
+++ b/sd/inc/EffectMigration.hxx
@@ -36,6 +36,7 @@ class SdPage;
class SvxShape;
class SdAnimationInfo;
class SdrObject;
+class SdrPathObj;
namespace sd {
@@ -76,6 +77,8 @@ public:
static void UpdateSoundEffect( SvxShape* pShape, SdAnimationInfo* pInfo );
static ::rtl::OUString GetSoundFile( SvxShape* pShape );
static sal_Bool GetSoundOn( SvxShape* pShape );
+
+ static void SetAnimationPath( SvxShape* pShape, SdrPathObj* pPathObj );
};
} // end of namespace sd
diff --git a/sd/source/core/CustomAnimationEffect.cxx b/sd/source/core/CustomAnimationEffect.cxx
index 33b9c233909b..9ce0084ddbd3 100755
--- a/sd/source/core/CustomAnimationEffect.cxx
+++ b/sd/source/core/CustomAnimationEffect.cxx
@@ -72,6 +72,8 @@
#include <cppuhelper/implbase1.hxx>
+#include <drawinglayer/geometry/viewinformation2d.hxx>
+#include <svx/sdr/contact/viewcontact.hxx>
#include <svx/svdopath.hxx>
#include <svx/svdpage.hxx>
#include <svx/unoapi.hxx>
@@ -1738,7 +1740,19 @@ void CustomAnimationEffect::updatePathFromSdrPathObj( const SdrPathObj& rPathObj
SdrObject* pObj = GetSdrObjectFromXShape( getTargetShape() );
if( pObj )
{
- const Rectangle aBoundRect( pObj->GetCurrentBoundRect() );
+ Rectangle aBoundRect(0,0,0,0);
+
+ const drawinglayer::primitive2d::Primitive2DSequence xPrimitives(pObj->GetViewContact().getViewIndependentPrimitive2DSequence());
+ const drawinglayer::geometry::ViewInformation2D aViewInformation2D;
+ const basegfx::B2DRange aRange(drawinglayer::primitive2d::getB2DRangeFromPrimitive2DSequence(xPrimitives, aViewInformation2D));
+
+ if(!aRange.isEmpty())
+ {
+ aBoundRect = Rectangle(
+ (sal_Int32)floor(aRange.getMinX()), (sal_Int32)floor(aRange.getMinY()),
+ (sal_Int32)ceil(aRange.getMaxX()), (sal_Int32)ceil(aRange.getMaxY()));
+ }
+
const Point aCenter( aBoundRect.Center() );
xPolyPoly.transform(basegfx::tools::createTranslateB2DHomMatrix(-aCenter.X(), -aCenter.Y()));
diff --git a/sd/source/core/CustomAnimationPreset.cxx b/sd/source/core/CustomAnimationPreset.cxx
index 4d29833e637a..c512ab084da9 100755
--- a/sd/source/core/CustomAnimationPreset.cxx
+++ b/sd/source/core/CustomAnimationPreset.cxx
@@ -645,7 +645,7 @@ Reference< XAnimationNode > CustomAnimationPresets::getRandomPreset( sal_Int16 n
sal_Int32 nCategory = (rand() * pCategoryList->size() / RAND_MAX);
PresetCategoryPtr pCategory = (*pCategoryList)[nCategory];
- if( pCategory.get() && pCategory->maEffects.size() )
+ if( pCategory.get() && !pCategory->maEffects.empty() )
{
sal_Int32 nDescriptor = (rand() * pCategory->maEffects.size() / RAND_MAX);
CustomAnimationPresetPtr pPreset = pCategory->maEffects[nDescriptor];
@@ -654,7 +654,7 @@ Reference< XAnimationNode > CustomAnimationPresets::getRandomPreset( sal_Int16 n
UStringList aSubTypes = pPreset->getSubTypes();
OUString aSubType;
- if( aSubTypes.size() )
+ if( !aSubTypes.empty() )
{
sal_Int32 nSubType = (rand() * aSubTypes.size() / RAND_MAX);
aSubType = aSubTypes[nSubType];
diff --git a/sd/source/core/EffectMigration.cxx b/sd/source/core/EffectMigration.cxx
index cbb9a1019baf..26d032d8bb6f 100644..100755
--- a/sd/source/core/EffectMigration.cxx
+++ b/sd/source/core/EffectMigration.cxx
@@ -33,6 +33,7 @@
#include <com/sun/star/presentation/ParagraphTarget.hpp>
#include <svx/unoshape.hxx>
#include <svx/svdotext.hxx>
+#include <svx/svdopath.hxx>
#include "drawdoc.hxx"
#include "sdpage.hxx"
#include <CustomAnimationPreset.hxx>
@@ -1342,3 +1343,28 @@ sal_Bool EffectMigration::GetSoundOn( SvxShape* pShape )
return GetSoundFile( pShape ).getLength() != 0;
}
+// --------------------------------------------------------------------
+
+void EffectMigration::SetAnimationPath( SvxShape* pShape, SdrPathObj* pPathObj )
+{
+ if( pShape && pPathObj )
+ {
+ SdrObject* pObj = pShape->GetSdrObject();
+
+ if( pObj )
+ {
+ //sd::MainSequencePtr pMainSequence = static_cast<SdPage*>(pObj->GetPage())->getMainSequence();
+
+ const Reference< XShape > xShape( pShape );
+ SdPage* pPage = dynamic_cast< SdPage* >( pPathObj ? pPathObj->GetPage() : 0 );
+ if( pPage )
+ {
+ boost::shared_ptr< sd::MainSequence > pMainSequence( pPage->getMainSequence() );
+ if( pMainSequence.get() )
+ CustomAnimationEffectPtr pCreated( pMainSequence->append( *pPathObj, makeAny( xShape ), -1.0 ) );
+ }
+ }
+ }
+}
+
+
diff --git a/sd/source/core/stlpool.cxx b/sd/source/core/stlpool.cxx
index a2abfd199fe9..5ab07b5f82e4 100755
--- a/sd/source/core/stlpool.cxx
+++ b/sd/source/core/stlpool.cxx
@@ -1099,32 +1099,33 @@ void SdStyleSheetPool::PutNumBulletItem( SfxStyleSheetBase* pSheet,
switch(i)
{
case 0:
- case 1:
{
nFontSize = 32;
nFirstLineOffset = -900;
}
break;
- case 2:
+ case 1:
{
- nFontSize = 28;
- nFirstLineOffset = -800;
aNumberFormat.SetBulletChar( 0x2013 ); // StarBats: 0xF000 + 150
aNumberFormat.SetBulletRelSize(75);
+ nFontSize = 32;
+ nFirstLineOffset = -900;
}
break;
- case 3:
+ case 2:
{
- nFontSize = 24;
+ nFontSize = 28;
+ nFirstLineOffset = -800;
}
break;
- case 4:
+ case 3:
{
- aNumberFormat.SetBulletChar( 0x2013 ); // StarBats: 0xF000 + 150
+ aNumberFormat.SetBulletChar( 0x2013 ); // StarBats: 0xF000 + 150
aNumberFormat.SetBulletRelSize(75);
+ nFontSize = 24;
}
break;
}
diff --git a/sd/source/filter/html/htmlex.hxx b/sd/source/filter/html/htmlex.hxx
index 6c766ed19fe3..5abc7eed6c43 100755
--- a/sd/source/filter/html/htmlex.hxx
+++ b/sd/source/filter/html/htmlex.hxx
@@ -59,8 +59,6 @@
#define PUB_HIGHRES_WIDTH 1024
#define PUB_HIGHRES_HEIGHT 768
-#define HtmlButtonThemaStr = "private://gallery/hidden/HtmlExportButtons";
-
class List;
class SfxProgress;
class SdrOutliner;
diff --git a/sd/source/ui/accessibility/AccessibleTreeNode.cxx b/sd/source/ui/accessibility/AccessibleTreeNode.cxx
index 71e4c74dd70f..28ef807b0ebc 100755
--- a/sd/source/ui/accessibility/AccessibleTreeNode.cxx
+++ b/sd/source/ui/accessibility/AccessibleTreeNode.cxx
@@ -134,8 +134,11 @@ void SAL_CALL AccessibleTreeNode::disposing (void)
// probably are by now more or less dead and we must not call them to
// unregister.
- comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( mnClientId, *this );
- mnClientId = 0;
+ if (mnClientId != 0)
+ {
+ comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( mnClientId, *this );
+ mnClientId = 0;
+ }
}
@@ -361,9 +364,10 @@ void SAL_CALL AccessibleTreeNode::addEventListener(
}
else
{
- if ( ! mnClientId)
+ if (mnClientId == 0)
mnClientId = comphelper::AccessibleEventNotifier::registerClient();
- comphelper::AccessibleEventNotifier::addEventListener(mnClientId, rxListener);
+ if (mnClientId != 0)
+ comphelper::AccessibleEventNotifier::addEventListener(mnClientId, rxListener);
}
}
}
@@ -387,8 +391,11 @@ void SAL_CALL AccessibleTreeNode::removeEventListener(
// -> revoke ourself. This may lead to the notifier thread dying (if we were the last client),
// and at least to us not firing any events anymore, in case somebody calls
// NotifyAccessibleEvent, again
- comphelper::AccessibleEventNotifier::revokeClient( mnClientId );
- mnClientId = 0;
+ if (mnClientId != 0)
+ {
+ comphelper::AccessibleEventNotifier::revokeClient( mnClientId );
+ mnClientId = 0;
+ }
}
}
}
diff --git a/sd/source/ui/animations/CustomAnimationPane.cxx b/sd/source/ui/animations/CustomAnimationPane.cxx
index 73d595a8eb1e..b83285647256 100755
--- a/sd/source/ui/animations/CustomAnimationPane.cxx
+++ b/sd/source/ui/animations/CustomAnimationPane.cxx
@@ -2044,7 +2044,7 @@ void CustomAnimationPane::createPath( PathKind eKind, std::vector< Any >& rTarge
void CustomAnimationPane::onRemove()
{
- if( maListSelection.size() )
+ if( !maListSelection.empty() )
{
addUndo();
diff --git a/sd/source/ui/annotations/annotationmanager.cxx b/sd/source/ui/annotations/annotationmanager.cxx
index cea71438ee4f..dc10b355de27 100755
--- a/sd/source/ui/annotations/annotationmanager.cxx
+++ b/sd/source/ui/annotations/annotationmanager.cxx
@@ -48,6 +48,8 @@
#include <unotools/syslocale.hxx>
#include <unotools/saveopt.hxx>
+#include <tools/datetime.hxx>
+
#include <sfx2/imagemgr.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/bindings.hxx>
@@ -152,11 +154,8 @@ static SfxDispatcher* getDispatcher( ViewShellBase& rBase )
com::sun::star::util::DateTime getCurrentDateTime()
{
- TimeValue osltime;
- osl_getSystemTime( &osltime );
- oslDateTime osldt;
- osl_getDateTimeFromTimeValue( &osltime, &osldt );
- return com::sun::star::util::DateTime( 0, osldt.Seconds, osldt.Minutes, osldt.Hours, osldt.Day, osldt.Month, osldt.Year );
+ DateTime aCurrentDate;
+ return com::sun::star::util::DateTime( 0, aCurrentDate.GetSec(), aCurrentDate.GetMin(), aCurrentDate.GetHour(), aCurrentDate.GetDay(), aCurrentDate.GetMonth(), aCurrentDate.GetYear() );
}
OUString getAnnotationDateTimeString( const Reference< XAnnotation >& xAnnotation )
diff --git a/sd/source/ui/app/sdxfer.cxx b/sd/source/ui/app/sdxfer.cxx
index 48a1f35436e9..475f3d489bfd 100755
--- a/sd/source/ui/app/sdxfer.cxx
+++ b/sd/source/ui/app/sdxfer.cxx
@@ -123,6 +123,7 @@ SdTransferable::SdTransferable( SdDrawDocument* pSrcDoc, ::sd::View* pWorkView,
, mbPageTransferable( sal_False )
, mbPageTransferablePersistent( sal_False )
, mbIsUnoObj( false )
+, maUserData()
{
if( mpSourceDoc )
StartListening( *mpSourceDoc );
@@ -345,7 +346,9 @@ void SdTransferable::CreateData()
if( 1 == mpSdDrawDocumentIntern->GetPageCount() )
{
- Point aOrigin( ( maVisArea = mpSdViewIntern->GetAllMarkedRect() ).TopLeft() );
+ // #112978# need to use GetAllMarkedBoundRect instead of GetAllMarkedRect to get
+ // fat lines correctly
+ Point aOrigin( ( maVisArea = mpSdViewIntern->GetAllMarkedBoundRect() ).TopLeft() );
Size aVector( -aOrigin.X(), -aOrigin.Y() );
for( sal_uLong nObj = 0, nObjCount = pPage->GetObjCount(); nObj < nObjCount; nObj++ )
@@ -798,6 +801,52 @@ sal_Int64 SAL_CALL SdTransferable::getSomething( const ::com::sun::star::uno::Se
return nRet;
}
+
+
+
+SdDrawDocument* SdTransferable::GetSourceDoc (void) const
+{
+ return mpSourceDoc;
+}
+
+
+
+
+void SdTransferable::AddUserData (const ::boost::shared_ptr<UserData>& rpData)
+{
+ maUserData.push_back(rpData);
+}
+
+
+
+
+void SdTransferable::RemoveUserData (const ::boost::shared_ptr<UserData>& rpData)
+{
+ maUserData.erase(::std::find(maUserData.begin(), maUserData.end(), rpData));
+}
+
+
+
+
+sal_Int32 SdTransferable::GetUserDataCount (void) const
+{
+ return maUserData.size();
+}
+
+
+
+
+::boost::shared_ptr<SdTransferable::UserData> SdTransferable::GetUserData (const sal_Int32 nIndex) const
+{
+ if (nIndex>=0 && nIndex<sal_Int32(maUserData.size()))
+ return maUserData[nIndex];
+ else
+ return ::boost::shared_ptr<UserData>();
+}
+
+
+
+
// -----------------------------------------------------------------------------
const ::com::sun::star::uno::Sequence< sal_Int8 >& SdTransferable::getUnoTunnelId()
diff --git a/sd/source/ui/dlg/SpellDialogChildWindow.cxx b/sd/source/ui/dlg/SpellDialogChildWindow.cxx
index aa93635c4032..2121ffbe2a50 100755
--- a/sd/source/ui/dlg/SpellDialogChildWindow.cxx
+++ b/sd/source/ui/dlg/SpellDialogChildWindow.cxx
@@ -108,7 +108,7 @@ void SpellDialogChildWindow::InvalidateSpellDialog (void)
// Close the spell check dialog when there are no more sentences to
// check.
- if (aResult.size() == 0)
+ if (aResult.empty())
{
SfxBoolItem aItem (SID_SPELL_DIALOG, sal_False);
GetBindings().GetDispatcher()->Execute(
diff --git a/sd/source/ui/dlg/dlgass.cxx b/sd/source/ui/dlg/dlgass.cxx
index 074ab49d97bb..3e56f747766f 100755
--- a/sd/source/ui/dlg/dlgass.cxx
+++ b/sd/source/ui/dlg/dlgass.cxx
@@ -907,7 +907,7 @@ void AssistentDlgImpl::TemplateScanDone (
// HACK! presnt directory is always initially selected.
// We have to look at the first entry to get a URL.
- if (pDir->maEntries.size() > 0)
+ if (!pDir->maEntries.empty() )
{
TemplateEntry* pEntry = pDir->maEntries.front();
if (pEntry != NULL)
@@ -932,7 +932,7 @@ void AssistentDlgImpl::TemplateScanDone (
// HACK! layout directory is always initially selected.
// We have to look at the first entry to get a URL.
- if (pDir->maEntries.size() > 0)
+ if (!pDir->maEntries.empty() )
{
TemplateEntry* pEntry = pDir->maEntries.front();
if (pEntry != NULL)
diff --git a/sd/source/ui/dlg/present.cxx b/sd/source/ui/dlg/present.cxx
index aa44dd340a00..51f49bc03032 100755..100644
--- a/sd/source/ui/dlg/present.cxx
+++ b/sd/source/ui/dlg/present.cxx
@@ -207,38 +207,60 @@ void SdStartPresentationDlg::InitMonitorSettings()
else
{
sal_Bool bMultiscreen = false;
- sal_Int32 nPrimaryIndex = 0;
+ sal_Int32 nDefaultDisplay (0);
Reference< XPropertySet > xMonProps( xMultiMon, UNO_QUERY );
if( xMonProps.is() ) try
{
const OUString sPropName1( RTL_CONSTASCII_USTRINGPARAM( "MultiDisplay" ) );
xMonProps->getPropertyValue( sPropName1 ) >>= bMultiscreen;
const OUString sPropName2( RTL_CONSTASCII_USTRINGPARAM( "DefaultDisplay" ) );
- xMonProps->getPropertyValue( sPropName2 ) >>= nPrimaryIndex;
+ xMonProps->getPropertyValue( sPropName2 ) >>= nDefaultDisplay;
}
catch( Exception& )
{
}
+ sal_Int32 nSelectedIndex (-1);
+ sal_Int32 nDefaultDisplayIndex (-1);
+ const sal_Int32 nDefaultSelectedDisplay (
+ ( ( const SfxInt32Item& ) rOutAttrs.Get( ATTR_PRESENT_DISPLAY ) ).GetValue());
const String sPlaceHolder( RTL_CONSTASCII_USTRINGPARAM( "%1" ) );
for( sal_Int32 nDisplay = 0; nDisplay < mnMonitors; nDisplay++ )
{
- String aName( nDisplay == nPrimaryIndex ? msPrimaryMonitor : msMonitor );
+ String aName( nDisplay == nDefaultDisplay ? msPrimaryMonitor : msMonitor );
const String aNumber( String::CreateFromInt32( nDisplay + 1 ) );
aName.SearchAndReplace( sPlaceHolder, aNumber );
maLBMonitor.InsertEntry( aName );
+
+ // Store display index together with name.
+ const sal_uInt32 nEntryIndex (maLBMonitor.GetEntryCount()-1);
+ maLBMonitor.SetEntryData(nEntryIndex, (void*)nDisplay);
+
+ // Remember the index of the default selection.
+ if (nDefaultSelectedDisplay == nDisplay)
+ nSelectedIndex = nEntryIndex;
+
+ // Remember index of the default display.
+ if (nDisplay == nDefaultDisplay)
+ nDefaultDisplayIndex = nEntryIndex;
}
if( !bMultiscreen )
+ {
maLBMonitor.InsertEntry( msAllMonitors );
+ const sal_uInt32 nEntryIndex (maLBMonitor.GetEntryCount()-1);
+ maLBMonitor.SetEntryData(nEntryIndex, (void*)-1);
+ if (nDefaultSelectedDisplay == -1)
+ nSelectedIndex = nEntryIndex;
+ }
- sal_Int32 nSelected = ( ( const SfxInt32Item& ) rOutAttrs.Get( ATTR_PRESENT_DISPLAY ) ).GetValue();
- if( nSelected <= 0 )
- nSelected = nPrimaryIndex;
- else
- nSelected--;
+ if (nSelectedIndex < 0)
+ if (nDefaultSelectedDisplay < 0)
+ nSelectedIndex = 0;
+ else
+ nSelectedIndex = nDefaultDisplayIndex;
- maLBMonitor.SelectEntryPos( (sal_uInt16)nSelected );
+ maLBMonitor.SelectEntryPos((sal_uInt16)nSelectedIndex);
}
}
catch( Exception& )
@@ -268,7 +290,7 @@ void SdStartPresentationDlg::GetAttr( SfxItemSet& rAttr )
sal_uInt16 nPos = maLBMonitor.GetSelectEntryPos();
if( nPos != LISTBOX_ENTRY_NOTFOUND )
- rAttr.Put( SfxInt32Item ( ATTR_PRESENT_DISPLAY, nPos + 1 ) );
+ rAttr.Put( SfxInt32Item ( ATTR_PRESENT_DISPLAY, (sal_Int32)(sal_IntPtr)maLBMonitor.GetEntryData(nPos)) );
nPos = aLbCustomshow.GetSelectEntryPos();
if( nPos != LISTBOX_ENTRY_NOTFOUND )
diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx
index 263f221332d6..c8c794a40041 100755
--- a/sd/source/ui/dlg/sdtreelb.cxx
+++ b/sd/source/ui/dlg/sdtreelb.cxx
@@ -53,11 +53,16 @@
#include "strings.hrc"
#endif
#include "res_bmp.hrc"
+#include "ViewShell.hxx"
+#include "DrawController.hxx"
+#include "ViewShellBase.hxx"
#include <com/sun/star/embed/XEmbedPersist.hpp>
+#include <com/sun/star/frame/XDesktop.hpp>
+#include <com/sun/star/frame/XFramesSupplier.hpp>
#include <svtools/embedtransfer.hxx>
+#include <comphelper/processfactory.hxx>
#include <tools/diagnose_ex.h>
-#include <ViewShell.hxx>
using namespace com::sun::star;
@@ -153,6 +158,7 @@ sal_Bool SdPageObjsTLB::SdPageObjsTransferable::GetData( const ::com::sun::star:
void SdPageObjsTLB::SdPageObjsTransferable::DragFinished( sal_Int8 nDropAction )
{
mrParent.OnDragFinished( nDropAction );
+ SdTransferable::DragFinished(nDropAction);
}
// -----------------------------------------------------------------------------
@@ -234,6 +240,9 @@ sal_uInt32 SdPageObjsTLB::SdPageObjsTransferable::GetListBoxDropFormatId (void)
return mnListBoxDropFormatId;
}
+
+
+
/*************************************************************************
|*
|* Ctor1 SdPageObjsTLB
@@ -1049,6 +1058,11 @@ void SdPageObjsTLB::DoDrag()
if( eDragType == NAVIGATOR_DRAGTYPE_LINK )
nDNDActions = DND_ACTION_LINK; // #93240# Either COPY *or* LINK, never both!
+ else if (mpDoc->GetSdPageCount(PK_STANDARD) == 1)
+ {
+ // Can not move away the last slide in a document.
+ nDNDActions = DND_ACTION_COPY;
+ }
SvTreeListBox::ReleaseMouse();
@@ -1066,16 +1080,15 @@ void SdPageObjsTLB::DoDrag()
// object is destroyed by internal reference mechanism
SdTransferable* pTransferable = new SdPageObjsTLB::SdPageObjsTransferable(
*this, aBookmark, *pDocShell, eDragType, aTreeListBoxData);
- OSL_TRACE("created new SdPageObjsTransferable at %x", pTransferable);
// Get the view.
- sd::View* pView = NULL;
- if (pDocShell != NULL)
+ ::sd::ViewShell* pViewShell = GetViewShellForDocShell(*pDocShell);
+ if (pViewShell == NULL)
{
- ::sd::ViewShell* pViewShell = pDocShell->GetViewShell();
- if (pViewShell != NULL)
- pView = pViewShell->GetView();
+ OSL_ASSERT(pViewShell!=NULL);
+ return;
}
+ sd::View* pView = pViewShell->GetView();
if (pView == NULL)
{
OSL_ASSERT(pView!=NULL);
@@ -1086,27 +1099,32 @@ void SdPageObjsTLB::DoDrag()
void* pUserData = GetCurEntry()->GetUserData();
if (pUserData != NULL && pUserData != (void*)1)
pObject = reinterpret_cast<SdrObject*>(pUserData);
- if (pObject == NULL)
- return;
+ if (pObject != NULL)
+ {
+ // For shapes without a user supplied name (the automatically
+ // created name does not count), a different drag and drop technique
+ // is used.
+ if (GetObjectName(pObject, false).Len() == 0)
+ {
+ AddShapeToTransferable(*pTransferable, *pObject);
+ pTransferable->SetView(pView);
+ SD_MOD()->pTransferDrag = pTransferable;
+ }
- // For shapes without a user supplied name (the automatically
- // created name does not count), a different drag and drop technique
- // is used.
- if (GetObjectName(pObject, false).Len() == 0)
+ // Unnamed shapes have to be selected to be recognized by the
+ // current drop implementation. In order to have a consistent
+ // behaviour for all shapes, every shape that is to be dragged is
+ // selected first.
+ SdrPageView* pPageView = pView->GetSdrPageView();
+ pView->UnmarkAllObj(pPageView);
+ pView->MarkObj(pObject, pPageView);
+ }
+ else
{
- AddShapeToTransferable(*pTransferable, *pObject);
pTransferable->SetView(pView);
SD_MOD()->pTransferDrag = pTransferable;
}
- // Unnamed shapes have to be selected to be recognized by the
- // current drop implementation. In order to have a consistent
- // behaviour for all shapes, every shape that is to be dragged is
- // selected first.
- SdrPageView* pPageView = pView->GetSdrPageView();
- pView->UnmarkAllObj(pPageView);
- pView->MarkObj(pObject, pPageView);
-
pTransferable->StartDrag( this, nDNDActions );
}
}
@@ -1337,8 +1355,6 @@ SvLBoxEntry* SdPageObjsTLB::GetDropTarget (const Point& rLocation)
if (pEntry == NULL)
return NULL;
- OSL_TRACE("entry is %s",
- ::rtl::OUStringToOString(GetEntryText(pEntry), RTL_TEXTENCODING_UTF8).getStr());
if (GetParent(pEntry) == NULL)
{
// Use page entry as insertion position.
@@ -1361,8 +1377,6 @@ SvLBoxEntry* SdPageObjsTLB::GetDropTarget (const Point& rLocation)
else
break;
}
- OSL_TRACE("returning %s",
- ::rtl::OUStringToOString(GetEntryText(pEntry), RTL_TEXTENCODING_UTF8).getStr());
}
return pEntry;
@@ -1441,6 +1455,66 @@ void SdPageObjsTLB::AddShapeToTransferable (
+::sd::ViewShell* SdPageObjsTLB::GetViewShellForDocShell (::sd::DrawDocShell& rDocShell)
+{
+ {
+ ::sd::ViewShell* pViewShell = rDocShell.GetViewShell();
+ if (pViewShell != NULL)
+ return pViewShell;
+ }
+
+ try
+ {
+ // Get a component enumeration from the desktop and search it for documents.
+ uno::Reference<lang::XMultiServiceFactory> xFactory (
+ ::comphelper::getProcessServiceFactory ());
+ if ( ! xFactory.is())
+ return NULL;
+
+ uno::Reference<frame::XDesktop> xDesktop (xFactory->createInstance (
+ ::rtl::OUString::createFromAscii("com.sun.star.frame.Desktop")), uno::UNO_QUERY);
+ if ( ! xDesktop.is())
+ return NULL;
+
+ uno::Reference<frame::XFramesSupplier> xFrameSupplier (xDesktop, uno::UNO_QUERY);
+ if ( ! xFrameSupplier.is())
+ return NULL;
+
+ uno::Reference<container::XIndexAccess> xFrameAccess (xFrameSupplier->getFrames(), uno::UNO_QUERY);
+ if ( ! xFrameAccess.is())
+ return NULL;
+
+ for (sal_Int32 nIndex=0,nCount=xFrameAccess->getCount(); nIndex<nCount; ++nIndex)
+ {
+ uno::Reference<frame::XFrame> xFrame;
+ if ( ! (xFrameAccess->getByIndex(nIndex) >>= xFrame))
+ continue;
+
+ ::sd::DrawController* pController = dynamic_cast<sd::DrawController*>(xFrame->getController().get());
+ if (pController == NULL)
+ continue;
+ ::sd::ViewShellBase* pBase = pController->GetViewShellBase();
+ if (pBase == NULL)
+ continue;
+ if (pBase->GetDocShell() != &rDocShell)
+ continue;
+
+ const ::boost::shared_ptr<sd::ViewShell> pViewShell (pBase->GetMainViewShell());
+ if (pViewShell)
+ return pViewShell.get();
+ }
+ }
+ catch (uno::Exception e)
+ {
+ // When there is an exception then simply use the default value of
+ // bIsEnabled and disable the controls.
+ }
+ return NULL;
+}
+
+
+
+
//===== IconProvider ==========================================================
SdPageObjsTLB::IconProvider::IconProvider (void)
diff --git a/sd/source/ui/docshell/docshel4.cxx b/sd/source/ui/docshell/docshel4.cxx
index f1e77526d7e3..47e8f62c6468 100755
--- a/sd/source/ui/docshell/docshel4.cxx
+++ b/sd/source/ui/docshell/docshel4.cxx
@@ -298,6 +298,7 @@ sal_Bool DrawDocShell::InitNew( const ::com::sun::star::uno::Reference< ::com::s
if (bRet)
{
+ mpDoc->SetDrawingLayerPoolDefaults();
if( !mbSdDataObj )
mpDoc->NewOrLoadCompleted(NEW_DOC); // otherwise calling
// NewOrLoadCompleted(NEW_LOADED) in
diff --git a/sd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.cxx b/sd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.cxx
index ff167f07520a..6056d434068c 100755
--- a/sd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.cxx
+++ b/sd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.cxx
@@ -184,14 +184,14 @@ void ConfigurationControllerBroadcaster::DisposeAndClear (void)
{
lang::EventObject aEvent;
aEvent.Source = mxConfigurationController;
- while (maListenerMap.size() > 0)
+ while (!maListenerMap.empty())
{
ListenerMap::iterator iMap (maListenerMap.begin());
if (iMap == maListenerMap.end())
break;
// When the first vector is empty then remove it from the map.
- if (iMap->second.size() == 0)
+ if (iMap->second.empty())
{
maListenerMap.erase(iMap);
continue;
diff --git a/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx b/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx
index 4ab361a9490d..78d1e394c94a 100755
--- a/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx
+++ b/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx
@@ -256,7 +256,7 @@ void ConfigurationUpdater::CleanRequestedConfiguration (void)
// Request the deactivation of pure anchors that have no child.
vector<Reference<XResourceId> > aResourcesToDeactivate;
CheckPureAnchors(mxRequestedConfiguration, aResourcesToDeactivate);
- if (aResourcesToDeactivate.size() > 0)
+ if (!aResourcesToDeactivate.empty() )
{
Reference<XConfigurationController> xCC (
mxControllerManager->getConfigurationController());
@@ -327,7 +327,7 @@ void ConfigurationUpdater::UpdateCore (const ConfigurationClassifier& rClassifie
// Deactivate pure anchors that have no child.
vector<Reference<XResourceId> > aResourcesToDeactivate;
CheckPureAnchors(mxCurrentConfiguration, aResourcesToDeactivate);
- if (aResourcesToDeactivate.size() > 0)
+ if (!aResourcesToDeactivate.empty() )
mpResourceManager->DeactivateResources(aResourcesToDeactivate, mxCurrentConfiguration);
}
catch(RuntimeException)
diff --git a/sd/source/ui/framework/configuration/ResourceId.cxx b/sd/source/ui/framework/configuration/ResourceId.cxx
index 15d7c3a6f4ec..25be1d1dfaf2 100755
--- a/sd/source/ui/framework/configuration/ResourceId.cxx
+++ b/sd/source/ui/framework/configuration/ResourceId.cxx
@@ -183,7 +183,7 @@ OUString SAL_CALL
ResourceId::getResourceURL (void)
throw(com::sun::star::uno::RuntimeException)
{
- if (maResourceURLs.size() > 0)
+ if (!maResourceURLs.empty())
return maResourceURLs[0];
else
return OUString();
@@ -200,7 +200,7 @@ util::URL SAL_CALL
return *mpURL;
Reference<util::XURLTransformer> xURLTransformer (mxURLTransformerWeak);
- if (xURLTransformer.is() && maResourceURLs.size() > 0)
+ if (xURLTransformer.is() && !maResourceURLs.empty() )
{
mpURL.reset(new util::URL);
mpURL->Complete = maResourceURLs[0];
@@ -209,7 +209,7 @@ util::URL SAL_CALL
}
util::URL aURL;
- if (maResourceURLs.size() > 0)
+ if (!maResourceURLs.empty())
aURL.Complete = maResourceURLs[0];
return aURL;
}
@@ -268,7 +268,7 @@ OUString SAL_CALL
ResourceId::getResourceTypePrefix (void)
throw (RuntimeException)
{
- if (maResourceURLs.size() > 0)
+ if (!maResourceURLs.empty() )
{
// Return the "private:resource/<type>/" prefix.
@@ -298,7 +298,7 @@ sal_Int16 SAL_CALL
if ( ! rxResourceId.is())
{
// The empty reference is interpreted as empty resource id object.
- if (maResourceURLs.size() > 0)
+ if (!maResourceURLs.empty())
nResult = +1;
else
nResult = 0;
@@ -610,7 +610,7 @@ void ResourceId::ParseResourceURL (void)
Reference<XInterface>(xURLTransformer,UNO_QUERY));
}
- if (xURLTransformer.is() && maResourceURLs.size() > 0)
+ if (xURLTransformer.is() && !maResourceURLs.empty() )
{
mpURL.reset(new util::URL);
mpURL->Complete = maResourceURLs[0];
diff --git a/sd/source/ui/framework/factories/BasicViewFactory.cxx b/sd/source/ui/framework/factories/BasicViewFactory.cxx
index 95c2833a2d12..de8bf54ab514 100644
--- a/sd/source/ui/framework/factories/BasicViewFactory.cxx
+++ b/sd/source/ui/framework/factories/BasicViewFactory.cxx
@@ -524,7 +524,7 @@ bool BasicViewFactory::IsCacheable (const ::boost::shared_ptr<ViewDescriptor>& r
if (xResource.is())
{
static ::std::vector<Reference<XResourceId> > maCacheableResources;
- if (maCacheableResources.size() == 0)
+ if (maCacheableResources.empty() )
{
::boost::shared_ptr<FrameworkHelper> pHelper (FrameworkHelper::Instance(*mpBase));
diff --git a/sd/source/ui/func/fupage.cxx b/sd/source/ui/func/fupage.cxx
index 4d068e1fde90..d8736d9b8ccb 100755
--- a/sd/source/ui/func/fupage.cxx
+++ b/sd/source/ui/func/fupage.cxx
@@ -38,20 +38,14 @@
#include <svx/svxids.hrc>
#include <svx/dialogs.hrc>
#include <svl/itempool.hxx>
-#ifndef _MSGBOX_HXX //autogen
#include <vcl/msgbox.hxx>
-#endif
#include <sfx2/request.hxx>
#include <svl/stritem.hxx>
#include <vcl/prntypes.hxx>
#include <svl/style.hxx>
#include <stlsheet.hxx>
-#ifndef _SVX_SVDORECT_HXX
#include <svx/svdorect.hxx>
-#endif
-#ifndef _SVX_SVDUNDO_HXX
#include <svx/svdundo.hxx>
-#endif
#include <editeng/eeitem.hxx>
#include <editeng/frmdiritem.hxx>
#include <svx/xbtmpit.hxx>
@@ -59,6 +53,7 @@
#include <svl/itempool.hxx>
#include <editeng/ulspitem.hxx>
#include <editeng/lrspitem.hxx>
+#include <svx/sdr/properties/properties.hxx>
#include "glob.hrc"
#include <editeng/shaditem.hxx>
@@ -393,7 +388,11 @@ const SfxItemSet* FuPage::ExecuteDialog( Window* pParent )
if(!mpPage->IsMasterPage())
{
// on normal pages, switch off fill attribute usage
- mpPage->getSdrPageProperties().PutItem(XFillStyleItem(XFILL_NONE));
+ SdrPageProperties& rPageProperties = mpPage->getSdrPageProperties();
+ rPageProperties.ClearItem( XATTR_FILLBITMAP );
+ rPageProperties.ClearItem( XATTR_FILLGRADIENT );
+ rPageProperties.ClearItem( XATTR_FILLHATCH );
+ rPageProperties.PutItem(XFillStyleItem(XFILL_NONE));
}
}
}
@@ -409,6 +408,7 @@ const SfxItemSet* FuPage::ExecuteDialog( Window* pParent )
StyleSheetUndoAction* pAction = new StyleSheetUndoAction(mpDoc, (SfxStyleSheet*)pStyleSheet, &(*pTempSet.get()));
mpDocSh->GetUndoManager()->AddUndoAction(pAction);
pStyleSheet->GetItemSet().Put( *(pTempSet.get()) );
+ sdr::properties::CleanupFillProperties( pStyleSheet->GetItemSet() );
pStyleSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
}
else if( bSetToAllPages )
@@ -430,6 +430,7 @@ const SfxItemSet* FuPage::ExecuteDialog( Window* pParent )
new StyleSheetUndoAction(mpDoc, (SfxStyleSheet*)pStyle, &(*pTempSet.get()));
pUndoGroup->AddAction(pAction);
pStyle->GetItemSet().Put( *(pTempSet.get()) );
+ sdr::properties::CleanupFillProperties( pStyleSheet->GetItemSet() );
pStyle->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
}
@@ -444,7 +445,13 @@ const SfxItemSet* FuPage::ExecuteDialog( Window* pParent )
{
SdBackgroundObjUndoAction *pBackgroundObjUndoAction = new SdBackgroundObjUndoAction(*mpDoc, *pPage, rFillAttributes);
pUndoGroup->AddAction(pBackgroundObjUndoAction);
- pPage->getSdrPageProperties().PutItem(XFillStyleItem(XFILL_NONE));
+
+ SdrPageProperties& rPageProperties = pPage->getSdrPageProperties();
+ rPageProperties.ClearItem( XATTR_FILLBITMAP );
+ rPageProperties.ClearItem( XATTR_FILLGRADIENT );
+ rPageProperties.ClearItem( XATTR_FILLHATCH );
+ rPageProperties.PutItem(XFillStyleItem(XFILL_NONE));
+
pPage->ActionChanged();
}
}
@@ -606,8 +613,10 @@ void FuPage::ApplyItemSet( const SfxItemSet* pArgs )
delete mpBackgroundObjUndoAction;
mpBackgroundObjUndoAction = new SdBackgroundObjUndoAction(
*mpDoc, *mpPage, mpPage->getSdrPageProperties().GetItemSet());
+ SfxItemSet aSet( *pArgs );
+ sdr::properties::CleanupFillProperties(aSet);
mpPage->getSdrPageProperties().ClearItem();
- mpPage->getSdrPageProperties().PutItemSet(*pArgs);
+ mpPage->getSdrPageProperties().PutItemSet(aSet);
}
}
diff --git a/sd/source/ui/func/futempl.cxx b/sd/source/ui/func/futempl.cxx
index d7a251cee531..363eba2f6dab 100755
--- a/sd/source/ui/func/futempl.cxx
+++ b/sd/source/ui/func/futempl.cxx
@@ -49,6 +49,7 @@
#include <editeng/lrspitem.hxx>
#include <svx/svdopage.hxx>
#include <svx/svditer.hxx>
+#include <svx/sdr/properties/properties.hxx>
#include <sfx2/viewfrm.hxx>
#include <svx/xlndsit.hxx>
@@ -454,6 +455,7 @@ void FuTemplate::DoExecute( SfxRequest& rReq )
sStyleName.Append( sal_Unicode( ' ' ));
pStyleSheet->GetItemSet().Put(aTempSet);
+
SdStyleSheet* pRealSheet =((SdStyleSheet*)pStyleSheet)->GetRealStyleSheet();
pRealSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
@@ -477,45 +479,8 @@ void FuTemplate::DoExecute( SfxRequest& rReq )
SfxItemSet& rAttr = pStyleSheet->GetItemSet();
-/* #i35937#
- if ( rAttr.GetItemState( EE_PARA_LRSPACE ) == SFX_ITEM_ON )
- {
- // SvxLRSpaceItem hart gesetzt: NumBulletItem anpassen
- if ( aOriSet.GetItemState( EE_PARA_LRSPACE ) != SFX_ITEM_ON ||
- (const SvxLRSpaceItem&) aOriSet.Get( EE_PARA_LRSPACE ) !=
- (const SvxLRSpaceItem&) rAttr.Get( EE_PARA_LRSPACE ) )
- {
- SvxNumBulletItem aNumBullet( (const SvxNumBulletItem&) rAttr.Get(EE_PARA_NUMBULLET) );
-
- sal_uInt16 nLevel = 0;
- if( (ePO >= PO_OUTLINE_2) && (ePO <= PO_OUTLINE_9) )
- nLevel = (sal_uInt16)(ePO - PO_OUTLINE_1 + 1);
-
- EditEngine::ImportBulletItem( aNumBullet, nLevel, NULL,
- &(const SvxLRSpaceItem&) rAttr.Get( EE_PARA_LRSPACE ) );
+ sdr::properties::CleanupFillProperties( rAttr );
- // the numbering bullet item is not valid in styles Outline 2 to Outline 9
- if( nLevel != 0 )
- {
- // so put it into Outline 1 then..
- String sStyleName((SdResId(STR_PSEUDOSHEET_OUTLINE)));
- sStyleName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " 1" ) );
- SfxStyleSheetBase* pFirstStyleSheet = pSSPool->Find( sStyleName, SD_STYLE_FAMILY_PSEUDO);
-
- if(pFirstStyleSheet)
- {
- pFirstStyleSheet->GetItemSet().Put( aNumBullet);
- SdStyleSheet* pRealSheet = ((SdStyleSheet*)pFirstStyleSheet)->GetRealStyleSheet();
- pRealSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
- }
- }
- else
- {
- ( (SfxItemSet&) rAttr).Put( aNumBullet );
- }
- }
- }
-*/
// check for unique names of named items for xml
if( rAttr.GetItemState( XATTR_FILLBITMAP ) == SFX_ITEM_SET )
{
diff --git a/sd/source/ui/inc/sdtreelb.hxx b/sd/source/ui/inc/sdtreelb.hxx
index 9681e9ba4230..478a7eb5e550 100755
--- a/sd/source/ui/inc/sdtreelb.hxx
+++ b/sd/source/ui/inc/sdtreelb.hxx
@@ -40,6 +40,8 @@
#include <svl/urlbmk.hxx>
#include <tools/ref.hxx>
#include "sdxfer.hxx"
+#include <boost/scoped_ptr.hpp>
+#include <boost/function.hpp>
class SdDrawDocument;
class SfxMedium;
@@ -51,6 +53,8 @@ class SdPage;
class SvLBoxEntry;
namespace sd {
+class ViewShell;
+
class DrawDocShell;
#ifndef SV_DECL_DRAW_DOC_SHELL_DEFINED
#define SV_DECL_DRAW_DOC_SHELL_DEFINED
@@ -104,7 +108,6 @@ public:
::sd::DrawDocShell& mrDocShell;
NavigatorDragType meDragType;
const ::com::sun::star::uno::Any maTreeListBoxData;
-
SD_DLLPRIVATE virtual ~SdPageObjsTransferable();
SD_DLLPRIVATE virtual void AddSupportedFormats();
@@ -219,6 +222,17 @@ public:
using SvLBox::ExecuteDrop;
using SvTreeListBox::SelectEntry;
+
+ /** Return the view shell that is linked to the given doc shell.
+ Call this method when the there is a chance that the doc shell
+ has been disconnected from the view shell (but not the other
+ way round.)
+ @return
+ May return <NULL/> when the link between view shell and
+ doc shell has been severed.
+ */
+ static ::sd::ViewShell* GetViewShellForDocShell (::sd::DrawDocShell &rDocShell);
+
private:
/** This flag controls whether all shapes are shown as children of pages
and group shapes or only the named shapes.
diff --git a/sd/source/ui/inc/sdxfer.hxx b/sd/source/ui/inc/sdxfer.hxx
index f29b1d28936a..9ba1ce2cf7de 100755
--- a/sd/source/ui/inc/sdxfer.hxx
+++ b/sd/source/ui/inc/sdxfer.hxx
@@ -89,12 +89,41 @@ public:
// SfxListener
virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
+ virtual void DragFinished( sal_Int8 nDropAction );
+ SdDrawDocument* GetSourceDoc (void) const;
+
+ /** User data objects can be used to store information temporarily
+ at the transferable. The slide sorter uses this to store
+ previews of the slides that are referenced by the
+ transferable.
+ */
+ class UserData {public:virtual~UserData(){}};
+
+ /** Add a user data object. When it was added before (and not
+ removed) then this call is ignored.
+ */
+ void AddUserData (const ::boost::shared_ptr<UserData>& rpData);
+
+ /** Remove a previously added user data object. When the object
+ was never added or removed before then this call is ignored.
+ */
+ void RemoveUserData (const ::boost::shared_ptr<UserData>& rpData);
+
+ /** Return the number of user data objects.
+ */
+ sal_Int32 GetUserDataCount (void) const;
+
+ /** Return the specified user data object. When the index is not
+ valid, ie not in the range [0,count) then an empty pointer is
+ returned.
+ */
+ ::boost::shared_ptr<UserData> GetUserData (const sal_Int32 nIndex) const;
+
protected:
virtual void AddSupportedFormats();
virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const ::com::sun::star::datatransfer::DataFlavor& rFlavor );
- virtual void DragFinished( sal_Int8 nDropAction );
virtual void ObjectReleased();
virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rId ) throw( ::com::sun::star::uno::RuntimeException );
@@ -124,6 +153,7 @@ private:
sal_Bool mbPageTransferable : 1;
sal_Bool mbPageTransferablePersistent : 1;
bool mbIsUnoObj : 1;
+ ::std::vector<boost::shared_ptr<UserData> > maUserData;
// not available
SdTransferable();
diff --git a/sd/source/ui/slideshow/slideshow.cxx b/sd/source/ui/slideshow/slideshow.cxx
index 84962348d693..0f01f0658cbb 100755
--- a/sd/source/ui/slideshow/slideshow.cxx
+++ b/sd/source/ui/slideshow/slideshow.cxx
@@ -109,6 +109,26 @@ namespace {
private:
::boost::shared_ptr<SlideShowRestarter> mpRestarter;
};
+
+ /** Return the default display id (or -1 when that can not be
+ determined.)
+ */
+ sal_Int32 GetDefaultDisplay (void)
+ {
+ try
+ {
+ Reference< XMultiServiceFactory > xFactory(::comphelper::getProcessServiceFactory(), UNO_QUERY_THROW );
+ Reference< XPropertySet > xMonProps(xFactory->createInstance(OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.DisplayAccess" ) ) ), UNO_QUERY_THROW );
+ const OUString sPropertyName( RTL_CONSTASCII_USTRINGPARAM( "DefaultDisplay" ) );
+ sal_Int32 nPrimaryIndex (-1);
+ if (xMonProps->getPropertyValue( sPropertyName ) >>= nPrimaryIndex)
+ return nPrimaryIndex;
+ }
+ catch( Exception& )
+ {
+ }
+ return -1;
+ }
}
@@ -553,6 +573,14 @@ void SAL_CALL SlideShow::setPropertyValue( const OUString& aPropertyName, const
sal_Int32 nDisplay = 0;
if( aValue >>= nDisplay )
{
+ // Convert value to true display id.
+ if (nDisplay == 0)
+ nDisplay = GetDefaultDisplay();
+ else if (nDisplay < 0)
+ nDisplay = -1;
+ else
+ --nDisplay;
+
bIllegalArgument = false;
SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS);
@@ -632,7 +660,14 @@ Any SAL_CALL SlideShow::getPropertyValue( const OUString& PropertyName ) throw(U
case ATTR_PRESENT_DISPLAY:
{
SdOptions* pOptions = SD_MOD()->GetSdOptions(DOCUMENT_TYPE_IMPRESS);
- return Any( pOptions->GetDisplay() );
+ const sal_Int32 nDisplay (pOptions->GetDisplay());
+ // Convert true display id to the previously used schema.
+ if (nDisplay == GetDefaultDisplay())
+ return Any(sal_Int32(0));
+ else if (nDisplay < 0)
+ return Any(sal_Int32(-1));
+ else
+ return Any(nDisplay+1);
}
default:
@@ -1228,28 +1263,6 @@ sal_Int32 SlideShow::GetDisplay()
if( pOptions )
nDisplay = pOptions->GetDisplay();
- if (nDisplay <= 0 )
- {
- try
- {
- Reference<XMultiServiceFactory > xFactory(
- ::comphelper::getProcessServiceFactory(), UNO_QUERY_THROW);
- Reference<XPropertySet> xMonitorProperties(
- xFactory->createInstance(
- OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.DisplayAccess"))),
- UNO_QUERY_THROW);
- const OUString sPropertyName (RTL_CONSTASCII_USTRINGPARAM("DefaultDisplay"));
- xMonitorProperties->getPropertyValue(sPropertyName) >>= nDisplay;
- }
- catch( Exception& )
- {
- }
- }
- else
- {
- nDisplay--;
- }
-
return nDisplay;
}
diff --git a/sd/source/ui/slideshow/slideshow.src b/sd/source/ui/slideshow/slideshow.src
index 78cd2aae0d9f..0b6217028d91 100755
--- a/sd/source/ui/slideshow/slideshow.src
+++ b/sd/source/ui/slideshow/slideshow.src
@@ -74,7 +74,7 @@ Menu RID_SLIDESHOW_CONTEXTMENU
MenuItem
{
Identifier = CM_PEN_MODE;
- Text [ en-US ] = "Mouse pointer as ~pen";
+ Text [ en-US ] = "Mouse pointer as ~Pen";
};
MenuItem
{
@@ -115,12 +115,12 @@ Menu RID_SLIDESHOW_CONTEXTMENU
MenuItem
{
Identifier = CM_COLOR_PEN ;
- Text [ en-US ] = "~Change Pen Color..." ;
+ Text [ en-US ] = "~Change pen Color..." ;
};
MenuItem
{
Identifier = CM_ERASE_ALLINK ;
- Text [ en-US ] = "~Erase All Ink On Slide" ;
+ Text [ en-US ] = "~Erase all ink on Slide" ;
};
MenuItem
{
diff --git a/sd/source/ui/slideshow/slideshowimpl.cxx b/sd/source/ui/slideshow/slideshowimpl.cxx
index 1aef702d63f3..b3a16b48c3a9 100755
--- a/sd/source/ui/slideshow/slideshowimpl.cxx
+++ b/sd/source/ui/slideshow/slideshowimpl.cxx
@@ -1913,6 +1913,7 @@ IMPL_LINK( SlideshowImpl, PostYieldListener, void*, EMPTYARG )
Application::RemovePostYieldListener(LINK(this, SlideshowImpl, PostYieldListener));
if (mbDisposed)
return 0;
+ Application::Reschedule(true);
return updateSlideShow();
}
diff --git a/sd/source/ui/slidesorter/controller/SlideSorterController.cxx b/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
index 390ade9c7a7e..153ec43a1ad6 100644
--- a/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
+++ b/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
@@ -43,7 +43,7 @@
#include "controller/SlsScrollBarManager.hxx"
#include "controller/SlsSelectionManager.hxx"
#include "controller/SlsSlotManager.hxx"
-#include "controller/SlsTransferable.hxx"
+#include "controller/SlsTransferableData.hxx"
#include "controller/SlsVisibleAreaManager.hxx"
#include "model/SlideSorterModel.hxx"
#include "model/SlsPageEnumerationProvider.hxx"
@@ -427,8 +427,7 @@ bool SlideSorterController::Command (
// indicator so that the user knows where a page insertion
// would take place.
mpInsertionIndicatorHandler->Start(false);
- mpInsertionIndicatorHandler->UpdateIndicatorIcon(
- dynamic_cast<Transferable*>(SD_MOD()->pTransferClip));
+ mpInsertionIndicatorHandler->UpdateIndicatorIcon(SD_MOD()->pTransferClip);
mpInsertionIndicatorHandler->UpdatePosition(
pWindow->PixelToLogic(rEvent.GetMousePosPixel()),
InsertionIndicatorHandler::MoveMode);
diff --git a/sd/source/ui/slidesorter/controller/SlsAnimator.cxx b/sd/source/ui/slidesorter/controller/SlsAnimator.cxx
index 28756b3766d9..dfc672e33802 100755
--- a/sd/source/ui/slidesorter/controller/SlsAnimator.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsAnimator.cxx
@@ -303,7 +303,7 @@ IMPL_LINK(Animator, TimeoutHandler, Timer*, EMPTYARG)
// Unlock the draw lock. This should lead to a repaint.
mpDrawLock.reset();
- if (maAnimations.size() > 0)
+ if (!maAnimations.empty())
RequestNextFrame();
return 0;
diff --git a/sd/source/ui/slidesorter/controller/SlsClipboard.cxx b/sd/source/ui/slidesorter/controller/SlsClipboard.cxx
index 823112166bf4..4545e371ea37 100755
--- a/sd/source/ui/slidesorter/controller/SlsClipboard.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsClipboard.cxx
@@ -44,11 +44,12 @@
#include "controller/SlsScrollBarManager.hxx"
#include "controller/SlsFocusManager.hxx"
#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsTransferable.hxx"
+#include "controller/SlsTransferableData.hxx"
#include "controller/SlsSelectionObserver.hxx"
#include "cache/SlsPageCache.hxx"
#include "ViewShellBase.hxx"
+#include "View.hxx"
#include "DrawViewShell.hxx"
#include "Window.hxx"
#include "fupoor.hxx"
@@ -69,6 +70,7 @@
#include "drawdoc.hxx"
#include "DrawDocShell.hxx"
#include "sdpage.hxx"
+#include "sdtreelb.hxx"
#include <com/sun/star/datatransfer/dnd/DNDConstants.hpp>
#include <sfx2/request.hxx>
@@ -82,9 +84,12 @@
#include <rtl/ustring.hxx>
#include <vos/mutex.hxx>
#include <vcl/svapp.hxx>
+#include <boost/bind.hpp>
+
namespace sd { namespace slidesorter { namespace controller {
+
class Clipboard::UndoContext
{
public:
@@ -412,7 +417,7 @@ void Clipboard::CreateSlideTransferable (
// previews are included into the transferable so that an insertion
// indicator can be rendered.
aSelectedPages.Rewind();
- ::std::vector<Transferable::Representative> aRepresentatives;
+ ::std::vector<TransferableData::Representative> aRepresentatives;
aRepresentatives.reserve(3);
::boost::shared_ptr<cache::PageCache> pPreviewCache (
mrSlideSorter.GetView().GetPreviewCache());
@@ -422,7 +427,7 @@ void Clipboard::CreateSlideTransferable (
if ( ! pDescriptor || pDescriptor->GetPage()==NULL)
continue;
Bitmap aPreview (pPreviewCache->GetPreviewBitmap(pDescriptor->GetPage(), false));
- aRepresentatives.push_back(Transferable::Representative(
+ aRepresentatives.push_back(TransferableData::Representative(
aPreview,
pDescriptor->HasState(model::PageDescriptor::ST_Excluded)));
if (aRepresentatives.size() >= 3)
@@ -433,7 +438,7 @@ void Clipboard::CreateSlideTransferable (
{
mrSlideSorter.GetView().BrkAction();
SdDrawDocument* pDocument = mrSlideSorter.GetModel().GetDocument();
- SdTransferable* pTransferable = new Transferable (
+ SdTransferable* pTransferable = TransferableData::CreateTransferable (
pDocument,
NULL,
sal_False,
@@ -491,6 +496,95 @@ void Clipboard::CreateSlideTransferable (
+::boost::shared_ptr<SdTransferable::UserData> Clipboard::CreateTransferableUserData (SdTransferable* pTransferable)
+{
+ do
+ {
+ SdPageObjsTLB::SdPageObjsTransferable* pTreeListBoxTransferable
+ = dynamic_cast<SdPageObjsTLB::SdPageObjsTransferable*>(pTransferable);
+ if (pTreeListBoxTransferable == NULL)
+ break;
+
+ // Find view shell for the document of the transferable.
+ ::sd::ViewShell* pViewShell
+ = SdPageObjsTLB::GetViewShellForDocShell(pTreeListBoxTransferable->GetDocShell());
+ if (pViewShell == NULL)
+ break;
+
+ // Find slide sorter for the document of the transferable.
+ SlideSorterViewShell* pSlideSorterViewShell
+ = SlideSorterViewShell::GetSlideSorter(pViewShell->GetViewShellBase());
+ if (pSlideSorterViewShell == NULL)
+ break;
+ SlideSorter& rSlideSorter (pSlideSorterViewShell->GetSlideSorter());
+
+ // Get bookmark from transferable.
+ TransferableDataHelper aDataHelper (pTransferable);
+ INetBookmark aINetBookmark;
+ if ( ! aDataHelper.GetINetBookmark(SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark))
+ break;
+ const rtl::OUString sURL (aINetBookmark.GetURL());
+ const sal_Int32 nIndex (sURL.indexOf((sal_Unicode)'#'));
+ if (nIndex == -1)
+ break;
+ String sBookmark (sURL.copy(nIndex+1));
+
+ // Make sure that the bookmark points to a page.
+ SdDrawDocument* pTransferableDocument = rSlideSorter.GetModel().GetDocument();
+ if (pTransferableDocument == NULL)
+ break;
+ sal_Bool bIsMasterPage = sal_False;
+ const sal_uInt16 nPageIndex (pTransferableDocument->GetPageByName(sBookmark, bIsMasterPage));
+ if (nPageIndex == SDRPAGE_NOTFOUND)
+ break;
+
+ // Create preview.
+ ::std::vector<TransferableData::Representative> aRepresentatives;
+ aRepresentatives.reserve(1);
+ ::boost::shared_ptr<cache::PageCache> pPreviewCache (
+ rSlideSorter.GetView().GetPreviewCache());
+ model::SharedPageDescriptor pDescriptor (rSlideSorter.GetModel().GetPageDescriptor((nPageIndex-1)/2));
+ if ( ! pDescriptor || pDescriptor->GetPage()==NULL)
+ break;
+ Bitmap aPreview (pPreviewCache->GetPreviewBitmap(pDescriptor->GetPage(), false));
+ aRepresentatives.push_back(TransferableData::Representative(
+ aPreview,
+ pDescriptor->HasState(model::PageDescriptor::ST_Excluded)));
+
+ // Remember the page in maPagesToRemove so that it can be removed
+ // when drag and drop action is "move".
+ Clipboard& rOtherClipboard (pSlideSorterViewShell->GetSlideSorter().GetController().GetClipboard());
+ rOtherClipboard.maPagesToRemove.clear();
+ rOtherClipboard.maPagesToRemove.push_back(pDescriptor->GetPage());
+
+ // Create the new transferable.
+ ::boost::shared_ptr<SdTransferable::UserData> pNewTransferable (
+ new TransferableData(
+ pSlideSorterViewShell,
+ aRepresentatives));
+ pTransferable->SetWorkDocument( dynamic_cast<SdDrawDocument*>(
+ pTreeListBoxTransferable->GetSourceDoc()->AllocModel()));
+ // pTransferable->SetView(&mrSlideSorter.GetView());
+
+ // Set page bookmark list.
+ List aPageBookmarks;
+ aPageBookmarks.Insert(new String(sBookmark));
+ pTransferable->SetPageBookmarks(aPageBookmarks, false);
+
+ // Replace the view referenced by the transferable with the
+ // corresponding slide sorter view.
+ pTransferable->SetView(&pSlideSorterViewShell->GetSlideSorter().GetView());
+
+ return pNewTransferable;
+ }
+ while (false);
+
+ return ::boost::shared_ptr<SdTransferable::UserData>();
+}
+
+
+
+
void Clipboard::StartDrag (
const Point& rPosition,
::Window* pWindow)
@@ -510,9 +604,7 @@ void Clipboard::StartDrag (
void Clipboard::DragFinished (sal_Int8 nDropAction)
{
- SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
- if (pDragTransferable != NULL)
- pDragTransferable->SetView (NULL);
+ // SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
if (mnDragFinishedUserEventId == 0)
{
@@ -590,11 +682,12 @@ sal_Int8 Clipboard::AcceptDrop (
{
sal_Int8 nAction (DND_ACTION_NONE);
- const Clipboard::DropType eDropType (IsDropAccepted());
+ const Clipboard::DropType eDropType (IsDropAccepted(rTargetHelper));
switch (eDropType)
{
case DT_PAGE:
+ case DT_PAGE_FROM_NAVIGATOR:
{
// Accept a drop.
nAction = rEvent.mnAction;
@@ -602,7 +695,7 @@ sal_Int8 Clipboard::AcceptDrop (
// Use the copy action when the drop action is the default, i.e. not
// explicitly set to move or link, and when the source and
// target models are not the same.
- const SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
+ SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
if (pDragTransferable != NULL
&& pDragTransferable->IsPageTransferable()
&& ((rEvent.maDragEvent.DropAction
@@ -612,13 +705,12 @@ sal_Int8 Clipboard::AcceptDrop (
{
nAction = DND_ACTION_COPY;
}
- else if (mrController.GetInsertionIndicatorHandler()->IsInsertionTrivial(nAction))
+ else if (IsInsertionTrivial(pDragTransferable, nAction))
{
nAction = DND_ACTION_NONE;
}
// Show the insertion marker and the substitution for a drop.
- Point aPosition = pTargetWindow->PixelToLogic (rEvent.maPosPixel);
SelectionFunction* pSelectionFunction = dynamic_cast<SelectionFunction*>(
mrSlideSorter.GetViewShell()->GetCurrentFunction().get());
if (pSelectionFunction != NULL)
@@ -641,6 +733,7 @@ sal_Int8 Clipboard::AcceptDrop (
break;
default:
+ case DT_NONE:
nAction = DND_ACTION_NONE;
break;
}
@@ -660,12 +753,14 @@ sal_Int8 Clipboard::ExecuteDrop (
{
sal_Int8 nResult = DND_ACTION_NONE;
mpUndoContext.reset();
+ const Clipboard::DropType eDropType (IsDropAccepted(rTargetHelper));
- switch (IsDropAccepted())
+ switch (eDropType)
{
case DT_PAGE:
+ case DT_PAGE_FROM_NAVIGATOR:
{
- const SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
+ SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
const Point aEventModelPosition (
pTargetWindow->PixelToLogic (rEvent.maPosPixel));
const sal_Int32 nXOffset (labs (pDragTransferable->GetStartPos().X()
@@ -684,7 +779,7 @@ sal_Int8 Clipboard::ExecuteDrop (
// Do not process the insertion when it is trivial,
// i.e. would insert pages at their original place.
- if (pInsertionIndicatorHandler->IsInsertionTrivial(rEvent.mnAction))
+ if (IsInsertionTrivial(pDragTransferable, rEvent.mnAction))
bContinue = false;
// Tell the insertion indicator handler to hide before the model
@@ -713,6 +808,19 @@ sal_Int8 Clipboard::ExecuteDrop (
// well as the ones above.
}
+ // When the pages originated in another slide sorter then
+ // only that is notified automatically about the drag
+ // operation being finished. Because the target slide sorter
+ // has be notified, too, add a callback for that.
+ ::boost::shared_ptr<TransferableData> pSlideSorterTransferable (
+ TransferableData::GetFromTransferable(pDragTransferable));
+ BOOST_ASSERT(pSlideSorterTransferable);
+ if (pSlideSorterTransferable
+ && pSlideSorterTransferable->GetSourceViewShell() != mrSlideSorter.GetViewShell())
+ {
+ DragFinished(nResult);
+ }
+
// Notify the receiving selection function that drag-and-drop is
// finished and the substitution handler can be released.
::rtl::Reference<SelectionFunction> pFunction (
@@ -732,7 +840,9 @@ sal_Int8 Clipboard::ExecuteDrop (
nPage,
nLayer);
break;
+
default:
+ case DT_NONE:
break;
}
@@ -742,6 +852,21 @@ sal_Int8 Clipboard::ExecuteDrop (
+bool Clipboard::IsInsertionTrivial (
+ SdTransferable* pTransferable,
+ const sal_Int8 nDndAction) const
+{
+ ::boost::shared_ptr<TransferableData> pSlideSorterTransferable (
+ TransferableData::GetFromTransferable(pTransferable));
+ if (pSlideSorterTransferable
+ && pSlideSorterTransferable->GetSourceViewShell() != mrSlideSorter.GetViewShell())
+ return false;
+ return mrController.GetInsertionIndicatorHandler()->IsInsertionTrivial(nDndAction);
+}
+
+
+
+
void Clipboard::Abort (void)
{
if (mpSelectionObserverContext)
@@ -797,25 +922,26 @@ sal_uInt16 Clipboard::InsertSlides (
-Clipboard::DropType Clipboard::IsDropAccepted (void) const
+Clipboard::DropType Clipboard::IsDropAccepted (DropTargetHelper&) const
{
- DropType eResult (DT_NONE);
-
const SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
- if (pDragTransferable != NULL)
+ if (pDragTransferable == NULL)
+ return DT_NONE;
+
+ if (pDragTransferable->IsPageTransferable())
{
- if (pDragTransferable->IsPageTransferable())
- {
- if (mrSlideSorter.GetModel().GetEditMode() != EM_MASTERPAGE)
- eResult = DT_PAGE;
- }
+ if (mrSlideSorter.GetModel().GetEditMode() != EM_MASTERPAGE)
+ return DT_PAGE;
else
- {
- eResult = DT_SHAPE;
- }
+ return DT_NONE;
}
- return eResult;
+ const SdPageObjsTLB::SdPageObjsTransferable* pPageObjsTransferable
+ = dynamic_cast<const SdPageObjsTLB::SdPageObjsTransferable*>(pDragTransferable);
+ if (pPageObjsTransferable != NULL)
+ return DT_PAGE_FROM_NAVIGATOR;
+
+ return DT_SHAPE;
}
diff --git a/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx b/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx
index 76a5f583f4a5..b55c2c261645 100644
--- a/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx
@@ -39,10 +39,12 @@
#include "controller/SlsProperties.hxx"
#include "controller/SlsSelectionFunction.hxx"
#include "controller/SlsSelectionManager.hxx"
-#include "controller/SlsTransferable.hxx"
+#include "controller/SlsClipboard.hxx"
+#include "controller/SlsTransferableData.hxx"
#include "DrawDocShell.hxx"
#include "drawdoc.hxx"
#include "app.hrc"
+#include "sdtreelb.hxx"
#include <sfx2/bindings.hxx>
#include <boost/bind.hpp>
@@ -58,8 +60,19 @@ DragAndDropContext::DragAndDropContext (SlideSorter& rSlideSorter)
if (rSlideSorter.GetModel().GetEditMode() != EM_PAGE)
return;
- rSlideSorter.GetController().GetInsertionIndicatorHandler()->UpdateIndicatorIcon(
- dynamic_cast<Transferable*>(SD_MOD()->pTransferDrag));
+ // For poperly handling transferables created by the navigator we
+ // need additional information. For this a user data object is
+ // created that contains the necessary information.
+ SdTransferable* pTransferable = SD_MOD()->pTransferDrag;
+ SdPageObjsTLB::SdPageObjsTransferable* pTreeListBoxTransferable
+ = dynamic_cast<SdPageObjsTLB::SdPageObjsTransferable*>(pTransferable);
+ if (pTreeListBoxTransferable!=NULL && !TransferableData::GetFromTransferable(pTransferable))
+ {
+ pTransferable->AddUserData(
+ rSlideSorter.GetController().GetClipboard().CreateTransferableUserData(pTransferable));
+ }
+
+ rSlideSorter.GetController().GetInsertionIndicatorHandler()->UpdateIndicatorIcon(pTransferable);
}
diff --git a/sd/source/ui/slidesorter/controller/SlsInsertionIndicatorHandler.cxx b/sd/source/ui/slidesorter/controller/SlsInsertionIndicatorHandler.cxx
index 882adab932a8..d663d106f6bf 100644
--- a/sd/source/ui/slidesorter/controller/SlsInsertionIndicatorHandler.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsInsertionIndicatorHandler.cxx
@@ -120,7 +120,7 @@ void InsertionIndicatorHandler::ForceEnd (void)
-void InsertionIndicatorHandler::UpdateIndicatorIcon (const Transferable* pTransferable)
+void InsertionIndicatorHandler::UpdateIndicatorIcon (const SdTransferable* pTransferable)
{
mpInsertionIndicatorOverlay->Create(pTransferable);
maIconSize = mpInsertionIndicatorOverlay->GetSize();
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
index fc5687e0afc0..938289046043 100644
--- a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
@@ -32,7 +32,7 @@
#include "SlideSorter.hxx"
#include "SlideSorterViewShell.hxx"
#include "SlsDragAndDropContext.hxx"
-#include "controller/SlsTransferable.hxx"
+#include "controller/SlsTransferableData.hxx"
#include "controller/SlideSorterController.hxx"
#include "controller/SlsPageSelector.hxx"
#include "controller/SlsFocusManager.hxx"
diff --git a/sd/source/ui/slidesorter/controller/SlsTransferable.cxx b/sd/source/ui/slidesorter/controller/SlsTransferableData.cxx
index 1f03c70759b6..682b4c7f741c 100755
--- a/sd/source/ui/slidesorter/controller/SlsTransferable.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsTransferableData.cxx
@@ -28,21 +28,48 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sd.hxx"
-#include "controller/SlsTransferable.hxx"
+#include "controller/SlsTransferableData.hxx"
#include "SlideSorterViewShell.hxx"
#include "View.hxx"
namespace sd { namespace slidesorter { namespace controller {
-Transferable::Transferable (
+SdTransferable* TransferableData::CreateTransferable (
SdDrawDocument* pSrcDoc,
::sd::View* pWorkView,
sal_Bool bInitOnGetData,
SlideSorterViewShell* pViewShell,
const ::std::vector<Representative>& rRepresentatives)
- : SdTransferable (pSrcDoc, pWorkView, bInitOnGetData),
- mpViewShell(pViewShell),
+{
+ SdTransferable* pTransferable = new SdTransferable (pSrcDoc, pWorkView, bInitOnGetData);
+ ::boost::shared_ptr<TransferableData> pData (new TransferableData(pViewShell, rRepresentatives));
+ pTransferable->AddUserData(pData);
+ return pTransferable;
+}
+
+
+
+
+::boost::shared_ptr<TransferableData> TransferableData::GetFromTransferable (const SdTransferable* pTransferable)
+{
+ ::boost::shared_ptr<TransferableData> pData;
+ for (sal_Int32 nIndex=0,nCount=pTransferable->GetUserDataCount(); nIndex<nCount; ++nIndex)
+ {
+ pData = ::boost::dynamic_pointer_cast<TransferableData>(pTransferable->GetUserData(nIndex));
+ if (pData)
+ return pData;
+ }
+ return ::boost::shared_ptr<TransferableData>();
+}
+
+
+
+
+TransferableData::TransferableData (
+ SlideSorterViewShell* pViewShell,
+ const ::std::vector<Representative>& rRepresentatives)
+ : mpViewShell(pViewShell),
maRepresentatives(rRepresentatives)
{
if (mpViewShell != NULL)
@@ -52,7 +79,7 @@ Transferable::Transferable (
-Transferable::~Transferable (void)
+TransferableData::~TransferableData (void)
{
if (mpViewShell != NULL)
EndListening(*mpViewShell);
@@ -61,16 +88,28 @@ Transferable::~Transferable (void)
-void Transferable::DragFinished (sal_Int8 nDropAction)
+void TransferableData::DragFinished (sal_Int8 nDropAction)
{
if (mpViewShell != NULL)
mpViewShell->DragFinished(nDropAction);
+ /*
+ for (CallbackContainer::const_iterator
+ iCallback(maDragFinishCallbacks.begin()),
+ iEnd(maDragFinishCallbacks.end());
+ iCallback!=iEnd;
+ ++iCallback)
+ {
+ if (*iCallback)
+ (*iCallback)(nDropAction);
+ }
+ maDragFinishCallbacks.clear();
+ */
}
-void Transferable::Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint)
+void TransferableData::Notify (SfxBroadcaster&, const SfxHint& rHint)
{
if (rHint.ISA(SfxSimpleHint) && mpViewShell!=NULL)
{
@@ -85,17 +124,22 @@ void Transferable::Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint)
mpViewShell = NULL;
}
}
-
- SdTransferable::Notify(rBroadcaster, rHint);
}
-const ::std::vector<Transferable::Representative>& Transferable::GetRepresentatives (void) const
+const ::std::vector<TransferableData::Representative>& TransferableData::GetRepresentatives (void) const
{
return maRepresentatives;
}
+
+
+SlideSorterViewShell* TransferableData::GetSourceViewShell (void) const
+{
+ return mpViewShell;
+}
+
} } } // end of namespace ::sd::slidesorter::controller
diff --git a/sd/source/ui/slidesorter/controller/makefile.mk b/sd/source/ui/slidesorter/controller/makefile.mk
index 460ef16ed3f1..18479cc86aa0 100755
--- a/sd/source/ui/slidesorter/controller/makefile.mk
+++ b/sd/source/ui/slidesorter/controller/makefile.mk
@@ -60,7 +60,7 @@ SLOFILES = \
$(SLO)$/SlsSelectionManager.obj \
$(SLO)$/SlsSelectionObserver.obj \
$(SLO)$/SlsSlotManager.obj \
- $(SLO)$/SlsTransferable.obj \
+ $(SLO)$/SlsTransferableData.obj \
$(SLO)$/SlsVisibleAreaManager.obj
# --- Tagets -------------------------------------------------------
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx b/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx
index 1bf5b8eae177..622bed457464 100755
--- a/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx
+++ b/sd/source/ui/slidesorter/inc/controller/SlsClipboard.hxx
@@ -30,6 +30,8 @@
#include "ViewClipboard.hxx"
#include "controller/SlsSelectionObserver.hxx"
+#include "sdxfer.hxx"
+
#include <sal/types.h>
#include <tools/solar.h>
#include <svx/svdpage.hxx>
@@ -58,6 +60,8 @@ namespace sd { namespace slidesorter { namespace model {
class PageDescriptor;
} } }
+namespace { class NavigatorDropEvent; }
+
namespace sd { namespace slidesorter { namespace controller {
class SlideSorterController;
@@ -69,6 +73,12 @@ public:
Clipboard (SlideSorter& rSlideSorter);
~Clipboard (void);
+ /** Create a slide sorter transferable from the given sd
+ transferable. The returned transferable is set up with all
+ information necessary so that it can be dropped on a slide sorter.
+ */
+ ::boost::shared_ptr<SdTransferable::UserData> CreateTransferableUserData (SdTransferable* pTransferable);
+
void HandleSlotCall (SfxRequest& rRequest);
void DoCut (::Window* pWindow = 0);
@@ -189,8 +199,8 @@ private:
transferable is not accepted. The reason is the missing
implementation of proper handling master pages copy-and-paste.
*/
- enum DropType { DT_PAGE, DT_SHAPE, DT_NONE };
- DropType IsDropAccepted (void) const;
+ enum DropType { DT_PAGE, DT_PAGE_FROM_NAVIGATOR, DT_SHAPE, DT_NONE };
+ DropType IsDropAccepted (DropTargetHelper& rTargetHelper) const;
/** This method contains the code for AcceptDrop() and ExecuteDrop() shapes.
There are only minor differences for the two cases at this level.
@@ -221,10 +231,19 @@ private:
sal_uInt16 nPage,
sal_uInt16 nLayer);
+ /** Return whether the insertion defined by the transferable is
+ trivial, ie would not change either source nor target document.
+ */
+ bool IsInsertionTrivial (
+ SdTransferable* pTransferable,
+ const sal_Int8 nDndAction) const;
+
/** Asynchronous part of DragFinished. The argument is the sal_Int8
nDropAction, disguised as void*.
*/
DECL_LINK(ProcessDragFinished, void*);
+
+ DECL_LINK(ExecuteNavigatorDrop, NavigatorDropEvent*);
};
} } } // end of namespace ::sd::slidesorter::controller
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsInsertionIndicatorHandler.hxx b/sd/source/ui/slidesorter/inc/controller/SlsInsertionIndicatorHandler.hxx
index e257c5729b10..1492e707d42d 100644
--- a/sd/source/ui/slidesorter/inc/controller/SlsInsertionIndicatorHandler.hxx
+++ b/sd/source/ui/slidesorter/inc/controller/SlsInsertionIndicatorHandler.hxx
@@ -31,6 +31,8 @@
#include "view/SlsInsertAnimator.hxx"
#include "view/SlsLayouter.hxx"
+#include "sdxfer.hxx"
+
namespace sd { namespace slidesorter { class SlideSorter; } }
namespace sd { namespace slidesorter { namespace model {
@@ -83,7 +85,7 @@ public:
/** Update the indicator icon from the current transferable (from the
clipboard or an active drag and drop operation.)
*/
- void UpdateIndicatorIcon (const Transferable* pTransferable);
+ void UpdateIndicatorIcon (const SdTransferable* pTransferable);
/** Set the position of the insertion marker to the given coordinates.
*/
diff --git a/sd/source/ui/slidesorter/inc/controller/SlsTransferable.hxx b/sd/source/ui/slidesorter/inc/controller/SlsTransferableData.hxx
index c0a09e73bfe9..775e759f891a 100644
--- a/sd/source/ui/slidesorter/inc/controller/SlsTransferable.hxx
+++ b/sd/source/ui/slidesorter/inc/controller/SlsTransferableData.hxx
@@ -25,10 +25,12 @@
*
************************************************************************/
-#ifndef SD_SLIDESORTER_TRANSFERABLE_HXX
-#define SD_SLIDESORTER_TRANSFERABLE_HXX
+#ifndef SD_SLIDESORTER_TRANSFERABLE_DATA_HXX
+#define SD_SLIDESORTER_TRANSFERABLE_DATA_HXX
#include "sdxfer.hxx"
+#include <boost/function.hpp>
+#include <vector>
class SdDrawDocument;
namespace sd { namespace slidesorter {
@@ -37,12 +39,12 @@ class SlideSorterViewShell;
namespace sd { namespace slidesorter { namespace controller {
-
-/** This class exists to have DragFinished call the correct object: the
- SlideSorterViewShell instead of the old SlideView.
+/** Represent previews and other information so that they can be
+ attached to an existing transferable.
*/
-class Transferable
- : public SdTransferable
+class TransferableData
+ : public SdTransferable::UserData,
+ public SfxListener
{
public:
class Representative
@@ -61,23 +63,32 @@ public:
bool mbIsExcluded;
};
-
- Transferable (
+ static SdTransferable* CreateTransferable (
SdDrawDocument* pSrcDoc,
::sd::View* pWorkView,
sal_Bool bInitOnGetData,
SlideSorterViewShell* pViewShell,
- const ::std::vector<Representative>& rRepresentatives);
+ const ::std::vector<TransferableData::Representative>& rRepresentatives);
- virtual ~Transferable (void);
+ static ::boost::shared_ptr<TransferableData> GetFromTransferable (const SdTransferable* pTransferable);
+
+ TransferableData (
+ SlideSorterViewShell* pViewShell,
+ const ::std::vector<TransferableData::Representative>& rRepresentatives);
+ ~TransferableData (void);
virtual void DragFinished (sal_Int8 nDropAction);
const ::std::vector<Representative>& GetRepresentatives (void) const;
+ /** Return the view shell for which the transferable was created.
+ */
+ SlideSorterViewShell* GetSourceViewShell (void) const;
+
private:
SlideSorterViewShell* mpViewShell;
const ::std::vector<Representative> maRepresentatives;
+ typedef ::std::vector<boost::function<void(sal_uInt8)> > CallbackContainer;
virtual void Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint);
};
diff --git a/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx b/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
index f28287b15a0e..8840f3732367 100644
--- a/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
+++ b/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
@@ -258,6 +258,8 @@ public:
ButtonBar& GetButtonBar (void) const;
ToolTip& GetToolTip (void) const;
+ virtual void DragFinished (sal_Int8 nDropAction);
+
protected:
virtual void Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint);
diff --git a/sd/source/ui/slidesorter/inc/view/SlsInsertionIndicatorOverlay.hxx b/sd/source/ui/slidesorter/inc/view/SlsInsertionIndicatorOverlay.hxx
index a9a640d978cf..a48d5fe9986a 100644
--- a/sd/source/ui/slidesorter/inc/view/SlsInsertionIndicatorOverlay.hxx
+++ b/sd/source/ui/slidesorter/inc/view/SlsInsertionIndicatorOverlay.hxx
@@ -30,7 +30,8 @@
#include "model/SlsSharedPageDescriptor.hxx"
#include "view/SlsILayerPainter.hxx"
-#include "controller/SlsTransferable.hxx"
+#include "controller/SlsTransferableData.hxx"
+#include "sdxfer.hxx"
#include <tools/gen.hxx>
#include <vcl/bitmapex.hxx>
@@ -71,7 +72,7 @@ public:
virtual void SetLayerInvalidator (const SharedILayerInvalidator& rpInvalidator);
- void Create (const controller::Transferable* pTransferable);
+ void Create (const SdTransferable* pTransferable);
/** Given a position in model coordinates this method calculates the
insertion marker both as an index in the document and as a location
@@ -110,7 +111,7 @@ private:
OutputDevice& rContent,
const Size aPreviewSize,
const sal_Int32 nOffset,
- const ::std::vector<controller::Transferable::Representative>& rPages) const;
+ const ::std::vector<controller::TransferableData::Representative>& rPages) const;
void PaintPageCount (
OutputDevice& rDevice,
const sal_Int32 nSelectionCount,
@@ -120,7 +121,7 @@ private:
scaled down previews of some of the selected pages.
*/
void Create (
- const ::std::vector<controller::Transferable::Representative>& rPages,
+ const ::std::vector<controller::TransferableData::Representative>& rPages,
const sal_Int32 nSelectionCount);
};
diff --git a/sd/source/ui/slidesorter/view/SlideSorterView.cxx b/sd/source/ui/slidesorter/view/SlideSorterView.cxx
index 728eff5ee384..58d3b1167fb5 100644
--- a/sd/source/ui/slidesorter/view/SlideSorterView.cxx
+++ b/sd/source/ui/slidesorter/view/SlideSorterView.cxx
@@ -43,6 +43,7 @@
#include "view/SlsToolTip.hxx"
#include "controller/SlideSorterController.hxx"
#include "controller/SlsProperties.hxx"
+#include "controller/SlsClipboard.hxx"
#include "model/SlideSorterModel.hxx"
#include "model/SlsPageEnumerationProvider.hxx"
#include "model/SlsPageDescriptor.hxx"
@@ -177,7 +178,6 @@ SlideSorterView::SlideSorterView (SlideSorter& rSlideSorter)
// Hide the page that contains the page objects.
SetPageVisible (sal_False);
-
// Register the background painter on level 1 to avoid the creation of a
// background buffer.
mpLayeredDevice->RegisterPainter(mpBackgroundPainter, 1);
@@ -901,6 +901,16 @@ ToolTip& SlideSorterView::GetToolTip (void) const
+void SlideSorterView::DragFinished (sal_Int8 nDropAction)
+{
+ mrSlideSorter.GetController().GetClipboard().DragFinished(nDropAction);
+
+ View::DragFinished(nDropAction);
+}
+
+
+
+
void SlideSorterView::Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint)
{
::sd::DrawDocShell* pDocShell = mrModel.GetDocument()->GetDocSh();
diff --git a/sd/source/ui/slidesorter/view/SlsInsertionIndicatorOverlay.cxx b/sd/source/ui/slidesorter/view/SlsInsertionIndicatorOverlay.cxx
index abaa5a43b215..6b5620655dbe 100644
--- a/sd/source/ui/slidesorter/view/SlsInsertionIndicatorOverlay.cxx
+++ b/sd/source/ui/slidesorter/view/SlsInsertionIndicatorOverlay.cxx
@@ -103,11 +103,15 @@ InsertionIndicatorOverlay::~InsertionIndicatorOverlay (void)
-void InsertionIndicatorOverlay::Create (const controller::Transferable* pTransferable)
+void InsertionIndicatorOverlay::Create (const SdTransferable* pTransferable)
{
if (pTransferable == NULL)
return;
+ ::boost::shared_ptr<controller::TransferableData> pData (
+ controller::TransferableData::GetFromTransferable(pTransferable));
+ if ( ! pData)
+ return;
sal_Int32 nSelectionCount (0);
if (pTransferable->HasPageBookmarks())
nSelectionCount = pTransferable->GetPageBookmarks().Count();
@@ -121,14 +125,14 @@ void InsertionIndicatorOverlay::Create (const controller::Transferable* pTransfe
nSelectionCount = pDataDocument->GetSdPageCount(PK_STANDARD);
}
}
- Create(pTransferable->GetRepresentatives(), nSelectionCount);
+ Create(pData->GetRepresentatives(), nSelectionCount);
}
void InsertionIndicatorOverlay::Create (
- const ::std::vector<controller::Transferable::Representative>& rRepresentatives,
+ const ::std::vector<controller::TransferableData::Representative>& rRepresentatives,
const sal_Int32 nSelectionCount)
{
view::Layouter& rLayouter (mrSlideSorter.GetView().GetLayouter());
@@ -196,7 +200,7 @@ Point InsertionIndicatorOverlay::PaintRepresentatives (
OutputDevice& rContent,
const Size aPreviewSize,
const sal_Int32 nOffset,
- const ::std::vector<controller::Transferable::Representative>& rRepresentatives) const
+ const ::std::vector<controller::TransferableData::Representative>& rRepresentatives) const
{
const Point aOffset (0,rRepresentatives.size()==1 ? -nOffset : 0);
diff --git a/sd/source/ui/table/tablefunction.cxx b/sd/source/ui/table/tablefunction.cxx
index 957c9da398c6..7e017fbdbe1e 100755
--- a/sd/source/ui/table/tablefunction.cxx
+++ b/sd/source/ui/table/tablefunction.cxx
@@ -185,6 +185,7 @@ void DrawViewShell::FuTable(SfxRequest& rReq)
}
}
+ GetParentWindow()->GrabFocus();
if( pPickObj )
mpView->ReplaceObjectAtView(pPickObj, *pPV, pObj, sal_True );
else
@@ -192,6 +193,10 @@ void DrawViewShell::FuTable(SfxRequest& rReq)
Invalidate(SID_DRAWTBX_INSERT);
rReq.Ignore();
+SfxViewShell* pViewShell = GetViewShell();
+ OSL_ASSERT (pViewShell!=NULL);
+ SfxBindings& rBindings = pViewShell->GetViewFrame()->GetBindings();
+ rBindings.Invalidate( SID_INSERT_TABLE, sal_True, sal_False );
break;
}
case SID_TABLEDESIGN:
diff --git a/sd/source/ui/toolpanel/controls/DocumentHelper.cxx b/sd/source/ui/toolpanel/controls/DocumentHelper.cxx
index 8ed46a90dbba..3bff5f5e7a4b 100755
--- a/sd/source/ui/toolpanel/controls/DocumentHelper.cxx
+++ b/sd/source/ui/toolpanel/controls/DocumentHelper.cxx
@@ -338,7 +338,7 @@ void DocumentHelper::AssignMasterPageToPageList (
aCleanedList.push_back(*iPage);
}
}
- if (aCleanedList.size() == 0)
+ if (aCleanedList.empty() )
break;
::svl::IUndoManager* pUndoMgr = rTargetDocument.GetDocSh()->GetUndoManager();
diff --git a/sd/source/ui/unoidl/unoobj.cxx b/sd/source/ui/unoidl/unoobj.cxx
index 681aad8f44ed..ae148ec547cf 100755
--- a/sd/source/ui/unoidl/unoobj.cxx
+++ b/sd/source/ui/unoidl/unoobj.cxx
@@ -658,36 +658,17 @@ void SAL_CALL SdXShape::setPropertyValue( const ::rtl::OUString& aPropertyName,
case WID_MASTERDEPEND:
SetMasterDepend( ::cppu::any2bool(aValue) );
break;
-/* todo
case WID_ANIMPATH:
{
- uno::Reference< drawing::XShape > xShape;
- aValue >>= xShape;
+ uno::Reference< drawing::XShape > xShape( aValue, uno::UNO_QUERY );
+ SdrPathObj* pObj2 = xShape.is() ? dynamic_cast< SdrPathObj* >( GetSdrObjectFromXShape( xShape ) ) : NULL;
- SdrObject* pObj = NULL;
- if(xShape.is())
- pObj = GetSdrObjectFromXShape( xShape );
-
- if( pObj == NULL || !pObj->ISA( SdrPathObj ) )
+ if( pObj2 == NULL )
throw lang::IllegalArgumentException();
- pInfo->mpPathObj = (SdrPathObj*)pObj;
-
- SdDrawDocument* pDoc = mpModel?mpModel->GetDoc():NULL;
- if( pDoc )
- {
- pInfo = pDoc->GetAnimationInfo(pObj);
- if( pInfo == NULL )
- {
- pInfo = new SdAnimationInfo(pDoc);
- pObj->InsertUserData( pInfo );
- }
- pInfo->mbInvisibleInPresentation = sal_True;
- }
-
+ EffectMigration::SetAnimationPath( mpShape, pObj2 );
break;
}
-*/
case WID_IMAGEMAP:
{
SdDrawDocument* pDoc = mpModel?mpModel->GetDoc():NULL;
diff --git a/sd/source/ui/view/DocumentRenderer.cxx b/sd/source/ui/view/DocumentRenderer.cxx
index 7f67a549fc10..d6fbc27d9b3f 100755
--- a/sd/source/ui/view/DocumentRenderer.cxx
+++ b/sd/source/ui/view/DocumentRenderer.cxx
@@ -1949,7 +1949,6 @@ private:
// Distribute pages to handout pages.
::std::vector<sal_uInt16> aPageIndices;
- std::vector<SdPage*> aPagesVector;
for (sal_uInt16
nIndex=0,
nCount= nPageCount,
@@ -1966,8 +1965,7 @@ private:
// Create a printer page when we have found one page for each
// placeholder or when this is the last (and special) loop.
- if (aPageIndices.size() == nShapeCount
- || nIndex==nCount)
+ if (!aPageIndices.empty() && (aPageIndices.size() == nShapeCount || nIndex==nCount))
{
maPrinterPages.push_back(
::boost::shared_ptr<PrinterPage>(
diff --git a/sd/source/ui/view/ViewTabBar.cxx b/sd/source/ui/view/ViewTabBar.cxx
index 0c0cd2b9836e..fa0c699778c1 100755
--- a/sd/source/ui/view/ViewTabBar.cxx
+++ b/sd/source/ui/view/ViewTabBar.cxx
@@ -486,7 +486,7 @@ int ViewTabBar::GetHeight (void)
{
int nHeight (0);
- if (maTabBarButtons.size() > 0)
+ if (!maTabBarButtons.empty())
{
TabPage* pActivePage (mpTabControl->GetTabPage(
mpTabControl->GetCurPageId()));
diff --git a/sd/source/ui/view/sdview2.cxx b/sd/source/ui/view/sdview2.cxx
index 73f48323312f..0236af7d5fcf 100755
--- a/sd/source/ui/view/sdview2.cxx
+++ b/sd/source/ui/view/sdview2.cxx
@@ -136,7 +136,9 @@ struct SdNavigatorDropEvent : public ExecuteDropEvent
pTransferable->SetWorkDocument( (SdDrawDocument*) GetAllMarkedModel() );
mpDoc->CreatingDataObj( NULL );
- const Rectangle aMarkRect( GetAllMarkedRect() );
+ // #112978# need to use GetAllMarkedBoundRect instead of GetAllMarkedRect to get
+ // fat lines correctly
+ const Rectangle aMarkRect( GetAllMarkedBoundRect() );
TransferableObjectDescriptor aObjDesc;
String aDisplayName;
SdrOle2Obj* pSdrOleObj = NULL;
diff --git a/sd/source/ui/view/sdwindow.cxx b/sd/source/ui/view/sdwindow.cxx
index a9830295a9ec..38dfe79af9cd 100755
--- a/sd/source/ui/view/sdwindow.cxx
+++ b/sd/source/ui/view/sdwindow.cxx
@@ -359,7 +359,7 @@ long Window::Notify( NotifyEvent& rNEvt )
nResult = mpViewShell->Notify(rNEvt, this);
}
if( !nResult )
- ::Window::Notify( rNEvt );
+ nResult = ::Window::Notify( rNEvt );
return nResult;
}