[Libreoffice-commits] core.git: include/svx sc/source sd/source svx/source svx/uiconfig svx/UIConfig_svx.mk sw/source

Szymon Kłos eszkadev at gmail.com
Wed Apr 20 07:53:41 UTC 2016


 include/svx/TextCharacterSpacingPopup.hxx               |   44 +
 include/svx/dialogs.hrc                                 |    1 
 sc/source/ui/app/scdll.cxx                              |    2 
 sd/source/ui/app/sddll.cxx                              |    2 
 svx/UIConfig_svx.mk                                     |    1 
 svx/source/sidebar/text/TextCharacterSpacingControl.cxx |  502 +++++-----------
 svx/source/sidebar/text/TextCharacterSpacingControl.hxx |   57 -
 svx/source/sidebar/text/TextCharacterSpacingPopup.cxx   |   46 -
 svx/source/sidebar/text/TextCharacterSpacingPopup.hxx   |   46 -
 svx/source/sidebar/text/TextPropertyPanel.cxx           |   81 --
 svx/source/sidebar/text/TextPropertyPanel.hrc           |   42 -
 svx/source/sidebar/text/TextPropertyPanel.hxx           |   12 
 svx/source/sidebar/text/TextPropertyPanel.src           |  180 -----
 svx/uiconfig/ui/textcharacterspacingcontrol.ui          |  269 ++++++++
 sw/source/uibase/app/swmodule.cxx                       |    2 
 15 files changed, 533 insertions(+), 754 deletions(-)

New commits:
commit ccaf108651ee7e477b09f496f33ea778307fe60b
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Sat Apr 16 16:38:43 2016 +0200

    character spacing control possible to use outside sidebar
    
    Change-Id: Ic0c6458268b529bd0107d6ed5a35f49241cfb833
    Reviewed-on: https://gerrit.libreoffice.org/24146
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/svx/source/sidebar/text/TextCharacterSpacingPopup.hxx b/include/svx/TextCharacterSpacingPopup.hxx
similarity index 64%
rename from svx/source/sidebar/text/TextCharacterSpacingPopup.hxx
rename to include/svx/TextCharacterSpacingPopup.hxx
index 548a9d9..68077b2 100644
--- a/svx/source/sidebar/text/TextCharacterSpacingPopup.hxx
+++ b/include/svx/TextCharacterSpacingPopup.hxx
@@ -16,30 +16,28 @@
  *   except in compliance with the License. You may obtain a copy of
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
-#ifndef INCLUDED_SVX_SOURCE_SIDEBAR_TEXT_TEXTCHARACTERSPACINGPOPUP_HXX
-#define INCLUDED_SVX_SOURCE_SIDEBAR_TEXT_TEXTCHARACTERSPACINGPOPUP_HXX
+#ifndef INCLUDED_SVX_TEXTCHARACTERSPACINGPOPUP_HXX
+#define INCLUDED_SVX_TEXTCHARACTERSPACINGPOPUP_HXX
 
-#include "svx/sidebar/Popup.hxx"
+#include <sfx2/tbxctrl.hxx>
+#include <svx/svxdllapi.h>
 
 #include <functional>
 
-namespace svx { namespace sidebar {
+namespace svx {
 
-class TextCharacterSpacingPopup
-    : public Popup
+class SVX_DLLPUBLIC TextCharacterSpacingPopup : public SfxToolBoxControl
 {
 public:
-    TextCharacterSpacingPopup (
-        vcl::Window* pParent,
-        const ::std::function<VclPtr<PopupControl> (PopupContainer*)>& rControlCreator);
+    SFX_DECL_TOOLBOX_CONTROL();
+
+    TextCharacterSpacingPopup(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx);
     virtual ~TextCharacterSpacingPopup();
 
-    void Rearrange (bool bLBAvailable,bool bAvailable, long nKerning);
-private:
-    void PopupModeEndCallback();
+    virtual VclPtr<SfxPopupWindow> CreatePopupWindow() override;
 };
 
-} } // end of namespace svx::sidebar
+} // end of namespace svx
 
 #endif
 
diff --git a/include/svx/dialogs.hrc b/include/svx/dialogs.hrc
index 59a2de4..5c9b5e4 100644
--- a/include/svx/dialogs.hrc
+++ b/include/svx/dialogs.hrc
@@ -196,7 +196,6 @@
 #define RID_SIDEBAR_TEXT_PANEL              (RID_SVX_START + 314)
 #define RID_POPUPPANEL_TEXTPAGE_UNDERLINE   (RID_SVX_START + 315)
 #define RID_POPUPPANEL_TEXTPAGE_FONT_COLOR  (RID_SVX_START + 316)
-#define RID_POPUPPANEL_TEXTPAGE_SPACING     (RID_SVX_START + 317)
 
 #define RID_POPUPPANEL_AREAPAGE_TRGR        (RID_SVX_START + 320)
 
diff --git a/sc/source/ui/app/scdll.cxx b/sc/source/ui/app/scdll.cxx
index d35328a9..ad5217d 100644
--- a/sc/source/ui/app/scdll.cxx
+++ b/sc/source/ui/app/scdll.cxx
@@ -33,6 +33,7 @@
 #include <avmedia/mediatoolbox.hxx>
 #include <comphelper/types.hxx>
 #include <svx/ParaLineSpacingPopup.hxx>
+#include <svx/TextCharacterSpacingPopup.hxx>
 
 #include <svtools/parhtml.hxx>
 #include <sot/formats.hxx>
@@ -169,6 +170,7 @@ void ScDLL::Init()
     SvxUndoRedoControl              ::RegisterControl(SID_UNDO,                 pMod );
     SvxUndoRedoControl              ::RegisterControl(SID_REDO,                 pMod );
     svx::ParaLineSpacingPopup       ::RegisterControl(SID_ATTR_PARA_LINESPACE,  pMod );
+    svx::TextCharacterSpacingPopup  ::RegisterControl(SID_ATTR_CHAR_KERNING,    pMod );
     svx::FormatPaintBrushToolBoxControl::RegisterControl(SID_FORMATPAINTBRUSH,  pMod );
 
     SvxGrafModeToolBoxControl       ::RegisterControl(SID_ATTR_GRAF_MODE,       pMod);
diff --git a/sd/source/ui/app/sddll.cxx b/sd/source/ui/app/sddll.cxx
index c229ff9..4251f5f 100644
--- a/sd/source/ui/app/sddll.cxx
+++ b/sd/source/ui/app/sddll.cxx
@@ -69,6 +69,7 @@
 #include <svx/fontwork.hxx>
 #include <svx/formatpaintbrushctrl.hxx>
 #include <svx/ParaLineSpacingPopup.hxx>
+#include <svx/TextCharacterSpacingPopup.hxx>
 #include <svx/grafctrl.hxx>
 #include <svx/hyperdlg.hxx>
 #include <svx/imapdlg.hxx>
@@ -227,6 +228,7 @@ void SdDLL::RegisterControllers()
 
     SvxColorToolBoxControl::RegisterControl( SID_EXTRUSION_3D_COLOR, pMod );
     svx::ParaLineSpacingPopup::RegisterControl(SID_ATTR_PARA_LINESPACE, pMod);
+    svx::TextCharacterSpacingPopup::RegisterControl(SID_ATTR_CHAR_KERNING, pMod);
 
     ::avmedia::MediaToolBoxControl::RegisterControl( SID_AVMEDIA_TOOLBOX, pMod );
     XmlSecStatusBarControl::RegisterControl( SID_SIGNATURE, pMod );
