svx/source/sidebar/area/AreaPropertyPanelBase.cxx |   65 +++++++++++++++++-----
 1 file changed, 51 insertions(+), 14 deletions(-)

New commits:
commit 29cba5c6fd36280107115b58aae61e5ead7e4d6a
Author:     Samuel Mehrbrodt <[email protected]>
AuthorDate: Mon Sep 19 14:10:39 2022 +0200
Commit:     Samuel Mehrbrodt <[email protected]>
CommitDate: Mon Sep 19 16:15:00 2022 +0200

    tdf#150802 Fix setting gradient from Sidebar
    
    Regression from adc536e9efc77690df62177aa722f9252bdbf96b
    
    Change-Id: I37db76373a3b9b4a1084e830233561abc4b1e6d3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140151
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <[email protected]>

diff --git a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx 
b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
index 077d5ea59174..521d46ea1d3c 100644
--- a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
+++ b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
@@ -465,26 +465,63 @@ void AreaPropertyPanelBase::FillStyleChanged(bool 
bUpdateModel)
             mxMTRAngle->set_sensitive(true);
             mxLbFillAttr->clear();
 
-            const SvxGradientListItem* pItem = pSh->GetItem(SID_GRADIENT_LIST);
-
-            if (0 < pItem->GetGradientList()->Count())
+            if (bUpdateModel)
             {
-                const XGradient aGradient = 
pItem->GetGradientList()->GetGradient(0)->GetGradient();
-                const OUString aName = 
pItem->GetGradientList()->GetGradient(0)->GetName();
-                const XFillGradientItem aXFillGradientItem(aName, aGradient);
+                mxLbFillAttr->hide();
+                mxToolBoxColor->hide();
+                mxBmpImport->hide();
 
-                // #i122676# change FillStyle and Gradient in one call
-                if (bUpdateModel)
+                const SvxGradientListItem* pItem = 
pSh->GetItem(SID_GRADIENT_LIST);
+                if (pItem->GetGradientList()->Count() > 0)
                 {
+                    const XGradient aGradient
+                        = 
pItem->GetGradientList()->GetGradient(0)->GetGradient();
+                    const OUString aName = 
pItem->GetGradientList()->GetGradient(0)->GetName();
+                    const XFillGradientItem aXFillGradientItem(aName, 
aGradient);
+
+                    // #i122676# change FillStyle and Gradient in one call
                     XFillStyleItem 
aXFillStyleItem(drawing::FillStyle_GRADIENT);
                     setFillStyleAndGradient(&aXFillStyleItem, 
aXFillGradientItem);
-                }
-                mxLbFillGradFrom->SelectEntry(aGradient.GetStartColor());
-                mxLbFillGradTo->SelectEntry(aGradient.GetEndColor());
+                    mxLbFillGradFrom->SelectEntry(aGradient.GetStartColor());
+                    mxLbFillGradTo->SelectEntry(aGradient.GetEndColor());
 
-                mxMTRAngle->set_value(toDegrees(aGradient.GetAngle()), 
FieldUnit::DEGREE);
-                css::awt::GradientStyle eXGS = aGradient.GetGradientStyle();
-                
mxGradientStyle->set_active(sal::static_int_cast<sal_Int32>(eXGS));
+                    mxMTRAngle->set_value(toDegrees(aGradient.GetAngle()), 
FieldUnit::DEGREE);
+                    css::awt::GradientStyle eXGS = 
aGradient.GetGradientStyle();
+                    
mxGradientStyle->set_active(sal::static_int_cast<sal_Int32>(eXGS));
+                }
+            }
+            else
+            {
+                if (pSh && pSh->GetItem(SID_GRADIENT_LIST))
+                {
+                    SvxFillAttrBox::Fill(*mxLbFillAttr,
+                                         
pSh->GetItem(SID_GRADIENT_LIST)->GetGradientList());
+                    mxLbFillGradTo->SetNoSelection();
+                    mxLbFillGradFrom->SetNoSelection();
+                    if (mpFillGradientItem)
+                    {
+                        const OUString aString(mpFillGradientItem->GetName());
+                        mxLbFillAttr->set_active_text(aString);
+                        const XGradient aGradient = 
mpFillGradientItem->GetGradientValue();
+                        
mxLbFillGradFrom->SelectEntry(aGradient.GetStartColor());
+                        mxLbFillGradTo->SelectEntry(aGradient.GetEndColor());
+                        mxGradientStyle->set_active(
+                            
sal::static_int_cast<sal_Int32>(aGradient.GetGradientStyle()));
+                        if (mxGradientStyle->get_active() == 
sal_Int32(GradientStyle::Radial))
+                            mxMTRAngle->set_sensitive(false);
+                        else
+                            
mxMTRAngle->set_value(toDegrees(aGradient.GetAngle()),
+                                                  FieldUnit::DEGREE);
+                    }
+                    else
+                    {
+                        mxLbFillAttr->set_active(-1);
+                    }
+                }
+                else
+                {
+                    mxLbFillAttr->set_active(-1);
+                }
             }
             break;
         }

Reply via email to