diff options
author | Michael Stahl <mstahl@redhat.com> | 2015-04-17 21:20:47 +0200 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-04-20 09:00:10 +0000 |
commit | 00dc0e2a2d505e5281a9f5a32fa658e5fca6a6ea (patch) | |
tree | 0d99ce4833572a61782548b0107728a1af6c9f18 | |
parent | 38c5938817cfb1d1ee4c42027a88cbec327d036c (diff) |
tdf#82784: cui: Area tab page: do not override imported bitmaps
Check that we don't clobber a custom bitmap in the dialog.
The (non-obvious) trick is that the name of these is non-empty, so we
can check that to filter out pool default items that Draw likes to put
into item sets (?), as well as just plain weird items that Draw likes to
put into item sets, while avoiding relying on the surprisingly
implemented ImpGraphic::operator==().
(regression from 38d0047da7f964c862360b48d88cc869ad376b6b)
(cherry picked from commit 171fb61c6526daf83d6948a543a1614215590946)
Conflicts:
cui/source/tabpages/tparea.cxx
Change-Id: I0b94e49ef3a9a32c188c3b117a57f780f55e1584
Reviewed-on: https://gerrit.libreoffice.org/15372
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | cui/source/tabpages/tparea.cxx | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/cui/source/tabpages/tparea.cxx b/cui/source/tabpages/tparea.cxx index 35db8ef9a85a..9f7803bffeb7 100644 --- a/cui/source/tabpages/tparea.cxx +++ b/cui/source/tabpages/tparea.cxx @@ -1423,28 +1423,35 @@ void SvxAreaTabPage::Reset( const SfxItemSet& rAttrs ) m_pLbHatchBckgrdColor->SelectEntry( rColorItem.GetColorValue() ); } - if (SFX_ITEM_DONTCARE != rAttrs.GetItemState(XATTR_FILLGRADIENT)) + SfxItemState const eGradState(rAttrs.GetItemState(XATTR_FILLGRADIENT)); + XFillGradientItem const* pGradientItem(NULL); + if (SFX_ITEM_DONTCARE != eGradState) { - XFillGradientItem const& rGradientItem( - static_cast<const XFillGradientItem&>( - rAttrs.Get(XATTR_FILLGRADIENT)) ); - OUString const aString( rGradientItem.GetName() ); - XGradient const aGradient( rGradientItem.GetGradientValue() ); - + pGradientItem = &static_cast<const XFillGradientItem&>( + rAttrs.Get(XATTR_FILLGRADIENT)); + OUString const aString( pGradientItem->GetName() ); + XGradient const aGradient( pGradientItem->GetGradientValue() ); m_pLbGradient->SelectEntryByList(pGradientList, aString, aGradient); } - if (!m_pLbGradient->GetSelectEntryCount()) + if (!m_pLbGradient->GetSelectEntryCount() + && (SFX_ITEM_DEFAULT == eGradState + || (pGradientItem && pGradientItem->GetName().isEmpty()))) { // avoid relying on pool default - cannot export that m_pLbGradient->SelectEntryPos(0); // anything better than nothing isMissingGradient = true; } - if (SFX_ITEM_DONTCARE != rAttrs.GetItemState(XATTR_FILLHATCH)) + SfxItemState const eHatchState(rAttrs.GetItemState(XATTR_FILLHATCH)); + XFillHatchItem const* pHatch(NULL); + if (SFX_ITEM_DONTCARE != eHatchState) { - m_pLbHatching->SelectEntry( static_cast<const XFillHatchItem&>( - rAttrs.Get(XATTR_FILLHATCH)).GetName() ); + pHatch = &static_cast<const XFillHatchItem&>( + rAttrs.Get(XATTR_FILLHATCH)); + m_pLbHatching->SelectEntry(pHatch->GetName()); } - if (!m_pLbHatching->GetSelectEntryCount()) + if (!m_pLbHatching->GetSelectEntryCount() + && (SFX_ITEM_DEFAULT == eHatchState + || (pHatch && pHatch->GetName().isEmpty()))) { // avoid relying on pool default - cannot export that m_pLbHatching->SelectEntryPos(0); // anything better than nothing isMissingHatching = true; @@ -1455,14 +1462,17 @@ void SvxAreaTabPage::Reset( const SfxItemSet& rAttrs ) rAttrs.Get(XATTR_FILLBACKGROUND)).GetValue() ); } - if (SFX_ITEM_DONTCARE != rAttrs.GetItemState(XATTR_FILLBITMAP)) + SfxItemState const eBitmapState(rAttrs.GetItemState(XATTR_FILLBITMAP)); + XFillBitmapItem const* pBitmapItem(NULL); + if (SFX_ITEM_DONTCARE != eBitmapState) { - XFillBitmapItem const& rBitmapItem( - static_cast<const XFillBitmapItem&>( - rAttrs.Get(XATTR_FILLBITMAP))); - m_pLbBitmap->SelectEntry(rBitmapItem.GetName()); + pBitmapItem = &static_cast<const XFillBitmapItem&>( + rAttrs.Get(XATTR_FILLBITMAP)); + m_pLbBitmap->SelectEntry(pBitmapItem->GetName()); } - if (!m_pLbBitmap->GetSelectEntryCount()) + if (!m_pLbBitmap->GetSelectEntryCount() + && (SFX_ITEM_DEFAULT == eBitmapState + || (pBitmapItem && pBitmapItem->GetName().isEmpty()))) { // avoid relying on pool default - cannot export that m_pLbBitmap->SelectEntryPos(0); // anything better than nothing isMissingBitmap = true; |