[Libreoffice-commits] core.git: 3 commits - sc/source sfx2/source

Kohei Yoshida kohei.yoshida at collabora.com
Mon May 12 14:59:26 PDT 2014


 sc/source/ui/drawfunc/fuins2.cxx |  546 +++++++++++++++++++--------------------
 sfx2/source/doc/objmisc.cxx      |   29 +-
 2 files changed, 291 insertions(+), 284 deletions(-)

New commits:
commit ee5cae3da45dec3c17bbff849cbbfd5363984bd0
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon May 12 17:19:17 2014 -0400

    Let's not forget to free the SdrOle2Obj instance here.
    
    When the chart creation wizard is cancelled.
    
    Change-Id: I5eb2b2719ce3ec1eaa180a8c7193df23794dc03d

diff --git a/sc/source/ui/drawfunc/fuins2.cxx b/sc/source/ui/drawfunc/fuins2.cxx
index ddc961b..9c7b192 100644
--- a/sc/source/ui/drawfunc/fuins2.cxx
+++ b/sc/source/ui/drawfunc/fuins2.cxx
@@ -746,7 +746,12 @@ FuInsertChart::FuInsertChart(ScTabViewShell* pViewSh, Window* pWin, ScDrawView*
                         OSL_ASSERT( pPage );
                         OSL_ASSERT( pObj );
                         if( pPage )
-                            pPage->RemoveObject( pObj->GetOrdNum());
+                        {
+                            // Remove the OLE2 object from the sdr page.
+                            SdrObject* pRemoved = pPage->RemoveObject(pObj->GetOrdNum());
+                            OSL_ASSERT(pRemoved == pObj);
+                            SdrObject::Free(pRemoved); // Don't forget to free it.
+                        }
 
                         bAddUndo = false;       // don't create the undo action for inserting
 
commit 13c9628c2641a44267e6681995b3261e4ac6d809
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon May 12 17:16:30 2014 -0400

    Bail out early if it's not a chart module.
    
    Change-Id: I2e487b79671153786f02f12b4aac2b32476585e4

diff --git a/sc/source/ui/drawfunc/fuins2.cxx b/sc/source/ui/drawfunc/fuins2.cxx
index 1505b28..ddc961b 100644
--- a/sc/source/ui/drawfunc/fuins2.cxx
+++ b/sc/source/ui/drawfunc/fuins2.cxx
@@ -439,346 +439,345 @@ FuInsertChart::FuInsertChart(ScTabViewShell* pViewSh, Window* pWin, ScDrawView*
     if( ! rReq.IsAPI() )
         rReq.Done();
 
-    if( SvtModuleOptions().IsChart() )
-    {
+    if (!SvtModuleOptions().IsChart())
+        return;
 
-        // BM/IHA --
+    // BM/IHA --
 
-        // get range
-        OUString aRangeString;
-        ScRange aPositionRange;             // cell range for chart positioning
-        ScMarkData aMark = pViewSh->GetViewData()->GetMarkData();
-        if( pReqArgs )
-        {
-            const SfxPoolItem* pItem;
-            if( pReqArgs->HasItem( FN_PARAM_5, &pItem ) )
-                aRangeString = OUString( ((const SfxStringItem*)pItem)->GetValue());
+    // get range
+    OUString aRangeString;
+    ScRange aPositionRange;             // cell range for chart positioning
+    ScMarkData aMark = pViewSh->GetViewData()->GetMarkData();
+    if( pReqArgs )
+    {
+        const SfxPoolItem* pItem;
+        if( pReqArgs->HasItem( FN_PARAM_5, &pItem ) )
+            aRangeString = OUString( ((const SfxStringItem*)pItem)->GetValue());
 
-            aPositionRange = pViewSh->GetViewData()->GetCurPos();
+        aPositionRange = pViewSh->GetViewData()->GetCurPos();
+    }
+    else
+    {
+        bool bAutomaticMark = false;
+        if ( !aMark.IsMarked() && !aMark.IsMultiMarked() )
+        {
+            pViewSh->GetViewData()->GetView()->MarkDataArea( true );
+            bAutomaticMark = true;
         }
-        else
+
+        ScMarkData aMultiMark( aMark );
+        aMultiMark.MarkToMulti();
+
+        ScRangeList aRanges;
+        aMultiMark.FillRangeListWithMarks( &aRanges, false );
+        OUString aStr;
+        ScDocument* pDocument = pViewSh->GetViewData()->GetDocument();
+        aRanges.Format( aStr, SCR_ABS_3D, pDocument, pDocument->GetAddressConvention() );
+        aRangeString = aStr;
+
+        // get "total" range for positioning
+        if ( !aRanges.empty() )
         {
-            bool bAutomaticMark = false;
-            if ( !aMark.IsMarked() && !aMark.IsMultiMarked() )
+            aPositionRange = *aRanges[ 0 ];
+            for ( size_t i = 1, nCount = aRanges.size(); i < nCount; ++i )
             {
-                pViewSh->GetViewData()->GetView()->MarkDataArea( true );
-                bAutomaticMark = true;
+                aPositionRange.ExtendTo( *aRanges[ i ] );
             }
+        }
 
-            ScMarkData aMultiMark( aMark );
-            aMultiMark.MarkToMulti();
+        if(bAutomaticMark)
+            pViewSh->GetViewData()->GetView()->Unmark();
+    }
 
-            ScRangeList aRanges;
-            aMultiMark.FillRangeListWithMarks( &aRanges, false );
-            OUString aStr;
-            ScDocument* pDocument = pViewSh->GetViewData()->GetDocument();
-            aRanges.Format( aStr, SCR_ABS_3D, pDocument, pDocument->GetAddressConvention() );
-            aRangeString = aStr;
 
-            // get "total" range for positioning
-            if ( !aRanges.empty() )
-            {
-                aPositionRange = *aRanges[ 0 ];
-                for ( size_t i = 1, nCount = aRanges.size(); i < nCount; ++i )
-                {
-                    aPositionRange.ExtendTo( *aRanges[ i ] );
-                }
-            }
+    // adapted old code
+    pView->UnmarkAll();
 
-            if(bAutomaticMark)
-                pViewSh->GetViewData()->GetView()->Unmark();
-        }
+    OUString aName;
+    const sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT;
 
+    uno::Reference < embed::XEmbeddedObject > xObj =
+        pViewShell->GetObjectShell()->GetEmbeddedObjectContainer().CreateEmbeddedObject( SvGlobalName( SO3_SCH_CLASSID_60 ).GetByteSequence(), aName );
 
-        // adapted old code
-        pView->UnmarkAll();
+    uno::Reference< ::com::sun::star::chart2::data::XDataReceiver > xReceiver;
+    uno::Reference< embed::XComponentSupplier > xCompSupp( xObj, uno::UNO_QUERY );
+    if( xCompSupp.is())
+        xReceiver.set( xCompSupp->getComponent(), uno::UNO_QUERY );
 
-        OUString aName;
-        const sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT;
+    // lock the model to suppress any internal updates
+    uno::Reference< frame::XModel > xChartModel( xReceiver, uno::UNO_QUERY );
+    if( xChartModel.is() )
+        xChartModel->lockControllers();
 
-        uno::Reference < embed::XEmbeddedObject > xObj =
-            pViewShell->GetObjectShell()->GetEmbeddedObjectContainer().CreateEmbeddedObject( SvGlobalName( SO3_SCH_CLASSID_60 ).GetByteSequence(), aName );
+    ScRangeListRef aDummy;
+    Rectangle aMarkDest;
+    SCTAB nMarkTab;
+    bool bDrawRect = pViewShell->GetChartArea( aDummy, aMarkDest, nMarkTab );
 
-        uno::Reference< ::com::sun::star::chart2::data::XDataReceiver > xReceiver;
-        uno::Reference< embed::XComponentSupplier > xCompSupp( xObj, uno::UNO_QUERY );
-        if( xCompSupp.is())
-            xReceiver.set( xCompSupp->getComponent(), uno::UNO_QUERY );
+    //  Objekt-Groesse
+    awt::Size aSz = xObj->getVisualAreaSize( nAspect );
+    Size aSize( aSz.Width, aSz.Height );
 
-        // lock the model to suppress any internal updates
-        uno::Reference< frame::XModel > xChartModel( xReceiver, uno::UNO_QUERY );
-        if( xChartModel.is() )
-            xChartModel->lockControllers();
+    MapUnit aMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) );
 
-        ScRangeListRef aDummy;
-        Rectangle aMarkDest;
-        SCTAB nMarkTab;
-        bool bDrawRect = pViewShell->GetChartArea( aDummy, aMarkDest, nMarkTab );
+    bool bSizeCh = false;
+    if (bDrawRect && !aMarkDest.IsEmpty())
+    {
+        aSize = aMarkDest.GetSize();
+        bSizeCh = true;
+    }
+    if (aSize.Height() <= 0 || aSize.Width() <= 0)
+    {
+        aSize.Width() = 5000;
+        aSize.Height() = 5000;
+        bSizeCh = true;
+    }
+    if (bSizeCh)
+    {
+        aSize = Window::LogicToLogic( aSize, MapMode( MAP_100TH_MM ), MapMode( aMapUnit ) );
+        aSz.Width = aSize.Width();
+        aSz.Height = aSize.Height();
+        xObj->setVisualAreaSize( nAspect, aSz );
+    }
 
-        //  Objekt-Groesse
-        awt::Size aSz = xObj->getVisualAreaSize( nAspect );
-        Size aSize( aSz.Width, aSz.Height );
+    ScViewData* pData = pViewSh->GetViewData();
+    ScDocShell* pScDocSh = pData->GetDocShell();
+    ScDocument* pScDoc   = pScDocSh->GetDocument();
+    bool bUndo (pScDoc->IsUndoEnabled());
+
+    Window* pParentWindow = pData->GetActiveWin();
+    OpenGLWindow* pChildWindow = new OpenGLWindow(pParentWindow);
+    Size aWindowSize = pChildWindow->LogicToPixel( aSize, MapMode( MAP_100TH_MM ) );
+    pChildWindow->SetSizePixel(aWindowSize);
+    pChildWindow->Show();
+    uno::Reference< chart2::X3DChartWindowProvider > x3DWindowProvider( xChartModel, uno::UNO_QUERY_THROW );
+    sal_uInt64 nWindowPtr = reinterpret_cast<sal_uInt64>(pChildWindow);
+    x3DWindowProvider->setWindow(nWindowPtr);
+    ScGridWindow* pGridWindow = dynamic_cast<ScGridWindow*>(pParentWindow);
+    if(pGridWindow)
+    {
+        pGridWindow->AddChildWindow(pChildWindow);
+    }
+    else
+        SAL_WARN("sc", "not a grid window. You are in serious trouble");
 
-        MapUnit aMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) );
+    if( pReqArgs )
+    {
+        const SfxPoolItem* pItem;
+        sal_uInt16 nToTable = 0;
 
-        bool bSizeCh = false;
-        if (bDrawRect && !aMarkDest.IsEmpty())
-        {
-            aSize = aMarkDest.GetSize();
-            bSizeCh = true;
-        }
-        if (aSize.Height() <= 0 || aSize.Width() <= 0)
+        if( pReqArgs->HasItem( FN_PARAM_4, &pItem ) )
         {
-            aSize.Width() = 5000;
-            aSize.Height() = 5000;
-            bSizeCh = true;
-        }
-        if (bSizeCh)
-        {
-            aSize = Window::LogicToLogic( aSize, MapMode( MAP_100TH_MM ), MapMode( aMapUnit ) );
-            aSz.Width = aSize.Width();
-            aSz.Height = aSize.Height();
-            xObj->setVisualAreaSize( nAspect, aSz );
-        }
+            if ( pItem->ISA( SfxUInt16Item ) )
+                nToTable = ((const SfxUInt16Item*)pItem)->GetValue();
+            else if ( pItem->ISA( SfxBoolItem ) )
+            {
+                //  in der idl fuer Basic steht FN_PARAM_4 als SfxBoolItem
+                //  -> wenn gesetzt, neue Tabelle, sonst aktuelle Tabelle
 
-        ScViewData* pData = pViewSh->GetViewData();
-        ScDocShell* pScDocSh = pData->GetDocShell();
-        ScDocument* pScDoc   = pScDocSh->GetDocument();
-        bool bUndo (pScDoc->IsUndoEnabled());
-
-        Window* pParentWindow = pData->GetActiveWin();
-        OpenGLWindow* pChildWindow = new OpenGLWindow(pParentWindow);
-        Size aWindowSize = pChildWindow->LogicToPixel( aSize, MapMode( MAP_100TH_MM ) );
-        pChildWindow->SetSizePixel(aWindowSize);
-        pChildWindow->Show();
-        uno::Reference< chart2::X3DChartWindowProvider > x3DWindowProvider( xChartModel, uno::UNO_QUERY_THROW );
-        sal_uInt64 nWindowPtr = reinterpret_cast<sal_uInt64>(pChildWindow);
-        x3DWindowProvider->setWindow(nWindowPtr);
-        ScGridWindow* pGridWindow = dynamic_cast<ScGridWindow*>(pParentWindow);
-        if(pGridWindow)
-        {
-            pGridWindow->AddChildWindow(pChildWindow);
+                if ( ((const SfxBoolItem*)pItem)->GetValue() )
+                    nToTable = static_cast<sal_uInt16>(pScDoc->GetTableCount());
+                else
+                    nToTable = static_cast<sal_uInt16>(pData->GetTabNo());
+            }
         }
         else
-            SAL_WARN("sc", "not a grid window. You are in serious trouble");
-
-        if( pReqArgs )
         {
-            const SfxPoolItem* pItem;
-            sal_uInt16 nToTable = 0;
+            if (bDrawRect)
+                nToTable = static_cast<sal_uInt16>(nMarkTab);
+            rReq.AppendItem( SfxUInt16Item( FN_PARAM_4, nToTable ) );
+        }
 
-            if( pReqArgs->HasItem( FN_PARAM_4, &pItem ) )
-            {
-                if ( pItem->ISA( SfxUInt16Item ) )
-                    nToTable = ((const SfxUInt16Item*)pItem)->GetValue();
-                else if ( pItem->ISA( SfxBoolItem ) )
-                {
-                    //  in der idl fuer Basic steht FN_PARAM_4 als SfxBoolItem
-                    //  -> wenn gesetzt, neue Tabelle, sonst aktuelle Tabelle
+        // auf neue Tabelle ausgeben?
+        if ( nToTable == pScDoc->GetTableCount() )
+        {
+            // dann los...
+            OUString      aTabName;
+            SCTAB       nNewTab = pScDoc->GetTableCount();
 
-                    if ( ((const SfxBoolItem*)pItem)->GetValue() )
-                        nToTable = static_cast<sal_uInt16>(pScDoc->GetTableCount());
-                    else
-                        nToTable = static_cast<sal_uInt16>(pData->GetTabNo());
-                }
-            }
-            else
-            {
-                if (bDrawRect)
-                    nToTable = static_cast<sal_uInt16>(nMarkTab);
-                rReq.AppendItem( SfxUInt16Item( FN_PARAM_4, nToTable ) );
-            }
+            pScDoc->CreateValidTabName( aTabName );
 
-            // auf neue Tabelle ausgeben?
-            if ( nToTable == pScDoc->GetTableCount() )
+            if ( pScDoc->InsertTab( nNewTab, aTabName ) )
             {
-                // dann los...
-                OUString      aTabName;
-                SCTAB       nNewTab = pScDoc->GetTableCount();
+                bool bAppend = true;
 
-                pScDoc->CreateValidTabName( aTabName );
-
-                if ( pScDoc->InsertTab( nNewTab, aTabName ) )
-                {
-                    bool bAppend = true;
-
-                    if (bUndo)
-                    {
-                        pScDocSh->GetUndoManager()->AddUndoAction(
-                            new ScUndoInsertTab( pScDocSh, nNewTab,
-                                                 bAppend, aTabName ) );
-                    }
-
-                    pScDocSh->Broadcast( ScTablesHint( SC_TAB_INSERTED, nNewTab ) );
-                    pViewSh->SetTabNo( nNewTab, true );
-                    pScDocSh->PostPaintExtras();            //! erst hinterher ???
-                }
-                else
+                if (bUndo)
                 {
-                    OSL_FAIL( "Could not create new table :-/" );
+                    pScDocSh->GetUndoManager()->AddUndoAction(
+                        new ScUndoInsertTab( pScDocSh, nNewTab,
+                                             bAppend, aTabName ) );
                 }
+
+                pScDocSh->Broadcast( ScTablesHint( SC_TAB_INSERTED, nNewTab ) );
+                pViewSh->SetTabNo( nNewTab, true );
+                pScDocSh->PostPaintExtras();            //! erst hinterher ???
             }
-            else if ( nToTable != pData->GetTabNo() )
+            else
             {
-                pViewSh->SetTabNo( nToTable, true );
+                OSL_FAIL( "Could not create new table :-/" );
             }
         }
+        else if ( nToTable != pData->GetTabNo() )
+        {
+            pViewSh->SetTabNo( nToTable, true );
+        }
+    }
 
