sd/inc/sdmod.hxx             |    4 +++-
 sd/source/ui/app/sdmod1.cxx  |   12 +++++++++---
 sfx2/source/view/frmload.cxx |    3 ++-
 3 files changed, 14 insertions(+), 5 deletions(-)

New commits:
commit d4892e5452bff155da6c34063ffe8c331284d8e9
Author:     Jan-Marek Glogowski <glo...@fbihome.de>
AuthorDate: Wed Oct 21 00:18:03 2020 +0200
Commit:     Jan-Marek Glogowski <glo...@fbihome.de>
CommitDate: Mon Nov 2 13:14:35 2020 +0100

    tdf#126700 handle Impress default documents
    
    Impress has a two stage load, eventually because of the optional
    template manager. Since I don't know, what the 2nd load URL
    "private:object" is used for otherwise in LO, this just marks the
    empty and default documents as replaceable in Impress.
    
    Regressed-by: 61e1e0413296928d929f99c0f006c6cbbcf4ac40
    Change-Id: Ief8d9eeaa65e8fb40400e64c16768d37ca343893
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104581
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>
    Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de>

diff --git a/sd/inc/sdmod.hxx b/sd/inc/sdmod.hxx
index 9b07b442abdc..42c4ea4e85bc 100644
--- a/sd/inc/sdmod.hxx
+++ b/sd/inc/sdmod.hxx
@@ -142,7 +142,9 @@ private:
     SfxFrame* ExecuteNewDocument( SfxRequest const & rReq );
 
     static SfxFrame* CreateEmptyDocument( const css::uno::Reference< 
css::frame::XFrame >& i_rFrame );
-    static SfxFrame* CreateFromTemplate( const OUString& rTemplatePath, const 
css::uno::Reference< css::frame::XFrame >& i_rFrame );
+    static SfxFrame* CreateFromTemplate(const OUString& rTemplatePath,
+                                        const 
css::uno::Reference<css::frame::XFrame>& i_rFrame,
+                                        const bool bReplaceable);
 
     bool mbEventListenerAdded;
 
diff --git a/sd/source/ui/app/sdmod1.cxx b/sd/source/ui/app/sdmod1.cxx
index 4ec1e83b190d..35bf5ebfb5ea 100644
--- a/sd/source/ui/app/sdmod1.cxx
+++ b/sd/source/ui/app/sdmod1.cxx
@@ -30,6 +30,7 @@
 #include <editeng/langitem.hxx>
 #include <vcl/weld.hxx>
 #include <sfx2/dispatch.hxx>
+#include <sfx2/docfile.hxx>
 #include <sfx2/request.hxx>
 #include <sfx2/templatedlg.hxx>
 #include <editeng/eeitem.hxx>
@@ -411,7 +412,8 @@ IMPL_STATIC_LINK( SdModule, EventListenerHdl, 
VclSimpleEvent&, rSimpleEvent, voi
 }
 
 
-SfxFrame* SdModule::CreateFromTemplate( const OUString& rTemplatePath, const 
Reference< XFrame >& i_rFrame )
+SfxFrame* SdModule::CreateFromTemplate(const OUString& rTemplatePath, const 
Reference<XFrame>& i_rFrame,
+                                       const bool bReplaceable)
 {
     SfxFrame* pFrame = nullptr;
 
@@ -430,6 +432,8 @@ SfxFrame* SdModule::CreateFromTemplate( const OUString& 
rTemplatePath, const Ref
     }
     else if( pDocShell )
     {
+        if (pDocShell->GetMedium() && pDocShell->GetMedium()->GetItemSet())
+            
pDocShell->GetMedium()->GetItemSet()->Put(SfxBoolItem(SID_REPLACEABLE, 
bReplaceable));
         SfxViewFrame* pViewFrame = SfxViewFrame::LoadDocumentIntoFrame( 
*pDocShell, i_rFrame );
         OSL_ENSURE( pViewFrame, "SdModule::CreateFromTemplate: no view frame - 
was the document really loaded?" );
         pFrame = pViewFrame ? &pViewFrame->GetFrame() : nullptr;
@@ -464,7 +468,7 @@ SfxFrame* SdModule::ExecuteNewDocument( SfxRequest const & 
rReq )
             if( !aStandardTemplate.isEmpty() )
             {
                 //load a template document
-                pFrame = CreateFromTemplate( aStandardTemplate, xTargetFrame );
+                pFrame = CreateFromTemplate(aStandardTemplate, xTargetFrame, 
true);
             }
             else
             {
@@ -485,7 +489,7 @@ SfxFrame* SdModule::ExecuteNewDocument( SfxRequest const & 
rReq )
 
             //pFrame is loaded with the desired template
             if (!aTemplDlg.getTemplatePath().isEmpty())
-                pFrame = CreateFromTemplate(aTemplDlg.getTemplatePath(), 
xTargetFrame);
+                pFrame = CreateFromTemplate(aTemplDlg.getTemplatePath(), 
xTargetFrame, false);
         }
     }
 
@@ -506,6 +510,8 @@ SfxFrame* SdModule::CreateEmptyDocument( const Reference< 
XFrame >& i_rFrame )
         pDoc->CreateFirstPages();
         pDoc->StopWorkStartupDelay();
     }
+    if (pNewDocSh->GetMedium() && pNewDocSh->GetMedium()->GetItemSet())
+        pNewDocSh->GetMedium()->GetItemSet()->Put(SfxBoolItem(SID_REPLACEABLE, 
true));
 
     SfxViewFrame* pViewFrame = SfxViewFrame::LoadDocumentIntoFrame( 
*pNewDocSh, i_rFrame );
     OSL_ENSURE( pViewFrame, "SdModule::CreateEmptyDocument: no view frame - 
was the document really loaded?" );
diff --git a/sfx2/source/view/frmload.cxx b/sfx2/source/view/frmload.cxx
index f69706de1b04..bb9c3218da21 100644
--- a/sfx2/source/view/frmload.cxx
+++ b/sfx2/source/view/frmload.cxx
@@ -612,7 +612,8 @@ sal_Bool SAL_CALL SfxFrameLoader_Impl::load( const 
Sequence< PropertyValue >& rA
     const bool bIsFactoryURL = sURL.startsWith( "private:factory/" );
     bool bInitNewModel = bIsFactoryURL;
     const bool bIsDefault = bIsFactoryURL && !bExternalModel;
-    aDescriptor.put("Replaceable", bIsDefault);
+    if (!aDescriptor.has("Replaceable"))
+        aDescriptor.put("Replaceable", bIsDefault);
     if (bIsDefault)
     {
         const OUString sFactory = sURL.copy( sizeof( "private:factory/" ) -1 );
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to