tdf#101181: support for transparency attribute of glow effect

Read/write support for ODF and OOXML (in ODF, loext:glow-transparency
attribute of style:graphic-properties has been added).

Added UI on glow sidebar panel.

Not used in actual painting yet.

Change-Id: I21b25d9c52c8611cd796f056374377ebf13cc2f6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93565
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
diff --git a/include/svx/strings.hrc b/include/svx/strings.hrc
index 7a1f97e..472a35a 100644
--- a/include/svx/strings.hrc
+++ b/include/svx/strings.hrc
@@ -515,6 +515,7 @@
#define SIP_SA_GLOW                                         NC_("SIP_SA_GLOW", "Glow effect")
#define SIP_SA_GLOW_RAD                                     NC_("SIP_SA_GLOW_RAD", "Radius of glow effect")
#define SIP_SA_GLOW_COLOR                                   NC_("SIP_SA_GLOW_COLOR", "Color of glow effect")
#define SIP_SA_GLOW_TRANSPARENCY                            NC_("SIP_SA_GLOW_TRANSPARENCY", "Transparency of glow effect")
#define STR_ObjNameSingulMEDIA                              NC_("STR_ObjNameSingulMEDIA", "Media object")
#define STR_ObjNamePluralMEDIA                              NC_("STR_ObjNamePluralMEDIA", "Media objects")
// drawing layer table strings
diff --git a/include/svx/svddef.hxx b/include/svx/svddef.hxx
index c00c1a0..d6bbccf 100644
--- a/include/svx/svddef.hxx
+++ b/include/svx/svddef.hxx
@@ -419,7 +419,8 @@ constexpr sal_uInt16                  SDRATTR_GLOW_FIRST (SDRATTR_TABLE_LAST+1);
constexpr TypedWhichId<SdrOnOffItem>  SDRATTR_GLOW       (SDRATTR_GLOW_FIRST+0);
constexpr TypedWhichId<SdrMetricItem> SDRATTR_GLOW_RAD   (SDRATTR_GLOW_FIRST+1);
constexpr TypedWhichId<XColorItem>    SDRATTR_GLOW_COLOR (SDRATTR_GLOW_FIRST+2);
constexpr sal_uInt16                  SDRATTR_GLOW_LAST  (SDRATTR_GLOW_COLOR);
constexpr TypedWhichId<SdrPercentItem> SDRATTR_GLOW_TRANSPARENCY(SDRATTR_GLOW_FIRST + 3);
constexpr sal_uInt16                  SDRATTR_GLOW_LAST  (SDRATTR_GLOW_TRANSPARENCY);

constexpr sal_uInt16 SDRATTR_END (SDRATTR_GLOW_LAST);      /* 1357 */ /* 1333 V4+++*/ /* 1243 V4+++*/  /*1213*/ /*1085*/ /*1040*/ /*Pool V2: 1123,V1: 1065 */

diff --git a/include/svx/svxids.hrc b/include/svx/svxids.hrc
index 1aa3111..61d02ff 100644
--- a/include/svx/svxids.hrc
+++ b/include/svx/svxids.hrc
@@ -417,6 +417,7 @@ class SvxSetItem;
#define SID_ATTR_GLOW                                   ( SID_SVX_START + 320 )
#define SID_ATTR_GLOW_COLOR                             ( SID_SVX_START + 321 )
#define SID_ATTR_GLOW_RADIUS                            ( SID_SVX_START + 322 )
#define SID_ATTR_GLOW_TRANSPARENCY                      ( SID_SVX_START + 323 )
#define SID_SCAN                                        ( SID_SVX_START + 330 )
#define SID_TWAIN_SELECT                                ( SID_SVX_START + 331 )
#define SID_TWAIN_TRANSFER                              ( SID_SVX_START + 332 )
diff --git a/include/svx/unoshprp.hxx b/include/svx/unoshprp.hxx
index 19eb4ae..b8c0990 100644
--- a/include/svx/unoshprp.hxx
+++ b/include/svx/unoshprp.hxx
@@ -212,7 +212,8 @@
#define GLOW_PROPERTIES \
    { OUString("GlowEffect"),                     SDRATTR_GLOW,             cppu::UnoType<bool>::get(),           0,      0}, \
    { OUString{"GlowEffectRad"},                  SDRATTR_GLOW_RAD,         ::cppu::UnoType<sal_Int32>::get(),    0,      0, PropertyMoreFlags::METRIC_ITEM}, \
    { OUString{"GlowEffectColor"},                SDRATTR_GLOW_COLOR,       ::cppu::UnoType<sal_Int32>::get(),    0,      0},
    { OUString{"GlowEffectColor"},                SDRATTR_GLOW_COLOR,       ::cppu::UnoType<sal_Int32>::get(),    0,      0}, \
    { OUString{"GlowEffectTransparency"},         SDRATTR_GLOW_TRANSPARENCY,::cppu::UnoType<sal_Int16>::get(),    0,      0 },