diff --git a/svx/UIConfig_svx.mk b/svx/UIConfig_svx.mk
index e56c9bd..df6167d 100644
--- a/svx/UIConfig_svx.mk
+++ b/svx/UIConfig_svx.mk
@@ -68,6 +68,7 @@ $(eval $(call gb_UIConfig_add_uifiles,svx,\
 	svx/uiconfig/ui/sidebarpossize \
 	svx/uiconfig/ui/sidebarstylespanel \
 	svx/uiconfig/ui/sidebartextpanel \
+	svx/uiconfig/ui/textcharacterspacingcontrol \
 	svx/uiconfig/ui/textcontrolchardialog \
 	svx/uiconfig/ui/textcontrolparadialog \
 	svx/uiconfig/ui/xformspage \
diff --git a/svx/source/sidebar/text/TextCharacterSpacingControl.cxx b/svx/source/sidebar/text/TextCharacterSpacingControl.cxx
index fc61554..fc56ee3 100644
--- a/svx/source/sidebar/text/TextCharacterSpacingControl.cxx
+++ b/svx/source/sidebar/text/TextCharacterSpacingControl.cxx
@@ -16,6 +16,7 @@
  *   except in compliance with the License. You may obtain a copy of
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
+#include <sfx2/bindings.hxx>
 #include "TextCharacterSpacingControl.hxx"
 #include "TextPropertyPanel.hrc"
 #include <sfx2/sidebar/ResourceDefinitions.hrc>
@@ -23,442 +24,297 @@
 #include <svx/dialmgr.hxx>
 #include <unotools/viewoptions.hxx>
 #include <editeng/kernitem.hxx>
+#include <editeng/fhgtitem.hxx>
 #include <sfx2/dispatch.hxx>
 #include <sfx2/sidebar/Theme.hxx>
 #include <vcl/settings.hxx>
+#include <vcl/lstbox.hxx>
+#include <svl/itempool.hxx>
 
-namespace svx { namespace sidebar {
-
-TextCharacterSpacingControl::TextCharacterSpacingControl (
-    vcl::Window* pParent,
-    svx::sidebar::TextPropertyPanel& rPanel,
-    SfxBindings* pBindings)
-:   PopupControl( pParent,SVX_RES(RID_POPUPPANEL_TEXTPAGE_SPACING))
-,   mrTextPropertyPanel(rPanel)
-,   mpBindings(pBindings)
-,   maVSSpacing     (VclPtr<ValueSetWithTextControl>::Create(ValueSetWithTextControl::IMAGE_TEXT,this, SVX_RES(VS_SPACING)))
-,   maLastCus       (VclPtr<FixedText>::Create(this, SVX_RES(FT_LASTCUSTOM)))
-//, maBorder        (this, SVX_RES(CT_BORDER))
-,   maFTSpacing     (VclPtr<FixedText>::Create(this, SVX_RES(FT_SPACING)))
-,   maLBKerning     (VclPtr<ListBox>::Create(this, SVX_RES(LB_KERNING)))
-,   maFTBy          (VclPtr<FixedText>::Create(this, SVX_RES(FT_BY)))
-,   maEditKerning   (VclPtr<MetricField>::Create(this, SVX_RES(ED_KERNING)))
-
-,   mpImg           (nullptr)
-,   mpImgSel        (nullptr)
-,   mpStr           (nullptr)
-,   mpStrTip        (nullptr)
-
-,   maImgCus        (SVX_RES(IMG_CUSTOM))
-,   maImgCusGrey    (SVX_RES(IMG_CUSTOM_GRAY))
-,   maStrCus        (SVX_RESSTR(STR_CUSTOM))
-,   maStrCusE       (SVX_RESSTR(STR_CUSTOM_E_TIP)) //add
-,   maStrCusC       (SVX_RESSTR(STR_CUSTOM_C_TIP)) //add
-,   maStrCusN       (SVX_RESSTR(STR_NORMAL_TIP))   //add
-,   maStrUnit       (SVX_RESSTR(STR_PT))           //add
+#define SPACING_VERY_TIGHT  -30
+#define SPACING_TIGHT       -15
+#define SPACING_NORMAL        0
+#define SPACING_LOOSE        30
+#define SPACING_VERY_LOOSE   60
 
+namespace svx {
+
+TextCharacterSpacingControl::TextCharacterSpacingControl(sal_uInt16 nId)
+    : SfxPopupWindow(nId, "TextCharacterSpacingControl", "svx/ui/textcharacterspacingcontrol.ui")
+,   mnId(nId)
 ,   mnCustomKern(0)
-,   mnLastCus ( SPACING_NOCUSTOM )
-,   mbCusEnable(false)
-,   mbVS(true)
+,   mnLastCus(SPACING_NOCUSTOM)
 {
-    initial();
-    FreeResource();
+    get(maEditKerning, "kerning");
+    get(maLBKerning, "kerninglb");
+    get(maFTBy, "change_by_label");
+    get(maFTSpacing, "spacing_label");
+    maEditKerning->Disable();
+    maFTBy->Disable();
+
+    get(maNormal, "normal");
+    get(maVeryTight, "very_tight");
+    get(maTight, "tight");
+    get(maVeryLoose, "very_loose");
+    get(maLoose, "loose");
+    get(maLastCustom, "last_custom");
+
     maLBKerning->SetSelectHdl(LINK(this, TextCharacterSpacingControl, KerningSelectHdl));
+    maLBKerning->SetHelpId(HID_SPACING_CB_KERN);
     maEditKerning->SetModifyHdl(LINK(this, TextCharacterSpacingControl, KerningModifyHdl));
+    maEditKerning->SetHelpId(HID_SPACING_MB_KERN);
 
+    Link<Button*,void> aLink = LINK(this, TextCharacterSpacingControl, PredefinedValuesHdl);
+    maNormal->SetClickHdl(aLink);
+    maVeryTight->SetClickHdl(aLink);
+    maTight->SetClickHdl(aLink);
+    maVeryLoose->SetClickHdl(aLink);
+    maLoose->SetClickHdl(aLink);
+    maLastCustom->SetClickHdl(aLink);
+
+    Initialize();
 }
 
 TextCharacterSpacingControl::~TextCharacterSpacingControl()
 {
+    if(GetLastCustomState() == SPACING_CLOSE_BY_CUS_EDIT)
+    {
+        SvtViewOptions aWinOpt(E_WINDOW, SIDEBAR_SPACING_GLOBAL_VALUE);
+        css::uno::Sequence<css::beans::NamedValue> aSeq
+            { { "Spacing", css::uno::makeAny(OUString::number(GetLastCustomValue())) } };
+        aWinOpt.SetUserData(aSeq);
+
+    }
+
     disposeOnce();
 }
 
 void TextCharacterSpacingControl::dispose()
 {
-    delete[] mpImg;
-    delete[] mpImgSel;
-    delete[] mpStr;
-    delete[] mpStrTip;
-    maVSSpacing.disposeAndClear();
-    maLastCus.disposeAndClear();
-    maFTSpacing.disposeAndClear();
-    maLBKerning.disposeAndClear();
-    maFTBy.disposeAndClear();
-    maEditKerning.disposeAndClear();
-    svx::sidebar::PopupControl::dispose();
-}
+    maFTBy.clear();
+    maFTSpacing.clear();
+    maLBKerning.clear();
+    maEditKerning.clear();
 
-void TextCharacterSpacingControl::initial()
-{
-    maVSSpacing->SetStyle( maVSSpacing->GetStyle()| WB_3DLOOK |  WB_NO_DIRECTSELECT  );
-    {
-        maVSSpacing->SetControlBackground(GetSettings().GetStyleSettings().GetHighContrastMode()?
-        GetSettings().GetStyleSettings().GetMenuColor():
-        sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
-        maVSSpacing->SetColor(GetSettings().GetStyleSettings().GetHighContrastMode()?
-        GetSettings().GetStyleSettings().GetMenuColor():
-        sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
-        maVSSpacing->SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()?
-        GetSettings().GetStyleSettings().GetMenuColor():
-        sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
-        maFTSpacing->SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()?
-        GetSettings().GetStyleSettings().GetMenuColor():
-        sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
-        maFTBy->SetBackground(GetSettings().GetStyleSettings().GetHighContrastMode()?
-        GetSettings().GetStyleSettings().GetMenuColor():
-        sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Paint_PanelBackground ));
-    }
-    mpImg = new Image[5];
-    mpImg[0] = Image(SVX_RES(IMG_VERY_TIGHT));
-    mpImg[1] = Image(SVX_RES(IMG_TIGHT));
-    mpImg[2] = Image(SVX_RES(IMG_NORMAL));
-    mpImg[3] = Image(SVX_RES(IMG_LOOSE));
-    mpImg[4] = Image(SVX_RES(IMG_VERY_LOOSE));
-
-    mpImgSel = new Image[5];
-    mpImgSel[0] = Image(SVX_RES(IMG_VERY_TIGHT_S));
-    mpImgSel[1] = Image(SVX_RES(IMG_TIGHT_S));
-    mpImgSel[2] = Image(SVX_RES(IMG_NORMAL_S));
-    mpImgSel[3] = Image(SVX_RES(IMG_LOOSE_S));
-    mpImgSel[4] = Image(SVX_RES(IMG_VERY_LOOSE_S));
-
-    mpStr = new OUString[5];
-    mpStr[0] = SVX_RESSTR(STR_VERY_TIGHT);
-    mpStr[1] = SVX_RESSTR(STR_TIGHT);
-    mpStr[2] = SVX_RESSTR(STR_NORMAL);
-    mpStr[3] = SVX_RESSTR(STR_LOOSE);
-    mpStr[4] = SVX_RESSTR(STR_VERY_LOOSE);
-
-
-    mpStrTip = new OUString[5];
-    mpStrTip[0] = SVX_RESSTR(STR_VERY_TIGHT_TIP);
-    mpStrTip[1] = SVX_RESSTR(STR_TIGHT_TIP);
-    mpStrTip[2] = SVX_RESSTR(STR_NORMAL_TIP);
-    mpStrTip[3] = SVX_RESSTR(STR_LOOSE_TIP);
-    mpStrTip[4] = SVX_RESSTR(STR_VERY_LOOSE_TIP);
-
-    for (int i=0;i<5;i++)
-        maVSSpacing->AddItem(mpImg[i], &mpImgSel[i],mpStr[i],&mpStrTip[i]);
-
-    maVSSpacing->AddItem( maImgCus, nullptr, maStrCus, nullptr );
-
-    maVSSpacing->SetNoSelection();
-    maVSSpacing->SetSelectHdl(LINK(this, TextCharacterSpacingControl,VSSelHdl ));
-    maVSSpacing->StartSelection();
-    maVSSpacing->Show();
+    maNormal.clear();
+    maVeryTight.clear();
+    maTight.clear();
+    maVeryLoose.clear();
+    maLoose.clear();
+    maLastCustom.clear();
+
+    SfxPopupWindow::dispose();
 }
 
-void TextCharacterSpacingControl::Rearrange(bool bLBAvailable,bool bAvailable, long nKerning)
+void TextCharacterSpacingControl::Initialize()
 {
-    mbVS = true;
-    maVSSpacing->SetNoSelection();
-    SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_SPACING_GLOBAL_VALUE );
-    if ( aWinOpt.Exists() )
+    const SfxPoolItem* pItem;
+    SfxItemState eState = SfxViewFrame::Current()->GetBindings().GetDispatcher()->QueryState(SID_ATTR_CHAR_KERNING, pItem);
+
+    const SvxKerningItem* pKerningItem = static_cast<const SvxKerningItem*>(pItem);
+    long nKerning = 0;
+
+    if(pKerningItem)
+        nKerning = pKerningItem->GetValue();
+
+    SvtViewOptions aWinOpt(E_WINDOW, SIDEBAR_SPACING_GLOBAL_VALUE);
+    if(aWinOpt.Exists())
     {
-        css::uno::Sequence < css::beans::NamedValue > aSeq = aWinOpt.GetUserData();
+        css::uno::Sequence<css::beans::NamedValue> aSeq = aWinOpt.GetUserData();
         ::rtl::OUString aTmp;
-        if ( aSeq.getLength())
+        if(aSeq.getLength())
             aSeq[0].Value >>= aTmp;
 
-        OUString aWinData( aTmp );
+        OUString aWinData(aTmp);
         mnCustomKern = aWinData.toInt32();
         mnLastCus = SPACING_CLOSE_BY_CUS_EDIT;
-        mbCusEnable = true;
     }
     else
     {
         mnLastCus = SPACING_NOCUSTOM;
-        mbCusEnable = false;
-    }
-
-    if( !mnLastCus )
-    {
-        maVSSpacing->ReplaceItemImages(6, maImgCusGrey,nullptr);
-    }
-    else
-    {
-        //set custom tips
-        maVSSpacing->ReplaceItemImages(6, maImgCus,nullptr);
-        if(mnCustomKern > 0)
-        {
-            OUString aStrTip( maStrCusE);   //LAST CUSTOM no tip defect //add
-            aStrTip += OUString::number( (double)mnCustomKern / 10);
-            aStrTip += " " + maStrUnit;      // modify
-            maVSSpacing->SetItemText(6,aStrTip);
-        }
-        else if(mnCustomKern < 0)
-        {
-            OUString aStrTip(maStrCusC) ;     //LAST CUSTOM no tip defect //add
-            aStrTip += OUString::number( (double)-mnCustomKern / 10);
-            aStrTip += " " + maStrUnit;      // modify
-            maVSSpacing->SetItemText( 6, aStrTip );
-        }
-        else
-        {
-            OUString aStrTip(maStrCusN) ;     //LAST CUSTOM no tip defect //add
-            maVSSpacing->SetItemText( 6, aStrTip );
-        }
-
     }
 
-    if(bLBAvailable && bAvailable)
+    if(eState >= SfxItemState::DEFAULT)
     {
         maLBKerning->Enable();
         maFTSpacing->Enable();
 
-        SfxMapUnit eUnit = mrTextPropertyPanel.GetSpaceController().GetCoreMetric();
+        SfxMapUnit eUnit = GetCoreMetric();
         MapUnit eOrgUnit = (MapUnit)eUnit;
-        MapUnit ePntUnit( MAP_POINT );
+        MapUnit ePntUnit(MAP_POINT);
         long nBig = maEditKerning->Normalize(nKerning);
-        nKerning = LogicToLogic( nBig, eOrgUnit, ePntUnit );
+        nKerning = LogicToLogic(nBig, eOrgUnit, ePntUnit);
 
-        if ( nKerning > 0 )
+        if(nKerning > 0)
         {
             maFTBy->Enable();
             maEditKerning->Enable();
-            maEditKerning->SetMax( 9999 );
-            maEditKerning->SetLast( 9999 );
-            maEditKerning->SetValue( nKerning );
-            maLBKerning->SelectEntryPos( SIDEBAR_SPACE_EXPAND );
-            if(nKerning == 30)
-            {
-                maVSSpacing->SelectItem(4);
-            }
-            else if(nKerning == 60)
-            {
-                maVSSpacing->SelectItem(5);
-            }
-            else
-            {
-                maVSSpacing->SetNoSelection();
-                maVSSpacing->SelectItem(0);
-                mbVS = false;
-            }
+            maEditKerning->SetMax(9999);
+            maEditKerning->SetLast(9999);
+            maEditKerning->SetValue(nKerning);
+            maLBKerning->SelectEntryPos(SIDEBAR_SPACE_EXPAND);
         }
-        else if ( nKerning < 0 )
+        else if(nKerning < 0)
         {
             maFTBy->Enable();
             maEditKerning->Enable();
-            maEditKerning->SetValue( -nKerning );
-            maLBKerning->SelectEntryPos( SIDEBAR_SPACE_CONDENSED );
-            long nMax = mrTextPropertyPanel.GetSelFontSize()/6;
-            maEditKerning->SetMax( maEditKerning->Normalize( nMax ), FUNIT_POINT );
-            maEditKerning->SetLast( maEditKerning->GetMax( maEditKerning->GetUnit() ) );
-            if( nKerning == -30 )
-            {
-                maVSSpacing->SelectItem(1);
-            }
-            else if( nKerning == -15 )
-            {
-                maVSSpacing->SelectItem(2);
-            }
-            else
-            {
-                maVSSpacing->SetNoSelection();
-                maVSSpacing->SelectItem(0);
-                mbVS = false;
-            }
+            maEditKerning->SetValue(-nKerning);
+            maLBKerning->SelectEntryPos(SIDEBAR_SPACE_CONDENSED);
+            long nMax = GetSelFontSize()/6;
+            maEditKerning->SetMax(maEditKerning->Normalize(nMax), FUNIT_POINT);
+            maEditKerning->SetLast(maEditKerning->GetMax(maEditKerning->GetUnit()));
         }
         else
         {
-            maVSSpacing->SelectItem(3);
-            maLBKerning->SelectEntryPos( SIDEBAR_SPACE_NORMAL );
+            maLBKerning->SelectEntryPos(SIDEBAR_SPACE_NORMAL);
             maFTBy->Disable();
             maEditKerning->Disable();
-            maEditKerning->SetValue( 0 );
-            maEditKerning->SetMax( 9999 );
-            maEditKerning->SetLast( 9999 );
+            maEditKerning->SetValue(0);
+            maEditKerning->SetMax(9999);
+            maEditKerning->SetLast(9999);
         }
     }
-    else if(bLBAvailable && !bAvailable)
+    else if(SfxItemState::DISABLED == eState)
     {
-        //modified
-        maVSSpacing->SetNoSelection();
-        maVSSpacing->SelectItem(0);
-        mbVS = false;
-        maLBKerning->Enable();
-        maFTSpacing->Enable();
-        maLBKerning->SetNoSelection();
         maEditKerning->SetText(OUString());
+        maLBKerning->SetNoSelection();
+        maLBKerning->Disable();
+        maFTSpacing->Disable();
         maEditKerning->Disable();
         maFTBy->Disable();
     }
     else
     {
-        maVSSpacing->SetNoSelection();
-        maVSSpacing->SelectItem(0);
-        mbVS = false;
-        maEditKerning->SetText(OUString());
+        maLBKerning->Enable();
+        maFTSpacing->Enable();
         maLBKerning->SetNoSelection();
-        maLBKerning->Disable();
-        maFTSpacing->Disable();
+        maEditKerning->SetText(OUString());
         maEditKerning->Disable();
         maFTBy->Disable();
     }
-    GetFocus();
-    maVSSpacing->SetFormat();
-    maVSSpacing->Invalidate();
-    maVSSpacing->StartSelection();
 }
 
-IMPL_LINK_TYPED(TextCharacterSpacingControl, VSSelHdl, ValueSet*, pControl, void)
+void TextCharacterSpacingControl::ExecuteCharacterSpacing(long nValue, bool bClose)
+{
+    SfxMapUnit eUnit = GetCoreMetric();
+
+    long nSign = (nValue < 0) ? -1 : 1;
+    nValue = nValue * nSign;
+
+    long nVal = LogicToLogic(nValue, MAP_POINT, (MapUnit)eUnit);
+    short nKern = (nValue == 0) ? 0 : (short)maEditKerning->Denormalize(nVal);
+
+    SvxKerningItem aKernItem(nSign * nKern, SID_ATTR_CHAR_KERNING);
+
+    SfxViewFrame::Current()->GetBindings().GetDispatcher()->ExecuteList(SID_ATTR_CHAR_KERNING,
+        SfxCallMode::RECORD, { &aKernItem });
+
+    if(bClose)
+        EndPopupMode();
+}
+
+IMPL_LINK_TYPED(TextCharacterSpacingControl, PredefinedValuesHdl, Button*, pControl, void)
 {
     mnLastCus = SPACING_CLOSE_BY_CLICK_ICON;
 
-    if(pControl == maVSSpacing.get())
+    if(pControl == maNormal)
     {
-        sal_uInt16 iPos = maVSSpacing->GetSelectItemId();
-        short nKern = 0;
-        SfxMapUnit eUnit = mrTextPropertyPanel.GetSpaceController().GetCoreMetric();
-        long nVal = 0;
-        if(iPos == 1)
-        {
-            nVal = LogicToLogic(30, MAP_POINT, (MapUnit)eUnit);
-            nKern = (short)maEditKerning->Denormalize(nVal);
-            SvxKerningItem aKernItem(-nKern, SID_ATTR_CHAR_KERNING);
-            mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_CHAR_KERNING,
-                    SfxCallMode::RECORD, { &aKernItem });
-            mnLastCus = SPACING_CLOSE_BY_CLICK_ICON;
-        }
-        else if(iPos == 2)
-        {
-            nVal = LogicToLogic(15, MAP_POINT, (MapUnit)eUnit);
-            nKern = (short)maEditKerning->Denormalize(nVal);
-            SvxKerningItem aKernItem(-nKern, SID_ATTR_CHAR_KERNING);
-            mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_CHAR_KERNING,
-                    SfxCallMode::RECORD, { &aKernItem });
-            mnLastCus = SPACING_CLOSE_BY_CLICK_ICON;
-        }
-        else if(iPos == 3)
-        {
-            SvxKerningItem aKernItem(0, SID_ATTR_CHAR_KERNING);
-            mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_CHAR_KERNING,
-                    SfxCallMode::RECORD, { &aKernItem });
-            mnLastCus = SPACING_CLOSE_BY_CLICK_ICON;
-        }
-        else if(iPos == 4)
-        {
-            nVal = LogicToLogic(30, MAP_POINT, (MapUnit)eUnit);
-            nKern = (short)maEditKerning->Denormalize(nVal);
-            SvxKerningItem aKernItem(nKern, SID_ATTR_CHAR_KERNING);
-            mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_CHAR_KERNING,
-                    SfxCallMode::RECORD, { &aKernItem });
-            mnLastCus = SPACING_CLOSE_BY_CLICK_ICON;
-        }
-        else if(iPos == 5)
-        {
-            nVal = LogicToLogic(60, MAP_POINT, (MapUnit)eUnit);
-            nKern = (short)maEditKerning->Denormalize(nVal);
-            SvxKerningItem aKernItem(nKern, SID_ATTR_CHAR_KERNING);
-            mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_CHAR_KERNING,
-                    SfxCallMode::RECORD, { &aKernItem });
-            mnLastCus = SPACING_CLOSE_BY_CLICK_ICON;
-        }
-        else if(iPos == 6)
-        {
-            //modified
-            if(mbCusEnable)
-            {
-                nVal = LogicToLogic(mnCustomKern, MAP_POINT, (MapUnit)eUnit);
-                nKern = (short)maEditKerning->Denormalize(nVal);
-                SvxKerningItem aKernItem(nKern , SID_ATTR_CHAR_KERNING);
-                mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_CHAR_KERNING,
-                        SfxCallMode::RECORD, { &aKernItem });
-                mnLastCus = SPACING_CLOSE_BY_CLICK_ICON;
-            }
-            else
-            {
-                maVSSpacing->SetNoSelection();       //add , set no selection and keep the last select item
-                maVSSpacing->SetFormat();
-                maVSSpacing->Invalidate();
-                Invalidate();
-                maVSSpacing->StartSelection();
-            }
-            //modify end
-        }
-
-        if(iPos < 6 || (iPos == 6 && mbCusEnable)) //add
-            mrTextPropertyPanel.EndSpacingPopupMode();
+        ExecuteCharacterSpacing(SPACING_NORMAL);
+    }
+    else if(pControl == maVeryTight)
+    {
+        ExecuteCharacterSpacing(SPACING_VERY_TIGHT);
+    }
+    else if(pControl == maTight)
+    {
+        ExecuteCharacterSpacing(SPACING_TIGHT);
+    }
+    else if(pControl == maVeryLoose)
+    {
+        ExecuteCharacterSpacing(SPACING_VERY_LOOSE);
+    }
+    else if(pControl == maLoose)
+    {
+        ExecuteCharacterSpacing(SPACING_LOOSE);
+    }
+    else if(pControl == maLastCustom)
+    {
+        ExecuteCharacterSpacing(mnCustomKern);
     }
 }
 
 IMPL_LINK_NOARG_TYPED(TextCharacterSpacingControl, KerningSelectHdl, ListBox&, void)
 {
-    if ( maLBKerning->GetSelectEntryPos() > 0 )
+    if(maLBKerning->GetSelectEntryPos() > 0)
     {
         maFTBy->Enable();
         maEditKerning->Enable();
     }
     else
     {
-        maEditKerning->SetValue( 0 );
+        maEditKerning->SetValue(0);
         maFTBy->Disable();
         maEditKerning->Disable();
     }
 
-    if ( maVSSpacing->GetSelectItemId() > 0 )
-    {
-        maVSSpacing->SetNoSelection();
-        maVSSpacing->SelectItem(0);
-        maVSSpacing->SetFormat();
-        maVSSpacing->Invalidate();
-        Invalidate();
-        maVSSpacing->StartSelection();
-    }
-    KerningModifyHdl( *maEditKerning );
+    KerningModifyHdl(*maEditKerning);
 }
 
 IMPL_LINK_NOARG_TYPED(TextCharacterSpacingControl, KerningModifyHdl, Edit&, void)
 {
-    if ( maVSSpacing->GetSelectItemId() > 0 )
-    {
-        maVSSpacing->SetNoSelection();
-        maVSSpacing->SelectItem(0);
-        maVSSpacing->SetFormat();
-        maVSSpacing->Invalidate();
-        Invalidate();
-        maVSSpacing->StartSelection();
-    }
     const sal_Int32 nPos = maLBKerning->GetSelectEntryPos();
-    short nKern = 0;
-    SfxMapUnit eUnit = mrTextPropertyPanel.GetSpaceController().GetCoreMetric();
+
     mnLastCus = SPACING_CLOSE_BY_CUS_EDIT;
-    if ( nPos == SIDEBAR_SPACE_EXPAND || nPos == SIDEBAR_SPACE_CONDENSED )
+    if(nPos == SIDEBAR_SPACE_EXPAND || nPos == SIDEBAR_SPACE_CONDENSED)
     {
         long nTmp = static_cast<long>(maEditKerning->GetValue());
-        if ( nPos == SIDEBAR_SPACE_CONDENSED )
+        if(nPos == SIDEBAR_SPACE_CONDENSED)
         {
-            long nMax =  mrTextPropertyPanel.GetSelFontSize()/6;
-            maEditKerning->SetMax( maEditKerning->Normalize( nMax ), FUNIT_TWIP );
-            maEditKerning->SetLast( maEditKerning->GetMax( maEditKerning->GetUnit() ) );
+            long nMax = GetSelFontSize()/6;
+            maEditKerning->SetMax(maEditKerning->Normalize(nMax), FUNIT_TWIP);
+            maEditKerning->SetLast(maEditKerning->GetMax(maEditKerning->GetUnit()));
             if(nTmp > maEditKerning->GetMax())
                 nTmp = maEditKerning->GetMax();
             mnCustomKern = -nTmp;
-            long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)eUnit );
-            nKern = (short)maEditKerning->Denormalize( nVal );
-            nKern *= - 1;
         }
         else
         {
-            maEditKerning->SetMax( 9999 );
-            maEditKerning->SetLast( 9999 );
+            maEditKerning->SetMax(9999);
+            maEditKerning->SetLast(9999);
             if(nTmp > maEditKerning->GetMax(FUNIT_TWIP))
                 nTmp = maEditKerning->GetMax(FUNIT_TWIP);
             mnCustomKern = nTmp;
-            long nVal = LogicToLogic( nTmp, MAP_POINT, (MapUnit)eUnit );
-            nKern = (short)maEditKerning->Denormalize( nVal );
         }
     }
     else
     {
         mnCustomKern = 0;
     }