-        lcl_ChartInit( xObj, pData, aRangeString );         // set source range, auto-detect column/row headers
+    lcl_ChartInit( xObj, pData, aRangeString );         // set source range, auto-detect column/row headers
 
-        //  Objekt-Position
+    //  Objekt-Position
 
-        Point aStart;
-        if ( bDrawRect )
-            aStart = aMarkDest.TopLeft();                       // marked by hand
-        else
-        {
-            // get chart position (from window size and data range)
-            aStart = pViewSh->GetChartInsertPos( aSize, aPositionRange );
-        }
-        pChildWindow->SetPosPixel(pChildWindow->LogicToPixel(aStart, MapMode(MAP_100TH_MM)));
+    Point aStart;
+    if ( bDrawRect )
+        aStart = aMarkDest.TopLeft();                       // marked by hand
+    else
+    {
+        // get chart position (from window size and data range)
+        aStart = pViewSh->GetChartInsertPos( aSize, aPositionRange );
+    }
+    pChildWindow->SetPosPixel(pChildWindow->LogicToPixel(aStart, MapMode(MAP_100TH_MM)));
 
-        Rectangle aRect (aStart, aSize);
-        SdrOle2Obj* pObj = new SdrOle2Obj( svt::EmbeddedObjectRef( xObj, nAspect ), aName, aRect);
-        SdrPageView* pPV = pView->GetSdrPageView();
+    Rectangle aRect (aStart, aSize);
+    SdrOle2Obj* pObj = new SdrOle2Obj( svt::EmbeddedObjectRef( xObj, nAspect ), aName, aRect);
+    SdrPageView* pPV = pView->GetSdrPageView();
 