#define SHADOW_PROPERTIES \
    { OUString(UNO_NAME_SHADOW),            SDRATTR_SHADOW,             cppu::UnoType<bool>::get(),    0,      0}, \
diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx
index fda3f4c..d84f17d 100644
--- a/include/xmloff/xmltoken.hxx
+++ b/include/xmloff/xmltoken.hxx
@@ -928,6 +928,7 @@ namespace xmloff::token {
        XML_GLOW,
        XML_GLOW_RADIUS,
        XML_GLOW_COLOR,
        XML_GLOW_TRANSPARENCY,
        XML_GOURAUD,
        XML_GRADIENT,
        XML_GRADIENT_ANGLE,
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index d962f00..959f99e 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1472,6 +1472,7 @@ Reference< XShape > const & Shape::createAndInsert(
            propertySet->setPropertyValue("GlowEffect", makeAny(true));
            propertySet->setPropertyValue("GlowEffectRad", makeAny(static_cast<sal_Int32>(aEffectProperties.maGlow.moGlowRad.get())));
            propertySet->setPropertyValue("GlowEffectColor", makeAny(aEffectProperties.maGlow.moGlowColor.getColor(rGraphicHelper)));
            propertySet->setPropertyValue("GlowEffectTransparency", makeAny(aEffectProperties.maGlow.moGlowColor.getTransparency()));
        }
    }

diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 81bbcd7..17b56e8 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -3849,11 +3849,13 @@ void DrawingML::WriteGlowEffect(const Reference< XPropertySet >& rXPropSet)
    Sequence< PropertyValue > aGlowAttribs(1);
    aGlowAttribs[0].Name = "rad";
    aGlowAttribs[0].Value = rXPropSet->getPropertyValue("GlowEffectRad");
    Sequence< PropertyValue > aGlowProps(2);
    Sequence< PropertyValue > aGlowProps(3);
    aGlowProps[0].Name = "Attribs";
    aGlowProps[0].Value <<= aGlowAttribs;
    aGlowProps[1].Name = "RgbClr";
    aGlowProps[1].Value = rXPropSet->getPropertyValue("GlowEffectColor");
    aGlowProps[2].Name = "RgbClrTransparency";
    aGlowProps[2].Value = rXPropSet->getPropertyValue("GlowEffectTransparency");
    // TODO other stuff like saturation or luminance

    WriteShapeEffect("glow", aGlowProps);
diff --git a/sc/sdi/drawsh.sdi b/sc/sdi/drawsh.sdi
index 44faa5c..2a9981a 100644
--- a/sc/sdi/drawsh.sdi
+++ b/sc/sdi/drawsh.sdi
@@ -228,6 +228,7 @@ interface TableDraw
    SID_ATTR_GLOW                   [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]
    SID_ATTR_GLOW_COLOR             [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]
    SID_ATTR_GLOW_RADIUS            [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]
    SID_ATTR_GLOW_TRANSPARENCY      [ ExecMethod = ExecDrawAttr; StateMethod = GetDrawAttrState; Export = FALSE; ]

}

diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx
index 07b340b..c006772 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -2861,6 +2861,9 @@ void SdOOXMLExportTest2::testShapeGlowEffect()
    Color nColor;
    xShape->getPropertyValue("GlowEffectColor") >>= nColor;
    CPPUNIT_ASSERT_EQUAL(Color(0xFFC000), nColor);
    sal_uInt16 nTransparency;
    xShape->getPropertyValue("GlowEffectTransparency") >>= nTransparency;
    CPPUNIT_ASSERT_EQUAL(sal_uInt16(60), nTransparency);
}

void SdOOXMLExportTest2::testTdf119087()
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 83cab0b..158641a 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -3122,6 +3122,9 @@ void SdImportTest::testShapeGlowEffectPPTXImpoer()
    Color nColor;
    xShape->getPropertyValue("GlowEffectColor") >>= nColor;
    CPPUNIT_ASSERT_EQUAL(Color(0xFFC000), nColor);
    sal_uInt16 nTransparency;
    xShape->getPropertyValue("GlowEffectTransparency") >>= nTransparency;
    CPPUNIT_ASSERT_EQUAL(sal_uInt16(60), nTransparency);
}

CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
diff --git a/sd/sdi/_drvwsh.sdi b/sd/sdi/_drvwsh.sdi
index 962ef236..b1a6f64 100644
--- a/sd/sdi/_drvwsh.sdi
+++ b/sd/sdi/_drvwsh.sdi
@@ -2875,5 +2875,10 @@ interface DrawView
        ExecMethod = FuTemporary;
        StateMethod = GetAttrState;
    ]
    SID_ATTR_GLOW_TRANSPARENCY
    [
        ExecMethod = FuTemporary;
        StateMethod = GetAttrState;
    ]

}
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
index fb6f3de..d062913 100644
--- a/sd/source/ui/view/drviews2.cxx
+++ b/sd/source/ui/view/drviews2.cxx
@@ -3473,6 +3473,7 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
        case SID_ATTR_GLOW:
        case SID_ATTR_GLOW_COLOR:
        case SID_ATTR_GLOW_RADIUS:
        case SID_ATTR_GLOW_TRANSPARENCY:
            if (const SfxItemSet* pNewArgs = rReq.GetArgs())
                mpDrawView->SetAttributes(*pNewArgs);
            rReq.Done();
diff --git a/sd/source/ui/view/drviewsf.cxx b/sd/source/ui/view/drviewsf.cxx
index c340121..b58d7f3 100644
--- a/sd/source/ui/view/drviewsf.cxx
+++ b/sd/source/ui/view/drviewsf.cxx
@@ -440,6 +440,7 @@ void DrawViewShell::GetAttrState( SfxItemSet& rSet )
            case SID_ATTR_GLOW:
            case SID_ATTR_GLOW_COLOR:
            case SID_ATTR_GLOW_RADIUS:
            case SID_ATTR_GLOW_TRANSPARENCY:
            case SID_SET_SUB_SCRIPT:
            case SID_SET_SUPER_SCRIPT:
            {
diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi
index f7925c5..bf3b73f 100644
--- a/svx/sdi/svx.sdi
+++ b/svx/sdi/svx.sdi
@@ -12288,3 +12288,20 @@ SdrMetricItem GlowRadius SID_ATTR_GLOW_RADIUS
    ToolBoxConfig = FALSE,
    GroupId = SfxGroupId::Document;
]

SdrPercentItem GlowTransparency SID_ATTR_GLOW_TRANSPARENCY

[
    AutoUpdate = TRUE,
    FastCall = FALSE,
    ReadOnlyDoc = FALSE,
    Toggle = FALSE,
    Container = FALSE,
    RecordAbsolute = FALSE,
    RecordPerSet;

    AccelConfig = FALSE,
    MenuConfig = FALSE,
    ToolBoxConfig = FALSE,
    GroupId = SfxGroupId::Document;
]
diff --git a/svx/source/sidebar/glow/GlowPropertyPanel.cxx b/svx/source/sidebar/glow/GlowPropertyPanel.cxx
index 82df3ee..ef3a195 100644
--- a/svx/source/sidebar/glow/GlowPropertyPanel.cxx
+++ b/svx/source/sidebar/glow/GlowPropertyPanel.cxx
@@ -15,6 +15,7 @@
#include <svx/colorbox.hxx>
#include <svx/sdmetitm.hxx>
#include <svx/sdooitm.hxx>
#include <svx/sdprcitm.hxx>
#include <svx/svddef.hxx>
#include <svx/svxids.hrc>
#include <svx/xcolit.hxx>
@@ -38,12 +39,16 @@ GlowPropertyPanel::GlowPropertyPanel(vcl::Window* pParent,
    , maGlowController(SID_ATTR_GLOW, *pBindings, *this)
    , maGlowColorController(SID_ATTR_GLOW_COLOR, *pBindings, *this)
    , maGlowRadiusController(SID_ATTR_GLOW_RADIUS, *pBindings, *this)
    , maGlowTransparencyController(SID_ATTR_GLOW_TRANSPARENCY, *pBindings, *this)
    , mpBindings(pBindings)
    , mxShowGlow(m_xBuilder->weld_check_button("SHOW_GLOW"))
    , mxGlowRadius(m_xBuilder->weld_metric_spin_button("LB_GLOW_RADIUS", FieldUnit::POINT))
    , mxLBGlowColor(new ColorListBox(m_xBuilder->weld_menu_button("LB_GLOW_COLOR"), GetFrameWeld()))
    , mxGlowTransparency(
          m_xBuilder->weld_metric_spin_button("LB_GLOW_TRANSPARENCY", FieldUnit::PERCENT))
    , mxFTRadius(m_xBuilder->weld_label("radius"))
    , mxFTColor(m_xBuilder->weld_label("color"))
    , mxFTTransparency(m_xBuilder->weld_label("transparency"))
{
    Initialize();
}
@@ -57,10 +62,13 @@ void GlowPropertyPanel::dispose()
    mxGlowRadius.reset();
    mxFTColor.reset();
    mxLBGlowColor.reset();
    mxFTTransparency.reset();
    mxGlowTransparency.reset();

    maGlowController.dispose();
    maGlowColorController.dispose();
    maGlowRadiusController.dispose();
    maGlowTransparencyController.dispose();
    PanelLayout::dispose();
}