-    SvxKerningItem aKernItem(nKern, SID_ATTR_CHAR_KERNING);
-    mpBindings->GetDispatcher()->ExecuteList(SID_ATTR_CHAR_KERNING,
-            SfxCallMode::RECORD, { &aKernItem });
+
+    ExecuteCharacterSpacing(mnCustomKern, false);
+}
+
+SfxMapUnit TextCharacterSpacingControl::GetCoreMetric() const
+{
+    SfxItemPool &rPool = SfxGetpApp()->GetPool();
+    sal_uInt16 nWhich = rPool.GetWhich(mnId);
+    return rPool.GetMetric(nWhich);
+}
+
+long TextCharacterSpacingControl::GetSelFontSize() const
+{
+    const SfxPoolItem* pItem;
+    SfxViewFrame::Current()->GetBindings().GetDispatcher()->QueryState(SID_ATTR_CHAR_FONTHEIGHT, pItem);
+
+    const SvxFontHeightItem* pHeightItem = static_cast<const SvxFontHeightItem*>(pItem);
+
+    long nH = 240;
+    SfxMapUnit eUnit = GetCoreMetric();
+    if(pHeightItem)
+        nH = LogicToLogic(pHeightItem->GetHeight(), (MapUnit)eUnit, MAP_TWIP);
+    return nH;
 }
 