-        // #i121334# This call will change the chart's default background fill from white to transparent.
-        // Add here again if this is wanted (see task description for details)
-        // ChartHelper::AdaptDefaultsForChart( xObj );
+    // #i121334# This call will change the chart's default background fill from white to transparent.
+    // Add here again if this is wanted (see task description for details)
+    // ChartHelper::AdaptDefaultsForChart( xObj );
 
 //        pView->InsertObjectAtView(pObj, *pPV);//this call leads to an immidiate redraw and asks the chart for a visual representation
 
-        // use the page instead of the view to insert, so no undo action is created yet
-        SdrPage* pInsPage = pPV->GetPage();
-        pInsPage->InsertObject( pObj );
-        pView->UnmarkAllObj();
-        pView->MarkObj( pObj, pPV );
-        bool bAddUndo = true;               // add undo action later, unless the dialog is canceled
+    // use the page instead of the view to insert, so no undo action is created yet
+    SdrPage* pInsPage = pPV->GetPage();
+    pInsPage->InsertObject( pObj );
+    pView->UnmarkAllObj();
+    pView->MarkObj( pObj, pPV );
+    bool bAddUndo = true;               // add undo action later, unless the dialog is canceled
 
-        if (rReq.IsAPI())
-        {
-            if( xChartModel.is() )
-                xChartModel->unlockControllers();
-        }
-        else
-        {
-            //the controller will be unlocked by the dialog when the dialog is told to do so
+    if (rReq.IsAPI())
+    {
+        if( xChartModel.is() )
+            xChartModel->unlockControllers();
+    }
+    else
+    {
+        //the controller will be unlocked by the dialog when the dialog is told to do so
 
-            // only activate object if not called via API (e.g. macro)
-            pViewShell->ActivateObject( (SdrOle2Obj*) pObj, SVVERB_SHOW );
+        // only activate object if not called via API (e.g. macro)
+        pViewShell->ActivateObject( (SdrOle2Obj*) pObj, SVVERB_SHOW );
 
-            //open wizard
-            //@todo get context from calc if that has one
-            uno::Reference< uno::XComponentContext > xContext(
-                ::cppu::defaultBootstrap_InitialComponentContext() );
-            if(xContext.is())
+        //open wizard
+        //@todo get context from calc if that has one
+        uno::Reference< uno::XComponentContext > xContext(
+            ::cppu::defaultBootstrap_InitialComponentContext() );
+        if(xContext.is())
+        {
+            uno::Reference< lang::XMultiComponentFactory > xMCF( xContext->getServiceManager() );
+            if(xMCF.is())
             {
-                uno::Reference< lang::XMultiComponentFactory > xMCF( xContext->getServiceManager() );
-                if(xMCF.is())
+                uno::Reference< ui::dialogs::XExecutableDialog > xDialog(
+                    xMCF->createInstanceWithContext(
+                        OUString("com.sun.star.comp.chart2.WizardDialog")
+                        , xContext), uno::UNO_QUERY);
+                uno::Reference< lang::XInitialization > xInit( xDialog, uno::UNO_QUERY );
+                if( xChartModel.is() && xInit.is() )
                 {
-                    uno::Reference< ui::dialogs::XExecutableDialog > xDialog(
-                        xMCF->createInstanceWithContext(
-                            OUString("com.sun.star.comp.chart2.WizardDialog")
-                            , xContext), uno::UNO_QUERY);
-                    uno::Reference< lang::XInitialization > xInit( xDialog, uno::UNO_QUERY );
-                    if( xChartModel.is() && xInit.is() )
+                    uno::Reference< awt::XWindow > xDialogParentWindow(0);
+                    //  initialize dialog
+                    uno::Sequence<uno::Any> aSeq(2);
+                    uno::Any* pArray = aSeq.getArray();
+                    beans::PropertyValue aParam1;
+                    aParam1.Name = "ParentWindow";
+                    aParam1.Value <<= uno::makeAny(xDialogParentWindow);
+                    beans::PropertyValue aParam2;
+                    aParam2.Name = "ChartModel";
+                    aParam2.Value <<= uno::makeAny(xChartModel);
+                    pArray[0] <<= uno::makeAny(aParam1);
+                    pArray[1] <<= uno::makeAny(aParam2);
+                    xInit->initialize( aSeq );
+
+                    // try to set the dialog's position so it doesn't hide the chart
+                    uno::Reference < beans::XPropertySet > xDialogProps( xDialog, uno::UNO_QUERY );
+                    if ( xDialogProps.is() )
                     {
-                        uno::Reference< awt::XWindow > xDialogParentWindow(0);
-                        //  initialize dialog
-                        uno::Sequence<uno::Any> aSeq(2);
-                        uno::Any* pArray = aSeq.getArray();
-                        beans::PropertyValue aParam1;
-                        aParam1.Name = "ParentWindow";
-                        aParam1.Value <<= uno::makeAny(xDialogParentWindow);
-                        beans::PropertyValue aParam2;
-                        aParam2.Name = "ChartModel";
-                        aParam2.Value <<= uno::makeAny(xChartModel);
-                        pArray[0] <<= uno::makeAny(aParam1);
-                        pArray[1] <<= uno::makeAny(aParam2);
-                        xInit->initialize( aSeq );
-
-                        // try to set the dialog's position so it doesn't hide the chart
-                        uno::Reference < beans::XPropertySet > xDialogProps( xDialog, uno::UNO_QUERY );
-                        if ( xDialogProps.is() )
+                        try
                         {
-                            try
+                            //get dialog size:
+                            awt::Size aDialogAWTSize;
+                            if( xDialogProps->getPropertyValue("Size")
+                                >>= aDialogAWTSize )
                             {
-                                //get dialog size:
-                                awt::Size aDialogAWTSize;
-                                if( xDialogProps->getPropertyValue("Size")
-                                    >>= aDialogAWTSize )
+                                Size aDialogSize( aDialogAWTSize.Width, aDialogAWTSize.Height );
+                                if ( aDialogSize.Width() > 0 && aDialogSize.Height() > 0 )
                                 {
-                                    Size aDialogSize( aDialogAWTSize.Width, aDialogAWTSize.Height );
-                                    if ( aDialogSize.Width() > 0 && aDialogSize.Height() > 0 )
-                                    {
-                                        //calculate and set new position
-                                        Point aDialogPos = pViewShell->GetChartDialogPos( aDialogSize, aRect );
-                                        xDialogProps->setPropertyValue("Position",
-                                            uno::makeAny( awt::Point(aDialogPos.getX(),aDialogPos.getY()) ) );
-                                    }
+                                    //calculate and set new position
+                                    Point aDialogPos = pViewShell->GetChartDialogPos( aDialogSize, aRect );
+                                    xDialogProps->setPropertyValue("Position",
+                                        uno::makeAny( awt::Point(aDialogPos.getX(),aDialogPos.getY()) ) );
                                 }
-                                //tell the dialog to unlock controller
-                                xDialogProps->setPropertyValue("UnlockControllersOnExecute",
-                                            uno::makeAny( sal_True ) );
-
-                            }
-                            catch( uno::Exception& )
-                            {
-                                OSL_FAIL( "Chart wizard couldn't be positioned automatically\n" );
                             }
-                        }
+                            //tell the dialog to unlock controller
+                            xDialogProps->setPropertyValue("UnlockControllersOnExecute",
+                                        uno::makeAny( sal_True ) );
 
-                        sal_Int16 nDialogRet = xDialog->execute();
-                        if( nDialogRet == ui::dialogs::ExecutableDialogResults::CANCEL )
+                        }
+                        catch( uno::Exception& )
                         {
-                            pGridWindow->DeleteChildWindow(pChildWindow);
-                            // leave OLE inplace mode and unmark
-                            OSL_ASSERT( pViewShell );
-                            OSL_ASSERT( pView );
-                            pViewShell->DeactivateOle();
-                            pView->UnmarkAll();
+                            OSL_FAIL( "Chart wizard couldn't be positioned automatically\n" );
+                        }
+                    }
 
-                            // old page view pointer is invalid after switching sheets
-                            pPV = pView->GetSdrPageView();
+                    sal_Int16 nDialogRet = xDialog->execute();
+                    if( nDialogRet == ui::dialogs::ExecutableDialogResults::CANCEL )
+                    {
+                        pGridWindow->DeleteChildWindow(pChildWindow);
+                        // leave OLE inplace mode and unmark
+                        OSL_ASSERT( pViewShell );
+                        OSL_ASSERT( pView );
+                        pViewShell->DeactivateOle();
+                        pView->UnmarkAll();
 
-                            // remove the chart
-                            OSL_ASSERT( pPV );
-                            SdrPage * pPage( pPV->GetPage());
-                            OSL_ASSERT( pPage );
-                            OSL_ASSERT( pObj );
-                            if( pPage )
-                                pPage->RemoveObject( pObj->GetOrdNum());
+                        // old page view pointer is invalid after switching sheets
+                        pPV = pView->GetSdrPageView();
 
-                            bAddUndo = false;       // don't create the undo action for inserting
+                        // remove the chart
+                        OSL_ASSERT( pPV );
+                        SdrPage * pPage( pPV->GetPage());
+                        OSL_ASSERT( pPage );
+                        OSL_ASSERT( pObj );
+                        if( pPage )
+                            pPage->RemoveObject( pObj->GetOrdNum());
 
-                            // leave the draw shell
-                            pViewShell->SetDrawShell( false );
+                        bAddUndo = false;       // don't create the undo action for inserting
 
-                            // reset marked cell area
+                        // leave the draw shell
+                        pViewShell->SetDrawShell( false );
 
-                            pViewSh->GetViewData()->GetViewShell()->SetMarkData(aMark);
-                        }
-                        else
-                        {
-                            OSL_ASSERT( nDialogRet == ui::dialogs::ExecutableDialogResults::OK );
-                            //@todo maybe move chart to different table
-                        }
+                        // reset marked cell area
+
+                        pViewSh->GetViewData()->GetViewShell()->SetMarkData(aMark);
+                    }
+                    else
+                    {
+                        OSL_ASSERT( nDialogRet == ui::dialogs::ExecutableDialogResults::OK );
+                        //@todo maybe move chart to different table
                     }
-                    uno::Reference< lang::XComponent > xComponent( xDialog, uno::UNO_QUERY );
-                    if( xComponent.is())
-                        xComponent->dispose();
                 }
+                uno::Reference< lang::XComponent > xComponent( xDialog, uno::UNO_QUERY );
+                if( xComponent.is())
+                    xComponent->dispose();
             }
         }