@@ -70,6 +78,8 @@ void GlowPropertyPanel::Initialize()
    mxShowGlow->connect_toggled(LINK(this, GlowPropertyPanel, ClickGlowHdl));
    mxLBGlowColor->SetSelectHdl(LINK(this, GlowPropertyPanel, ModifyGlowColorHdl));
    mxGlowRadius->connect_value_changed(LINK(this, GlowPropertyPanel, ModifyGlowRadiusHdl));
    mxGlowTransparency->connect_value_changed(
        LINK(this, GlowPropertyPanel, ModifyGlowTransparencyHdl));
}

IMPL_LINK_NOARG(GlowPropertyPanel, ClickGlowHdl, weld::ToggleButton&, void)
@@ -90,13 +100,23 @@ IMPL_LINK_NOARG(GlowPropertyPanel, ModifyGlowRadiusHdl, weld::MetricSpinButton&,
    mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_GLOW_RADIUS, SfxCallMode::RECORD, { &aItem });
}

IMPL_LINK_NOARG(GlowPropertyPanel, ModifyGlowTransparencyHdl, weld::MetricSpinButton&, void)
{
    SdrPercentItem aItem(SDRATTR_GLOW_TRANSPARENCY,
                         mxGlowTransparency->get_value(FieldUnit::PERCENT));
    mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_GLOW_TRANSPARENCY, SfxCallMode::RECORD,
                                             { &aItem });
}

void GlowPropertyPanel::UpdateControls()
{
    const bool bEnabled = mxShowGlow->get_state() != TRISTATE_FALSE;
    mxGlowRadius->set_sensitive(bEnabled);
    mxLBGlowColor->set_sensitive(bEnabled);
    mxGlowTransparency->set_sensitive(bEnabled);
    mxFTRadius->set_sensitive(bEnabled);
    mxFTColor->set_sensitive(bEnabled);
    mxFTTransparency->set_sensitive(bEnabled);
}

void GlowPropertyPanel::NotifyItemUpdate(sal_uInt16 nSID, SfxItemState eState,
@@ -144,6 +164,17 @@ void GlowPropertyPanel::NotifyItemUpdate(sal_uInt16 nSID, SfxItemState eState,
            }
        }
        break;
        case SID_ATTR_GLOW_TRANSPARENCY:
        {
            if (eState >= SfxItemState::DEFAULT)
            {
                if (auto pItem = dynamic_cast<const SdrPercentItem*>(pState))
                {
                    mxGlowTransparency->set_value(pItem->GetValue(), FieldUnit::PERCENT);
                }
            }
        }
        break;
    }
    UpdateControls();
}
diff --git a/svx/source/sidebar/glow/GlowPropertyPanel.hxx b/svx/source/sidebar/glow/GlowPropertyPanel.hxx
index 7cdf772..233ec05 100644
--- a/svx/source/sidebar/glow/GlowPropertyPanel.hxx
+++ b/svx/source/sidebar/glow/GlowPropertyPanel.hxx
@@ -40,14 +40,17 @@ private:
    sfx2::sidebar::ControllerItem maGlowController;
    sfx2::sidebar::ControllerItem maGlowColorController;
    sfx2::sidebar::ControllerItem maGlowRadiusController;
    sfx2::sidebar::ControllerItem maGlowTransparencyController;

    SfxBindings* mpBindings;

    std::unique_ptr<weld::CheckButton> mxShowGlow;
    std::unique_ptr<weld::MetricSpinButton> mxGlowRadius;
    std::unique_ptr<ColorListBox> mxLBGlowColor;
    std::unique_ptr<weld::MetricSpinButton> mxGlowTransparency;
    std::unique_ptr<weld::Label> mxFTRadius;
    std::unique_ptr<weld::Label> mxFTColor;
    std::unique_ptr<weld::Label> mxFTTransparency;

    void Initialize();
    void UpdateControls();