-}} // end of namespace sidebar
+} // end of namespace svx
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/sidebar/text/TextCharacterSpacingControl.hxx b/svx/source/sidebar/text/TextCharacterSpacingControl.hxx
index db18905..cd0cdd0 100644
--- a/svx/source/sidebar/text/TextCharacterSpacingControl.hxx
+++ b/svx/source/sidebar/text/TextCharacterSpacingControl.hxx
@@ -20,13 +20,12 @@
 #define INCLUDED_SVX_SOURCE_SIDEBAR_TEXT_TEXTCHARACTERSPACINGCONTROL_HXX
 
 #include "svx/sidebar/PopupControl.hxx"
-#include "svx/sidebar/ValueSetWithTextControl.hxx"
 #include <sfx2/bindings.hxx>
-#include "TextPropertyPanel.hxx"
 #include <vcl/fixed.hxx>
+#include <vcl/field.hxx>
+#include <sfx2/tbxctrl.hxx>
 
-
-namespace svx { namespace sidebar {
+namespace svx {
 #define SPACING_NOCUSTOM                0
 #define SPACING_CLOSE_BY_CLICK_ICON     -1
 #define SPACING_CLOSE_BY_CUS_EDIT       1
@@ -37,60 +36,44 @@ namespace svx { namespace sidebar {
 #define SIDEBAR_SPACE_EXPAND    1
 #define SIDEBAR_SPACE_CONDENSED 2
 
-class TextCharacterSpacingControl:public svx::sidebar::PopupControl
+class TextCharacterSpacingControl : public SfxPopupWindow
 {
 public:
-    TextCharacterSpacingControl (
-        vcl::Window* pParent,
-        svx::sidebar::TextPropertyPanel& rPanel,
-        SfxBindings* pBindings);
+    TextCharacterSpacingControl(sal_uInt16 nId);
     virtual ~TextCharacterSpacingControl();
     virtual void dispose() override;
-    void Rearrange(bool bLBAvailable,bool bAvailable, long nKerning);
-    //virtual void Paint(const Rectangle& rect);
 
-    //add
     short GetLastCustomState() { return mnLastCus;}
     long  GetLastCustomValue() { return mnCustomKern;}
-    //add end
 
 private:
-    svx::sidebar::TextPropertyPanel&     mrTextPropertyPanel;
-    SfxBindings*        mpBindings;
-
-    VclPtr<ValueSetWithTextControl> maVSSpacing;
-
-    VclPtr<FixedText>   maLastCus;
-
     VclPtr<FixedText>   maFTSpacing;
     VclPtr<ListBox>     maLBKerning;
     VclPtr<FixedText>   maFTBy;
     VclPtr<MetricField> maEditKerning;
 
-    Image*              mpImg;
-    Image*              mpImgSel;
-    OUString*           mpStr;
-    OUString*           mpStrTip;
-
-    Image               maImgCus;
-    Image               maImgCusGrey;
-    OUString            maStrCus;
-    OUString            maStrCusE;
-    OUString            maStrCusC;
-    OUString            maStrCusN;
-    OUString            maStrUnit;
+    VclPtr<PushButton> maNormal;
+    VclPtr<PushButton> maVeryTight;
+    VclPtr<PushButton> maTight;
+    VclPtr<PushButton> maVeryLoose;
+    VclPtr<PushButton> maLoose;
+    VclPtr<PushButton> maLastCustom;
 
+    sal_uInt16          mnId;
     long                mnCustomKern;
     short               mnLastCus;
-    bool                mbCusEnable;
-    bool                mbVS;
 
-    void initial();
-    DECL_LINK_TYPED(VSSelHdl, ValueSet*, void);
+    void Initialize();
+    void ExecuteCharacterSpacing(long nValue, bool bClose = true);
+
+    DECL_LINK_TYPED(PredefinedValuesHdl, Button*, void);
     DECL_LINK_TYPED(KerningSelectHdl, ListBox&, void);
     DECL_LINK_TYPED(KerningModifyHdl, Edit&, void);
+
+    SfxMapUnit GetCoreMetric() const;
+    long GetSelFontSize() const;
 };
-}}
+}
 
 #endif
 
diff --git a/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx b/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx
index 148b864..266b9d3 100644
--- a/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx
+++ b/svx/source/sidebar/text/TextCharacterSpacingPopup.cxx
@@ -16,53 +16,35 @@
  *   except in compliance with the License. You may obtain a copy of
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
-#include "TextCharacterSpacingPopup.hxx"
+#include <svx/TextCharacterSpacingPopup.hxx>
 #include "TextCharacterSpacingControl.hxx"
 #include <unotools/viewoptions.hxx>
+#include <vcl/toolbox.hxx>
+#include <editeng/kernitem.hxx>
 
-namespace svx { namespace sidebar {
+using namespace svx;
 
-TextCharacterSpacingPopup::TextCharacterSpacingPopup (
-    vcl::Window* pParent,
-    const ::std::function<VclPtr<PopupControl>(PopupContainer*)>& rControlCreator)
-    : Popup(
-        pParent,
-        rControlCreator,
-        OUString( "Character Spacing"))
+SFX_IMPL_TOOLBOX_CONTROL(TextCharacterSpacingPopup, SvxKerningItem);
+
+TextCharacterSpacingPopup::TextCharacterSpacingPopup(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx)
+    : SfxToolBoxControl(nSlotId, nId, rTbx)
 {
-    SetPopupModeEndHandler([this] () { return this->PopupModeEndCallback(); });
+    rTbx.SetItemBits(nId, ToolBoxItemBits::DROPDOWNONLY | rTbx.GetItemBits(nId));
 }
 
 TextCharacterSpacingPopup::~TextCharacterSpacingPopup()
 {
 }
 
-void TextCharacterSpacingPopup::Rearrange (bool bLBAvailable,bool bAvailable, long nKerning)
+VclPtr<SfxPopupWindow> TextCharacterSpacingPopup::CreatePopupWindow()
 {
-    ProvideContainerAndControl();
+    VclPtr<TextCharacterSpacingControl> pControl = VclPtr<TextCharacterSpacingControl>::Create(GetSlotId());
 
-    TextCharacterSpacingControl* pControl = dynamic_cast<TextCharacterSpacingControl*>(mxControl.get());
-    if (pControl != nullptr)
-        pControl->Rearrange(bLBAvailable,bAvailable,nKerning);
-}
+    pControl->StartPopupMode(&GetToolBox(), FloatWinPopupFlags::GrabFocus|FloatWinPopupFlags::NoAppFocusClose);
 
-void TextCharacterSpacingPopup::PopupModeEndCallback()
-{
-    ProvideContainerAndControl();
-    TextCharacterSpacingControl* pControl = dynamic_cast<TextCharacterSpacingControl*>(mxControl.get());
-    if (pControl == nullptr)
-        return;
+    SetPopupWindow(pControl);
 
-    if( pControl->GetLastCustomState() == SPACING_CLOSE_BY_CUS_EDIT)
-    {
-        SvtViewOptions aWinOpt( E_WINDOW, SIDEBAR_SPACING_GLOBAL_VALUE );
-        css::uno::Sequence < css::beans::NamedValue > aSeq
-            { { "Spacing", css::uno::makeAny(OUString::number(pControl->GetLastCustomValue())) } };
-        aWinOpt.SetUserData( aSeq );
-
-    }
+    return pControl;
 }
 
-} } // end of namespace svx::sidebar
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/sidebar/text/TextPropertyPanel.cxx b/svx/source/sidebar/text/TextPropertyPanel.cxx
index ec237d0..b4794ef 100644
--- a/svx/source/sidebar/text/TextPropertyPanel.cxx
+++ b/svx/source/sidebar/text/TextPropertyPanel.cxx
@@ -28,7 +28,6 @@
 
 #include <vcl/toolbox.hxx>
 #include "TextCharacterSpacingControl.hxx"
-#include "TextCharacterSpacingPopup.hxx"
 #include "TextUnderlineControl.hxx"
 #include "TextUnderlinePopup.hxx"
 #include <svx/sidebar/PopupContainer.hxx>
@@ -37,30 +36,15 @@
 using namespace css;
 using namespace css::uno;
 
-const char UNO_SPACING[] = ".uno:Spacing";
 const char UNO_UNDERLINE[] = ".uno:Underline";
 
 namespace svx { namespace sidebar {
 
-VclPtr<PopupControl> TextPropertyPanel::CreateCharacterSpacingControl (PopupContainer* pParent)
-{
-    return VclPtrInstance<TextCharacterSpacingControl>(pParent, *this, mpBindings);
-}
-
 VclPtr<PopupControl> TextPropertyPanel::CreateUnderlinePopupControl (PopupContainer* pParent)
 {
     return VclPtrInstance<TextUnderlineControl>(pParent, *this, mpBindings);
 }
 
-long TextPropertyPanel::GetSelFontSize()
-{
-    long nH = 240;
-    SfxMapUnit eUnit = maSpacingControl.GetCoreMetric();
-    if (mpHeightItem)
-        nH = LogicToLogic(  mpHeightItem->GetHeight(), (MapUnit)eUnit, MAP_TWIP );
-    return nH;
-}
-
 VclPtr<vcl::Window> TextPropertyPanel::Create (
     vcl::Window* pParent,
     const css::uno::Reference<css::frame::XFrame>& rxFrame,
@@ -85,9 +69,7 @@ TextPropertyPanel::TextPropertyPanel ( vcl::Window* pParent, const css::uno::Ref
     : PanelLayout(pParent, "SidebarTextPanel", "svx/ui/sidebartextpanel.ui", rxFrame),
         maFontSizeControl   (SID_ATTR_CHAR_FONTHEIGHT,  *pBindings, *this, OUString("FontHeight"),   rxFrame),
         maUnderlineControl  (SID_ATTR_CHAR_UNDERLINE,   *pBindings, *this, OUString("Underline"),    rxFrame),
-        maSpacingControl    (SID_ATTR_CHAR_KERNING,     *pBindings, *this, OUString("Spacing"),      rxFrame),
 
-        maCharSpacePopup(this, [this] (PopupContainer *const pContainer) { return this->CreateCharacterSpacingControl(pContainer); }),
         maUnderlinePopup(this, [this] (PopupContainer *const pContainer) { return this->CreateUnderlinePopupControl(pContainer); }),
         maContext(),
         mpBindings(pBindings)
@@ -102,15 +84,11 @@ TextPropertyPanel::TextPropertyPanel ( vcl::Window* pParent, const css::uno::Ref
     //toolbox
     SetupToolboxItems();
     InitToolBoxFont();
-    InitToolBoxSpacing();
 
     //init state
     mpHeightItem = nullptr;
     meUnderline = LINESTYLE_NONE;
     meUnderlineColor = COL_AUTO;
-    mbKernAvailable = true;
-    mbKernLBAvailable = true;
-    mlKerning = 0;
 }
 
 TextPropertyPanel::~TextPropertyPanel()
@@ -128,9 +106,7 @@ void TextPropertyPanel::dispose()
 
     maFontSizeControl.dispose();
     maUnderlineControl.dispose();
-    maSpacingControl.dispose();
 
-    maCharSpacePopup.dispose();
     maUnderlinePopup.dispose();
 
     PanelLayout::dispose();
@@ -192,11 +168,6 @@ void TextPropertyPanel::DataChanged (const DataChangedEvent& /*rEvent*/)
     SetupToolboxItems();
 }
 
-void TextPropertyPanel::EndSpacingPopupMode()
-{
-    maCharSpacePopup.Hide();
-}
-
 void TextPropertyPanel::EndUnderlinePopupMode()
 {
     maUnderlinePopup.Hide();
@@ -208,20 +179,9 @@ void TextPropertyPanel::InitToolBoxFont()
     mpToolBoxFont->SetDropdownClickHdl(aLink);
 }
 
-void TextPropertyPanel::InitToolBoxSpacing()
-{
-    const sal_uInt16 nId = mpToolBoxSpacing->GetItemId(UNO_SPACING);
-    mpToolBoxSpacing->SetItemBits(nId, mpToolBoxSpacing->GetItemBits(nId) | ToolBoxItemBits::DROPDOWNONLY);
-
-    Link<ToolBox *, void> aLink = LINK(this, TextPropertyPanel, SpacingClickHdl);
-    mpToolBoxSpacing->SetDropdownClickHdl ( aLink );
-    mpToolBoxSpacing->SetSelectHdl( aLink );
-}
-
 void TextPropertyPanel::SetupToolboxItems()
 {
     maUnderlineControl.SetupToolBoxItem(*mpToolBoxFont, mpToolBoxFont->GetItemId(UNO_UNDERLINE));
-    maSpacingControl.SetupToolBoxItem(*mpToolBoxSpacing, mpToolBoxSpacing->GetItemId(UNO_SPACING));
 }
 
 IMPL_LINK_TYPED(TextPropertyPanel, UnderlineClickHdl, ToolBox*, pToolBox, void)
@@ -237,19 +197,6 @@ IMPL_LINK_TYPED(TextPropertyPanel, UnderlineClickHdl, ToolBox*, pToolBox, void)
     }
 }
 
-IMPL_LINK_TYPED(TextPropertyPanel, SpacingClickHdl, ToolBox*, pToolBox, void)
-{
-    const sal_uInt16 nId = pToolBox->GetCurItemId();
-    const OUString aCommand(pToolBox->GetItemCommand(nId));
-
-    if (aCommand == UNO_SPACING)
-    {
-        pToolBox->SetItemDown( nId, true );
-        maCharSpacePopup.Rearrange(mbKernLBAvailable,mbKernAvailable,mlKerning);
-        maCharSpacePopup.Show(*pToolBox);
-    }
-}
-
 void TextPropertyPanel::NotifyItemUpdate (
     const sal_uInt16 nSID,
     const SfxItemState eState,
@@ -280,34 +227,6 @@ void TextPropertyPanel::NotifyItemUpdate (
         break;
     case SID_ATTR_CHAR_KERNING:
         {
-            if ( SfxItemState::DEFAULT == eState )
-            {
-                mbKernLBAvailable = true;
-
-                if(dynamic_cast<const SvxKerningItem*>( pState) !=  nullptr)
-                {
-                    const SvxKerningItem* pKerningItem = static_cast<const SvxKerningItem*>(pState);
-                    mlKerning = (long)pKerningItem->GetValue();
-                    mbKernAvailable = true;
-                }
-                else
-                {
-                    mlKerning = 0;
-                    mbKernAvailable =false;
-                }
-            }
-            else if (SfxItemState::DISABLED == eState)
-            {
-                mbKernLBAvailable = false;
-                mbKernAvailable = false;
-                mlKerning = 0;
-            }
-            else
-            {
-                mbKernLBAvailable = true;
-                mbKernAvailable = false;
-                mlKerning = 0;
-            }
             mpToolBoxSpacing->Enable(bIsEnabled);
         }
         break;
diff --git a/svx/source/sidebar/text/TextPropertyPanel.hrc b/svx/source/sidebar/text/TextPropertyPanel.hrc
index 7f563f7..4271ddf 100644
--- a/svx/source/sidebar/text/TextPropertyPanel.hrc
+++ b/svx/source/sidebar/text/TextPropertyPanel.hrc
@@ -65,48 +65,6 @@
 
 #define STR_WITHOUT             50
 
-//POPUP WINDOW OF SPACING
-#define VS_SPACING                  1
-
-#define CT_BORDER                   7
-#define LB_KERNING                  8
-#define ED_KERNING                  9
-
-#define FT_SPACING                  18
-#define FT_BY                       19
-#define FT_LASTCUSTOM               20
-
-#define IMG_NORMAL                  31
-#define IMG_VERY_TIGHT              32
-#define IMG_TIGHT                   33
-#define IMG_LOOSE                   34
-#define IMG_VERY_LOOSE              35
-#define IMG_CUSTOM                  36
-#define IMG_CUSTOM_GRAY             37
-
-#define IMG_NORMAL_S                51
-#define IMG_VERY_TIGHT_S            52
-#define IMG_TIGHT_S                 53
-#define IMG_LOOSE_S                 54
-#define IMG_VERY_LOOSE_S            55
-
-#define STR_VERY_TIGHT              61
-#define STR_TIGHT                   62
-#define STR_NORMAL                  63
-#define STR_LOOSE                   64
-#define STR_VERY_LOOSE              65
-#define STR_CUSTOM                  66
-
-#define STR_VERY_TIGHT_TIP          67
-#define STR_TIGHT_TIP               68
-#define STR_NORMAL_TIP              69
-#define STR_LOOSE_TIP               70
-#define STR_VERY_LOOSE_TIP          71
-
-#define STR_CUSTOM_C_TIP            72
-#define STR_CUSTOM_E_TIP            73
-#define STR_PT                      74
-
 //help ids
 #define HID_UNDERLINE_BTN               "SVX_HID_UNDERLINE_BTN"
 #define HID_SPACING_CB_KERN             "SVX_HID_SPACING_CB_KERN"
diff --git a/svx/source/sidebar/text/TextPropertyPanel.hxx b/svx/source/sidebar/text/TextPropertyPanel.hxx
index 16e62ce..863a037 100644
--- a/svx/source/sidebar/text/TextPropertyPanel.hxx
+++ b/svx/source/sidebar/text/TextPropertyPanel.hxx
@@ -29,7 +29,6 @@
 #include <com/sun/star/ui/XSidebar.hpp>
 #include <com/sun/star/frame/XToolbarController.hpp>
 
-#include "TextCharacterSpacingPopup.hxx"
 #include "TextUnderlinePopup.hxx"
 #include <svx/sidebar/PanelLayout.hxx>
 
@@ -57,9 +56,6 @@ public:
 
     virtual void DataChanged (const DataChangedEvent& rEvent) override;
 
-    ::sfx2::sidebar::ControllerItem& GetSpaceController() { return maSpacingControl;}
-    long GetSelFontSize();
-    void EndSpacingPopupMode();
     void EndUnderlinePopupMode();
     Color& GetUnderlineColor() { return meUnderlineColor;}
 
@@ -92,29 +88,21 @@ private:
     //control items
     ::sfx2::sidebar::ControllerItem maFontSizeControl;
     ::sfx2::sidebar::ControllerItem maUnderlineControl;
-    ::sfx2::sidebar::ControllerItem maSpacingControl;
 
     FontLineStyle               meUnderline;
     Color                       meUnderlineColor;
-    bool                        mbKernAvailable;
-    bool                        mbKernLBAvailable;
-    long                        mlKerning;
     SvxFontHeightItem*          mpHeightItem;
 
-    TextCharacterSpacingPopup maCharSpacePopup;
     TextUnderlinePopup maUnderlinePopup;
 
     ::sfx2::sidebar::EnumContext maContext;
     SfxBindings* mpBindings;
 
-    VclPtr<PopupControl> CreateCharacterSpacingControl (PopupContainer* pParent);
     VclPtr<PopupControl> CreateUnderlinePopupControl (PopupContainer* pParent);
-    DECL_LINK_TYPED(SpacingClickHdl, ToolBox*, void);
     DECL_LINK_TYPED(UnderlineClickHdl, ToolBox*, void);
 
     void SetupToolboxItems();
     void InitToolBoxFont();
-    void InitToolBoxSpacing();
 };
 
 } } // end of namespace svx::sidebar
diff --git a/svx/source/sidebar/text/TextPropertyPanel.src b/svx/source/sidebar/text/TextPropertyPanel.src
index 62811f6..74a8198 100644
--- a/svx/source/sidebar/text/TextPropertyPanel.src
+++ b/svx/source/sidebar/text/TextPropertyPanel.src
@@ -178,184 +178,4 @@ Control RID_POPUPPANEL_TEXTPAGE_UNDERLINE
 
 };
 
-Control RID_POPUPPANEL_TEXTPAGE_SPACING
-{
-    OutputSize = TRUE;
-    DialogControl = TRUE;
-    Border = FALSE;
-
-    Size = MAP_APPFONT(  POPUPPANEL_MARGIN_SMALL * 2 + POPUP_BORDER_WIDTH + VS_SPACING_WIDTH , POPUPPANEL_MARGIN_SMALL * 3 + 15 * 6 + CUSTOM_HEIGHT + TEXT_HEIGHT + POPUPPANEL_MARGIN_LARGE + POPUP_BORDER_WIDTH + 1);
-
-    Control VS_SPACING
-    {
-        HelpId = HID_PPROPERTYPANEL_TEXT_SPACING_VS ;
-        Hide = TRUE ;
-        Pos = MAP_APPFONT(  POPUPPANEL_MARGIN_SMALL + OFFSET_X , POPUPPANEL_MARGIN_SMALL + OFFSET_Y );
-        Size = MAP_APPFONT ( VS_SPACING_WIDTH  , 15 * 6);
-        TabStop = TRUE ;
-        Text  = "Character Spacing";
-    };
-
-    FixedText FT_LASTCUSTOM
-    {
-        Pos = MAP_APPFONT ( POPUPPANEL_MARGIN_LARGE + OFFSET_X ,POPUPPANEL_MARGIN_SMALL + OFFSET_Y + POPUPPANEL_MARGIN_SMALL + 15 * 6) ;
-        Size = MAP_APPFONT ( CUSTOM_WIDTH , TEXT_HEIGHT );
-        Left = TRUE ;
-        Text [ en-US ] = "Custom:" ;
-    };
-    //custom area
-    FixedText   FT_SPACING
-    {
-        Pos = MAP_APPFONT ( CUSTOM_X + POPUPPANEL_MARGIN_LARGE, CUSTOM_Y + POPUPPANEL_MARGIN_LARGE);
-        Size = MAP_APPFONT ( CUSTOM_WIDTH - POPUPPANEL_MARGIN_LARGE * 2 , TEXT_HEIGHT );
-        Left = TRUE ;
-        Text [ en-US ] = "~Character spacing: " ;
-    };
-    ListBox LB_KERNING
-    {
-        Border = TRUE;
-        Pos = MAP_APPFONT ( CUSTOM_X + POPUPPANEL_MARGIN_LARGE, CUSTOM_Y + POPUPPANEL_MARGIN_LARGE + TEXT_HEIGHT + POPUPPANEL_MARGIN_SMALL);//20
-        Size = MAP_APPFONT ( CUSTOM_WIDTH - POPUPPANEL_MARGIN_LARGE * 2 , 80 ) ;
-        TabStop = TRUE;
-        DropDown = TRUE ;
-        HelpID = HID_SPACING_CB_KERN;
-        StringList [ en-US ] =
-        {
-            < "Default" ; Default ; > ;
-            < "Expanded" ; Default ; > ;
-            < "Condensed" ; Default ; > ;
-        };
-    };
-    FixedText   FT_BY
-    {
-        Pos = MAP_APPFONT ( CUSTOM_X + POPUPPANEL_MARGIN_LARGE, CUSTOM_Y + POPUPPANEL_MARGIN_LARGE * 2 + TEXT_HEIGHT + POPUPPANEL_MARGIN_SMALL + CBOX_HEIGHT );
-        Size = MAP_APPFONT ( CUSTOM_WIDTH - POPUPPANEL_MARGIN_LARGE * 2 , TEXT_HEIGHT );
-        Left = TRUE ;
-        Text [ en-US ] = "Change ~by: " ;
-    };
-    MetricField ED_KERNING
-    {
-        HelpID = HID_SPACING_MB_KERN;
-        Border = TRUE;
-        Pos = MAP_APPFONT ( CUSTOM_X + POPUPPANEL_MARGIN_LARGE, CUSTOM_Y + POPUPPANEL_MARGIN_LARGE * 2 + TEXT_HEIGHT * 2 + POPUPPANEL_MARGIN_SMALL * 2 + CBOX_HEIGHT);//60
-        Size = MAP_APPFONT ( CUSTOM_WIDTH - POPUPPANEL_MARGIN_LARGE * 2 , MBOX_HEIGHT );
-        TabStop = TRUE;
-        Repeat = TRUE ;
-        Spin = TRUE ;
-        Maximum = 9999 ;
-        DecimalDigits = 1 ;
-        Unit = FUNIT_POINT ;
-        SpinSize = 10 ;
-    };
-
-    Image IMG_NORMAL
-    {
-        ImageBitmap = Bitmap{File = "symphony/spacing_normal.bmp" ;};//"spacing_normal.bmp"
-    };
-    Image IMG_VERY_TIGHT
-    {
-        ImageBitmap = Bitmap{File = "symphony/spacing_very tight.bmp";};
-    };
-    Image IMG_TIGHT
-    {
-        ImageBitmap = Bitmap{File = "symphony/spacing_tight.bmp";};
-    };
-    Image IMG_LOOSE
-    {
-        ImageBitmap = Bitmap{File = "symphony/spacing_loose.bmp";};
-    };
-    Image IMG_VERY_LOOSE
-    {
-        ImageBitmap = Bitmap{File = "symphony/spacing_very loose.bmp";};
-    };
-
-    Image IMG_NORMAL_S
-    {
-        ImageBitmap = Bitmap{File = "symphony/spacing_normal_s.bmp";};
-    };
-    Image IMG_VERY_TIGHT_S
-    {
-        ImageBitmap = Bitmap{File = "symphony/spacing_very tight_s.bmp";};
-    };
-    Image IMG_TIGHT_S
-    {
-        ImageBitmap = Bitmap{File = "symphony/spacing_tight_s.bmp";};
-    };
-    Image IMG_LOOSE_S
-    {
-        ImageBitmap = Bitmap{File = "symphony/spacing_loose_s.bmp";};
-    };
-    Image IMG_VERY_LOOSE_S
-    {
-        ImageBitmap = Bitmap{File = "symphony/spacing_very loose_s.bmp";};
-    };
-
-    Image IMG_CUSTOM
-    {
-        ImageBitmap = Bitmap{File = "symphony/last_custom_common.png";};
-    };
-    Image IMG_CUSTOM_GRAY
-    {
-        ImageBitmap = Bitmap{File = "symphony/last_custom_common_grey.png";};
-    };
-
-    String STR_VERY_TIGHT
-    {
-        Text [ en-US ] = "Very Tight";
-    };
-    String STR_TIGHT
-    {
-        Text [ en-US ] = "Tight";
-    };
-    String STR_NORMAL
-    {
-        Text [ en-US ] = "Normal";
-    };
-    String STR_LOOSE
-    {
-        Text [ en-US ] = "Loose";
-    };
-    String STR_VERY_LOOSE
-    {
-        Text [ en-US ] = "Very Loose";
-    };
-    String STR_CUSTOM
-    {
-        Text [ en-US ] = "Last Custom Value";
-    };
-
-    String STR_VERY_TIGHT_TIP
-    {
-        Text [ en-US ] = " Spacing: Condensed By: 3 pt";
-    };
-    String STR_TIGHT_TIP
-    {
-        Text [ en-US ] = " Spacing: Condensed By: 1.5 pt";
-    };
-    String STR_NORMAL_TIP
-    {
-        Text [ en-US ] = " Spacing: Normal";
-    };
-    String STR_LOOSE_TIP
-    {
-        Text [ en-US ] = " Spacing: Expanded By: 3 pt";
-    };
-    String STR_VERY_LOOSE_TIP
-    {
-        Text [ en-US ] = " Spacing: Expanded By: 6 pt";
-    };
-    String STR_CUSTOM_C_TIP
-    {
-        Text [ en-US ] = " Spacing: Condensed By: ";
-    };
-    String STR_CUSTOM_E_TIP
-    {
-        Text [ en-US ] = " Spacing: Expanded By: ";
-    };
-    String STR_PT
-    {
-        Text[ en-US ] = "pt";
-    };
-};
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/uiconfig/ui/textcharacterspacingcontrol.ui b/svx/uiconfig/ui/textcharacterspacingcontrol.ui
new file mode 100644
index 0000000..7fd26786
--- /dev/null
+++ b/svx/uiconfig/ui/textcharacterspacingcontrol.ui
@@ -0,0 +1,269 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.10"/>
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="upper">9999</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">1</property>
+  </object>
+  <object class="GtkImage" id="image_spacing_1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="pixbuf">svx/res/symphony/spacing_very tight.png</property>
+  </object>
+  <object class="GtkImage" id="image_spacing_115">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="margin_right">6</property>
+    <property name="xalign">0</property>
+    <property name="pixbuf">svx/res/symphony/spacing_tight.png</property>
+    <property name="icon_size">1</property>
+  </object>
+  <object class="GtkImage" id="image_spacing_15">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="margin_right">6</property>
+    <property name="xalign">0</property>
+    <property name="pixbuf">svx/res/symphony/spacing_normal.png</property>
+    <property name="icon_size">1</property>
+  </object>
+  <object class="GtkImage" id="image_spacing_2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="margin_right">6</property>
+    <property name="xalign">0</property>
+    <property name="pixbuf">svx/res/symphony/spacing_loose.png</property>
+    <property name="icon_size">1</property>
+  </object>
+  <object class="GtkImage" id="image_spacing_3">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="xalign">0</property>
+    <property name="pixbuf">svx/res/symphony/spacing_very loose.png</property>
+    <property name="icon_size">1</property>
+  </object>
+  <object class="GtkImage" id="image_spacing_4">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="xalign">0</property>
+    <property name="pixbuf">svx/res/symphony/last_custom_common.png</property>
+    <property name="icon_size">1</property>
+  </object>
+  <object class="GtkWindow" id="TextCharacterSpacingControl">
+    <property name="can_focus">False</property>
+    <property name="hexpand">True</property>
+    <property name="vexpand">True</property>
+    <property name="border_width">4</property>
+    <property name="resizable">False</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="type_hint">popup-menu</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="deletable">False</property>
+    <child>
+      <object class="GtkGrid" id="grid2">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_right">6</property>
+        <property name="hexpand">True</property>
+        <property name="vexpand">True</property>
+        <child>
+          <object class="GtkButton" id="very_tight">
+            <property name="label" translatable="yes">Very Tight</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="image">image_spacing_1</property>
+            <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <property name="always_show_image">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="tight">
+            <property name="label" translatable="yes">Tight</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="image">image_spacing_115</property>
+            <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <property name="always_show_image">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="normal">
+            <property name="label" translatable="yes">Normal</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="image">image_spacing_15</property>
+            <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <property name="always_show_image">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="loose">
+            <property name="label" translatable="yes">Loose</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="image">image_spacing_2</property>
+            <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <property name="always_show_image">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkFrame" id="frame1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="margin_left">3</property>
+            <property name="margin_top">6</property>
+            <property name="hexpand">True</property>
+            <property name="vexpand">True</property>
+            <property name="label_xalign">0</property>
+            <property name="shadow_type">none</property>
+            <child>
+              <object class="GtkAlignment" id="alignment1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_top">6</property>
+                <property name="left_padding">12</property>
+                <child>
+                  <object class="GtkGrid" id="grid3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="hexpand">True</property>
+                    <property name="row_spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="spacing_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_Character Spacing:</property>
+                        <property name="use_underline">True</property>
+                        <property name="mnemonic_widget">kerninglb</property>
+                        <property name="xalign">0</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkComboBoxText" id="kerninglb">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="hexpand">True</property>
+                        <items>
+                          <item translatable="yes">Default</item>
+                          <item translatable="yes">Expanded</item>
+                          <item translatable="yes">Condensed</item>
+                        </items>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="change_by_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Change _by:</property>
+                        <property name="use_underline">True</property>
+                        <property name="xalign">0</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkSpinButton" id="kerning:0pt">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="hexpand">True</property>
+                        <property name="invisible_char">●</property>
+                        <property name="width_chars">0</property>
+                        <property name="adjustment">adjustment1</property>
+                        <property name="digits">1</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">3</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child type="label">
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Custom Value</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">6</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="very_loose">
+            <property name="label" translatable="yes">Very Loose</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="image">image_spacing_3</property>
+            <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <property name="always_show_image">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkButton" id="last_custom">
+            <property name="label" translatable="yes">Last Custom Value</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">True</property>
+            <property name="image">image_spacing_4</property>
+            <property name="relief">none</property>
+            <property name="xalign">0</property>
+            <property name="always_show_image">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">5</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/sw/source/uibase/app/swmodule.cxx b/sw/source/uibase/app/swmodule.cxx
index 54fe827..9067e61 100644
--- a/sw/source/uibase/app/swmodule.cxx
+++ b/sw/source/uibase/app/swmodule.cxx
@@ -25,6 +25,7 @@
 #include <vcl/graph.hxx>
 #include <svtools/ehdl.hxx>
 #include <svx/ParaLineSpacingPopup.hxx>
+#include <svx/TextCharacterSpacingPopup.hxx>
 #include <svx/svdobj.hxx>
 #include <svx/pszctrl.hxx>
 #include <svx/insctrl.hxx>
@@ -284,6 +285,7 @@ void SwDLL::RegisterControls()
     SvxTbxCtlDraw::RegisterControl(SID_TRACK_CHANGES_BAR, pMod );
     SwTbxAutoTextCtrl::RegisterControl(FN_GLOSSARY_DLG, pMod );
     svx::ParaLineSpacingPopup::RegisterControl(SID_ATTR_PARA_LINESPACE, pMod);
+    svx::TextCharacterSpacingPopup::RegisterControl(SID_ATTR_CHAR_KERNING, pMod);
 
     SvxColorToolBoxControl::RegisterControl( SID_EXTRUSION_3D_COLOR, pMod );
 


More information about the Libreoffice-commits mailing list