+    }
 
-        if ( bAddUndo )
-        {
-            // add undo action the same way as in SdrEditView::InsertObjectAtView
-            // (using UndoActionHdl etc.)
-            pView->AddUndo(pDoc->GetSdrUndoFactory().CreateUndoNewObject(*pObj));
-        }
-
-        // BM/IHA --
+    if ( bAddUndo )
+    {
+        // add undo action the same way as in SdrEditView::InsertObjectAtView
+        // (using UndoActionHdl etc.)
+        pView->AddUndo(pDoc->GetSdrUndoFactory().CreateUndoNewObject(*pObj));
     }
+
+    // BM/IHA --
 }
 
 void FuInsertChart::Activate()
commit 34100ec12962e2799d1ab454dcfc3513968aa22d
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon May 12 16:13:38 2014 -0400

    It makes no sense to create object container when no objects are embedded.
    
    Change-Id: Id13a0955a2b26dcc06766ad85f6ff9c598b4f0f2

diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx
index 163e326..070703e 100644
--- a/sfx2/source/doc/objmisc.cxx
+++ b/sfx2/source/doc/objmisc.cxx
@@ -302,25 +302,28 @@ bool SfxObjectShell::IsModified()
         return false;
     }
 
-    uno::Sequence < OUString > aNames = GetEmbeddedObjectContainer().GetObjectNames();
-    for ( sal_Int32 n=0; n<aNames.getLength(); n++ )
+    if (pImp->mpObjectContainer)
     {
-        uno::Reference < embed::XEmbeddedObject > xObj = GetEmbeddedObjectContainer().GetEmbeddedObject( aNames[n] );
-        OSL_ENSURE( xObj.is(), "An empty entry in the embedded objects list!\n" );
-        if ( xObj.is() )
+        uno::Sequence < OUString > aNames = GetEmbeddedObjectContainer().GetObjectNames();
+        for ( sal_Int32 n=0; n<aNames.getLength(); n++ )
         {
-            try
+            uno::Reference < embed::XEmbeddedObject > xObj = GetEmbeddedObjectContainer().GetEmbeddedObject( aNames[n] );
+            OSL_ENSURE( xObj.is(), "An empty entry in the embedded objects list!\n" );
+            if ( xObj.is() )
             {
-                sal_Int32 nState = xObj->getCurrentState();
-                if ( nState != embed::EmbedStates::LOADED )
+                try
                 {
-                    uno::Reference< util::XModifiable > xModifiable( xObj->getComponent(), uno::UNO_QUERY );
-                    if ( xModifiable.is() && xModifiable->isModified() )
-                        return true;
+                    sal_Int32 nState = xObj->getCurrentState();
+                    if ( nState != embed::EmbedStates::LOADED )
+                    {
+                        uno::Reference< util::XModifiable > xModifiable( xObj->getComponent(), uno::UNO_QUERY );
+                        if ( xModifiable.is() && xModifiable->isModified() )
+                            return true;
+                    }
                 }
+                catch( uno::Exception& )
+                {}
             }
-            catch( uno::Exception& )
-            {}
         }
     }
 


More information about the Libreoffice-commits mailing list