@@ -55,6 +58,7 @@ private:
    DECL_LINK(ClickGlowHdl, weld::ToggleButton&, void);
    DECL_LINK(ModifyGlowColorHdl, ColorListBox&, void);
    DECL_LINK(ModifyGlowRadiusHdl, weld::MetricSpinButton&, void);
    DECL_LINK(ModifyGlowTransparencyHdl, weld::MetricSpinButton&, void);
};
}

diff --git a/svx/source/svdraw/svdattr.cxx b/svx/source/svdraw/svdattr.cxx
index edf73df..1b89cab 100644
--- a/svx/source/svdraw/svdattr.cxx
+++ b/svx/source/svdraw/svdattr.cxx
@@ -331,6 +331,7 @@ SdrItemPool::SdrItemPool(
    rPoolDefaults[ SDRATTR_GLOW - SDRATTR_START ] = new SdrOnOffItem(SDRATTR_GLOW, false);
    rPoolDefaults[ SDRATTR_GLOW_RAD - SDRATTR_START ] = new SdrMetricItem(SDRATTR_GLOW_RAD, 0);
    rPoolDefaults[ SDRATTR_GLOW_COLOR - SDRATTR_START ] = new XColorItem(SDRATTR_GLOW_COLOR, aNullCol);
    rPoolDefaults[ SDRATTR_GLOW_TRANSPARENCY - SDRATTR_START ] = new SdrPercentItem(SDRATTR_GLOW_TRANSPARENCY, 0);

    // set own ItemInfos
    mpLocalItemInfos[SDRATTR_SHADOW-SDRATTR_START]._nSID=SID_ATTR_FILL_SHADOW;
@@ -349,6 +350,7 @@ SdrItemPool::SdrItemPool(
    mpLocalItemInfos[SDRATTR_GLOW - SDRATTR_START]._nSID = SID_ATTR_GLOW;
    mpLocalItemInfos[SDRATTR_GLOW_RAD - SDRATTR_START]._nSID = SID_ATTR_GLOW_RADIUS;
    mpLocalItemInfos[SDRATTR_GLOW_COLOR - SDRATTR_START]._nSID = SID_ATTR_GLOW_COLOR;
    mpLocalItemInfos[SDRATTR_GLOW_TRANSPARENCY - SDRATTR_START]._nSID = SID_ATTR_GLOW_TRANSPARENCY;

    // it's my own creation level, set Defaults and ItemInfos
    SetDefaults(mpLocalPoolDefaults);
@@ -459,6 +461,7 @@ OUString SdrItemPool::GetItemName(sal_uInt16 nWhich)
        case SDRATTR_GLOW              : pResId = SIP_SA_GLOW;break;
        case SDRATTR_GLOW_RAD          : pResId = SIP_SA_GLOW_RAD;break;
        case SDRATTR_GLOW_COLOR        : pResId = SIP_SA_GLOW_COLOR;break;
        case SDRATTR_GLOW_TRANSPARENCY : pResId = SIP_SA_GLOW_TRANSPARENCY;break;

        case SDRATTR_CAPTIONTYPE      : pResId = SIP_SA_CAPTIONTYPE;break;
        case SDRATTR_CAPTIONFIXEDANGLE: pResId = SIP_SA_CAPTIONFIXEDANGLE;break;
diff --git a/svx/uiconfig/ui/sidebarglow.ui b/svx/uiconfig/ui/sidebarglow.ui
index cc3accb..9580f99 100644
--- a/svx/uiconfig/ui/sidebarglow.ui
+++ b/svx/uiconfig/ui/sidebarglow.ui
@@ -6,6 +6,11 @@
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
  </object>
  <object class="GtkAdjustment" id="adjustment2">
    <property name="step_increment">1</property>
    <property name="page_increment">10</property>
    <property name="upper">100</property>
  </object>
  <object class="GtkGrid" id="GlowPropertyPanel">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
@@ -88,6 +93,32 @@
                  </packing>
                </child>
                <child>
                  <object class="GtkLabel" id="transparency">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="label" translatable="yes" context="sidebarglow|transparency">Transparency:</property>
                    <property name="use_underline">True</property>
                    <property name="mnemonic_widget">LB_GLOW_TRANSPARENCY</property>
                    <property name="xalign">0</property>
                  </object>
                  <packing>
                    <property name="left_attach">0</property>
                    <property name="top_attach">3</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkSpinButton" id="LB_GLOW_TRANSPARENCY">
                    <property name="visible">True</property>
                    <property name="can_focus">True</property>
                    <property name="hexpand">True</property>
                    <property name="adjustment">adjustment2</property>
                  </object>
                  <packing>
                    <property name="left_attach">1</property>
                    <property name="top_attach">3</property>
                  </packing>
                </child>
                <child>
                  <placeholder/>
                </child>
              </object>
diff --git a/sw/sdi/drawsh.sdi b/sw/sdi/drawsh.sdi
index c75bc6a..77fb87f 100644
--- a/sw/sdi/drawsh.sdi
+++ b/sw/sdi/drawsh.sdi
@@ -208,6 +208,14 @@ interface TextDraw : TextDrawBase
        DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
    ]

    SID_ATTR_GLOW_TRANSPARENCY
    [
        Export = FALSE;
        ExecMethod = ExecDrawAttrArgs ;
        StateMethod = GetDrawAttrState ;
        DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
    ]

    SID_ATTRIBUTES_LINE
    [
        ExecMethod = ExecDrawDlg ;
diff --git a/sw/source/uibase/shells/slotadd.cxx b/sw/source/uibase/shells/slotadd.cxx
index c6a3f35..76de1a6 100644
--- a/sw/source/uibase/shells/slotadd.cxx
+++ b/sw/source/uibase/shells/slotadd.cxx
@@ -78,6 +78,7 @@
#include <editeng/lrspitem.hxx>
#include <svx/sdmetitm.hxx>
#include <svx/sdooitm.hxx>
#include <svx/sdprcitm.hxx>
#include <svx/xlnstit.hxx>
#include <svx/xlnedit.hxx>
#include <svx/xfillit0.hxx>
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index 2888d9f..624c768 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -932,6 +932,7 @@ namespace xmloff::token {
        TOKEN( "glow",                            XML_GLOW ),
        TOKEN( "glow-radius",                     XML_GLOW_RADIUS ),
        TOKEN( "glow-color",                      XML_GLOW_COLOR ),
        TOKEN( "glow-transparency",               XML_GLOW_TRANSPARENCY ),
        TOKEN( "gouraud",                         XML_GOURAUD ),
        TOKEN( "gradient",                        XML_GRADIENT ),
        TOKEN( "angle",                           XML_GRADIENT_ANGLE ),
diff --git a/xmloff/source/draw/sdpropls.cxx b/xmloff/source/draw/sdpropls.cxx
index 4cedc7c..16c593b 100644
--- a/xmloff/source/draw/sdpropls.cxx
+++ b/xmloff/source/draw/sdpropls.cxx
@@ -156,6 +156,7 @@ const XMLPropertyMapEntry aXMLSDProperties[] =
    GMAPV( "GlowEffect",                       XML_NAMESPACE_LO_EXT, XML_GLOW,                 XML_SD_TYPE_GLOW  , 0, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
    GMAPV( "GlowEffectRad",                    XML_NAMESPACE_LO_EXT, XML_GLOW_RADIUS,          XML_TYPE_MEASURE  , 0, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
    GMAPV( "GlowEffectColor",                  XML_NAMESPACE_LO_EXT, XML_GLOW_COLOR,           XML_TYPE_COLOR    , 0, SvtSaveOptions::ODFVER_012_EXT_COMPAT ),
    GMAPV( "GlowEffectTransparency",           XML_NAMESPACE_LO_EXT, XML_GLOW_TRANSPARENCY,    XML_TYPE_PERCENT16, 0, SvtSaveOptions::ODFVER_012_EXT_COMPAT),

    // graphic attributes
    GMAP( "GraphicColorMode",               XML_NAMESPACE_DRAW, XML_COLOR_MODE,             XML_TYPE_COLOR_MODE, 0 ), // exists in SW, too, with same property name
diff --git a/xmloff/source/token/tokens.txt b/xmloff/source/token/tokens.txt
index 103e7ea..4f8e756 100644
--- a/xmloff/source/token/tokens.txt
+++ b/xmloff/source/token/tokens.txt
@@ -850,6 +850,7 @@ geq
glow
glow-radius
glow-color
glow-transparency
gouraud
gradient
angle