diff options
author | Katarina Behrens <Katarina.Behrens@cib.de> | 2017-02-12 21:56:18 +0100 |
---|---|---|
committer | Katarina Behrens <Katarina.Behrens@cib.de> | 2017-02-13 09:00:54 +0000 |
commit | 529162307e9d6191fe43d50597504474b2c1a5ba (patch) | |
tree | c81b5e026e8264e28095fc4b56249c2d4afcc989 | |
parent | da5194f730d6a0ea24a471524c23d23ca289976a (diff) |
tdf#99908: Ensure non-empty unique gradient names
for user-defined (!preset) gradients. ODF doesn't cope with nameless
gradients so well ...
Change-Id: I7a4ca32ccf58b22fc55ceeac8778029cd6d5cea3
Reviewed-on: https://gerrit.libreoffice.org/34001
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
-rw-r--r-- | sd/source/ui/sidebar/SlideBackground.cxx | 4 | ||||
-rw-r--r-- | sd/source/ui/view/drviews7.cxx | 17 |
2 files changed, 17 insertions, 4 deletions
diff --git a/sd/source/ui/sidebar/SlideBackground.cxx b/sd/source/ui/sidebar/SlideBackground.cxx index d80eab5e5aae..3d51dfba791a 100644 --- a/sd/source/ui/sidebar/SlideBackground.cxx +++ b/sd/source/ui/sidebar/SlideBackground.cxx @@ -817,7 +817,9 @@ IMPL_LINK_NOARG(SlideBackground, FillColorHdl, SvxColorListBox&, void) aGradient.SetStartColor(mpFillLB->GetSelectEntryColor()); aGradient.SetEndColor(mpFillGrad->GetSelectEntryColor()); - XFillGradientItem aItem(aGradient); + // the name doesn't really matter, it'll be converted to unique one eventually, + // but it has to be non-empty + XFillGradientItem aItem("gradient", aGradient); GetBindings()->GetDispatcher()->ExecuteList(SID_ATTR_PAGE_GRADIENT, SfxCallMode::RECORD, { &aItem }); } break; diff --git a/sd/source/ui/view/drviews7.cxx b/sd/source/ui/view/drviews7.cxx index 908c96cbef89..0e540b7bd7b0 100644 --- a/sd/source/ui/view/drviews7.cxx +++ b/sd/source/ui/view/drviews7.cxx @@ -1675,8 +1675,8 @@ void DrawViewShell::GetPageProperties( SfxItemSet &rSet ) case (drawing::FillStyle_GRADIENT): { - const XGradient& xGradient = static_cast<const XFillGradientItem*>( rPageAttr.GetItem( XATTR_FILLGRADIENT ) )->GetGradientValue(); - XFillGradientItem aFillGradientItem( OUString(), xGradient, SID_ATTR_PAGE_GRADIENT ); + const XFillGradientItem *pGradient = static_cast<const XFillGradientItem*>( rPageAttr.GetItem( XATTR_FILLGRADIENT ) ); + XFillGradientItem aFillGradientItem( pGradient->GetName(), pGradient->GetGradientValue(), SID_ATTR_PAGE_GRADIENT ); rSet.Put( aFillGradientItem ); } break; @@ -1716,6 +1716,9 @@ void DrawViewShell::SetPageProperties (SfxRequest& rReq) if ( ( nSlotId >= SID_ATTR_PAGE_COLOR ) && ( nSlotId <= SID_ATTR_PAGE_FILLSTYLE ) ) { SdrPageProperties& rPageProperties = pPage->getSdrPageProperties(); + const SfxItemSet &aPageItemSet = rPageProperties.GetItemSet(); + SfxItemSet *pTempSet = aPageItemSet.Clone(false, &mpDrawView->GetModel()->GetItemPool()); + rPageProperties.ClearItem(XATTR_FILLSTYLE); rPageProperties.ClearItem(XATTR_FILLGRADIENT); rPageProperties.ClearItem(XATTR_FILLHATCH); @@ -1744,8 +1747,14 @@ void DrawViewShell::SetPageProperties (SfxRequest& rReq) case(SID_ATTR_PAGE_GRADIENT): { XFillGradientItem aGradientItem( static_cast<const XFillGradientItem&>(pArgs->Get( XATTR_FILLGRADIENT )) ); + + // MigrateItemSet guarantees unique gradient names + SfxItemSet aMigrateSet( mpDrawView->GetModel()->GetItemPool(), XATTR_FILLGRADIENT, XATTR_FILLGRADIENT ); + aMigrateSet.Put( aGradientItem ); + SdrModel::MigrateItemSet( &aMigrateSet, pTempSet, mpDrawView->GetModel() ); + + rPageProperties.PutItemSet( *pTempSet ); rPageProperties.PutItem( XFillStyleItem( drawing::FillStyle_GRADIENT ) ); - rPageProperties.PutItem( XFillGradientItem( aGradientItem ) ); } break; @@ -1769,6 +1778,8 @@ void DrawViewShell::SetPageProperties (SfxRequest& rReq) break; } + delete pTempSet; + rReq.Done(); } } |