[Libreoffice-commits] core.git: extras/source include/sfx2 include/svx sfx2/source solenv/bin solenv/sanitizers svx/source svx/uiconfig sw/qa

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Tue Mar 26 09:05:50 UTC 2019


 extras/source/glade/libreoffice-catalog.xml.in   |    6 
 include/sfx2/basedlgs.hxx                        |    1 
 include/svx/rubydialog.hxx                       |  147 ++-----
 include/svx/srchdlg.hxx                          |    2 
 sfx2/source/dialog/basedlgs.cxx                  |    5 
 solenv/bin/native-code.py                        |    2 
 solenv/sanitizers/ui/svx.suppr                   |    4 
 svx/source/dialog/rubydialog.cxx                 |  470 ++++++++++-------------
 svx/source/dialog/srchdlg.cxx                    |   10 
 svx/uiconfig/ui/asianphoneticguidedialog.ui      |  245 ++++++-----
 svx/uiconfig/ui/fontworkgallerydialog.ui         |    7 
 sw/qa/uitest/writer_tests2/asianPhoneticGuide.py |    4 
 12 files changed, 420 insertions(+), 483 deletions(-)

New commits:
commit f1f9c6ee9417cf921e63362f9d82dd196bd07916
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sun Mar 24 17:57:59 2019 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Mar 26 10:05:25 2019 +0100

    weld SvxRubyDialog
    
    Change-Id: I32f26b9d3e495e64a38cd8a56e532374dd4891f1
    Reviewed-on: https://gerrit.libreoffice.org/69651
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/extras/source/glade/libreoffice-catalog.xml.in b/extras/source/glade/libreoffice-catalog.xml.in
index 6e829d2aa415..abeb0910a2dc 100644
--- a/extras/source/glade/libreoffice-catalog.xml.in
+++ b/extras/source/glade/libreoffice-catalog.xml.in
@@ -195,9 +195,6 @@
     <glade-widget-class title="Path List" name="xsltdlglo-SvxPathControl"
                         generic-name="Path List" parent="GtkDrawingArea"
                         icon-name="widget-gtk-drawingarea"/>
-    <glade-widget-class title="Ruby Preview" name="svxlo-RubyPreview"
-                        generic-name="Ruby Preview" parent="GtkDrawingArea"
-                        icon-name="widget-gtk-drawingarea"/>
     <glade-widget-class title="Print Preview" name="vcllo-PrintPreviewWindow"
                         generic-name="Print Preview" parent="GtkDrawingArea"
                         icon-name="widget-gtk-drawingarea"/>
@@ -216,9 +213,6 @@
     <glade-widget-class title="Chart Light Button" name="chartcontrollerlo-LightButton"
                         generic-name="ChartLightButton" parent="GtkButton"
                         icon-name="widget-gtk-button"/>
-    <glade-widget-class title="Ruby Edit" name="svxlo-RubyEdit"
-                        generic-name="RubyEdit" parent="GtkEntry"
-                        icon-name="widget-gtk-textentry"/>
     <glade-widget-class title="Extended Macro Library" name="basctllo-ExtTreeListBox"
                         generic-name="Extended Macro Library List" parent="GtkTreeView"
                         icon-name="widget-gtk-treeview"/>
diff --git a/include/sfx2/basedlgs.hxx b/include/sfx2/basedlgs.hxx
index 311d7d397f06..69c527ffce15 100644
--- a/include/sfx2/basedlgs.hxx
+++ b/include/sfx2/basedlgs.hxx
@@ -143,6 +143,7 @@ protected:
 
 public:
     void                    Initialize (SfxChildWinInfo const * pInfo);
+    bool                    IsClosing() const;
     virtual void            Close() override;
     virtual void            EndDialog() override;
     virtual void            Activate() override;
diff --git a/include/svx/rubydialog.hxx b/include/svx/rubydialog.hxx
index 2f093426045f..ad7ba732dddb 100644
--- a/include/svx/rubydialog.hxx
+++ b/include/svx/rubydialog.hxx
@@ -23,116 +23,99 @@
 
 #include <sfx2/childwin.hxx>
 #include <sfx2/basedlgs.hxx>
-#include <vcl/layout.hxx>
-#include <vcl/lstbox.hxx>
-#include <vcl/fixed.hxx>
-#include <vcl/button.hxx>
-#include <vcl/edit.hxx>
-#include <vcl/scrbar.hxx>
+#include <vcl/customweld.hxx>
 #include <svx/svxdllapi.h>
 #include <rtl/ref.hxx>
 
-
 class SvxRubyDialog;
-class RubyPreview final : public vcl::Window
+class RubyPreview final : public weld::CustomWidgetController
 {
     virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) override;
-    VclPtr<SvxRubyDialog> m_pParentDlg;
+    SvxRubyDialog* m_pParentDlg;
 
 public:
-    RubyPreview(vcl::Window *pParent);
+    RubyPreview();
     virtual ~RubyPreview() override;
-    virtual void dispose() override;
     void setRubyDialog(SvxRubyDialog* pParentDlg)
     {
         m_pParentDlg = pParentDlg;
     }
-    virtual Size GetOptimalSize() const override;
+    virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
 };
 
 class SVX_DLLPUBLIC SvxRubyChildWindow : public SfxChildWindow
 {
- public:
-
+public:
     SvxRubyChildWindow( vcl::Window*, sal_uInt16, SfxBindings*, SfxChildWinInfo const * );
-
     SFX_DECL_CHILDWINDOW( SvxRubyChildWindow );
-
-};
-class SvxRubyData_Impl;
-class RubyEdit  : public Edit
-{
-    Link<sal_Int32,bool>  aScrollHdl;
-    Link<sal_Int32,void>  aJumpHdl;
-    virtual void        GetFocus() override;
-    virtual bool        PreNotify( NotifyEvent& rNEvt ) override;
-public:
-    RubyEdit(vcl::Window* pParent)
-        : Edit(pParent, WB_BORDER)
-    {
-    }
-    void    SetScrollHdl(Link<sal_Int32,bool> const & rLink) {aScrollHdl = rLink;}
-    void    SetJumpHdl(Link<sal_Int32,void> const & rLink) {aJumpHdl = rLink;}
 };
 
+class SvxRubyData_Impl;
 
-class SvxRubyDialog : public SfxModelessDialog
+class SvxRubyDialog : public SfxModelessDialogController
 {
     friend class RubyPreview;
 
-    VclPtr<FixedText>          m_pLeftFT;
-    VclPtr<FixedText>          m_pRightFT;
-    VclPtr<RubyEdit>           m_pLeft1ED;
-    VclPtr<RubyEdit>           m_pRight1ED;
-    VclPtr<RubyEdit>           m_pLeft2ED;
-    VclPtr<RubyEdit>           m_pRight2ED;
-    VclPtr<RubyEdit>           m_pLeft3ED;
-    VclPtr<RubyEdit>           m_pRight3ED;
-    VclPtr<RubyEdit>           m_pLeft4ED;
-    VclPtr<RubyEdit>           m_pRight4ED;
-
-    VclPtr<RubyEdit>           aEditArr[8];
-    VclPtr<VclScrolledWindow>  m_pScrolledWindow;
-    VclPtr<ScrollBar>          m_pScrollSB;
-
-    VclPtr<ListBox>            m_pAdjustLB;
-
-    VclPtr<ListBox>            m_pPositionLB;
-
-    VclPtr<FixedText>          m_pCharStyleFT;
-    VclPtr<ListBox>            m_pCharStyleLB;
-    VclPtr<PushButton>         m_pStylistPB;
-
-    VclPtr<RubyPreview>        m_pPreviewWin;
-
-    VclPtr<PushButton>         m_pApplyPB;
-    VclPtr<PushButton>         m_pClosePB;
 
     long                nLastPos;
     long                nCurrentEdit;
-
     bool                bModified;
-
     SfxBindings*        pBindings;
-
-    DECL_LINK(ApplyHdl_Impl, Button*, void);
-    DECL_LINK(CloseHdl_Impl, Button*, void);
-    DECL_LINK(StylistHdl_Impl, Button*, void);
-    DECL_LINK(ScrollHdl_Impl, ScrollBar*, void);
-    DECL_LINK(PositionHdl_Impl, ListBox&, void);
-    DECL_LINK(AdjustHdl_Impl, ListBox&, void);
-    DECL_LINK(CharStyleHdl_Impl, ListBox&, void);
-    DECL_LINK(EditModifyHdl_Impl, Edit&, void);
-    DECL_LINK(EditScrollHdl_Impl, sal_Int32, bool);
-    DECL_LINK(EditJumpHdl_Impl, sal_Int32, void);
-
-    void                SetRubyText(sal_Int32 nPos, Edit& rLeft, Edit& rRight);
+    rtl::Reference<SvxRubyData_Impl> m_pImpl;
+    weld::Entry* aEditArr[8];
+
+    std::unique_ptr<weld::Label> m_xLeftFT;
+    std::unique_ptr<weld::Label> m_xRightFT;
+    std::unique_ptr<weld::Entry> m_xLeft1ED;
+    std::unique_ptr<weld::Entry> m_xRight1ED;
+    std::unique_ptr<weld::Entry> m_xLeft2ED;
+    std::unique_ptr<weld::Entry> m_xRight2ED;
+    std::unique_ptr<weld::Entry> m_xLeft3ED;
+    std::unique_ptr<weld::Entry> m_xRight3ED;
+    std::unique_ptr<weld::Entry> m_xLeft4ED;
+    std::unique_ptr<weld::Entry> m_xRight4ED;
+
+    std::unique_ptr<weld::ScrolledWindow> m_xScrolledWindow;
+
+    std::unique_ptr<weld::ComboBox> m_xAdjustLB;
+
+    std::unique_ptr<weld::ComboBox> m_xPositionLB;
+
+    std::unique_ptr<weld::Label> m_xCharStyleFT;
+    std::unique_ptr<weld::ComboBox> m_xCharStyleLB;
+    std::unique_ptr<weld::Button> m_xStylistPB;
+
+    std::unique_ptr<weld::Button> m_xApplyPB;
+    std::unique_ptr<weld::Button> m_xClosePB;
+
+    std::unique_ptr<weld::Container> m_xContentArea;
+    std::unique_ptr<weld::Widget> m_xGrid;
+
+    std::unique_ptr<RubyPreview> m_xPreviewWin;
+    std::unique_ptr<weld::CustomWeld> m_xPreview;
+
+    DECL_LINK(ApplyHdl_Impl, weld::Button&, void);
+    DECL_LINK(CloseHdl_Impl, weld::Button&, void);
+    DECL_LINK(StylistHdl_Impl, weld::Button&, void);
+    DECL_LINK(ScrollHdl_Impl, weld::ScrolledWindow&, void);
+    DECL_LINK(PositionHdl_Impl, weld::ComboBox&, void);
+    DECL_LINK(AdjustHdl_Impl, weld::ComboBox&, void);
+    DECL_LINK(CharStyleHdl_Impl, weld::ComboBox&, void);
+    DECL_LINK(EditModifyHdl_Impl, weld::Entry&, void);
+    DECL_LINK(EditFocusHdl_Impl, weld::Widget&, void);
+    DECL_LINK(KeyUpDownHdl_Impl, const KeyEvent&, bool);
+    DECL_LINK(KeyUpDownTabHdl_Impl, const KeyEvent&, bool);
+
+    bool EditScrollHdl_Impl(sal_Int32 nParam);
+    bool EditJumpHdl_Impl(sal_Int32 nParam);
+
+    void                SetRubyText(sal_Int32 nPos, weld::Entry& rLeft, weld::Entry& rRight);
     void                GetRubyText();
     void                ClearCharStyleList();
     void                AssertOneEntry();
 
     void                Update();
-    virtual bool        Close() override;
+    virtual void        Close() override;
 
     long                GetLastPos() const {return nLastPos;}
     void                SetLastPos(long nSet) {nLastPos = nSet;}
@@ -144,21 +127,11 @@ class SvxRubyDialog : public SfxModelessDialog
 
     void                GetCurrentText(OUString& rBase, OUString& rRuby);
 
-    void                UpdateColors();
-
-protected:
-    virtual void        DataChanged( const DataChangedEvent& rDCEvt ) override;
-
 public:
-                        SvxRubyDialog(SfxBindings *pBindings, SfxChildWindow *pCW,
-                                    vcl::Window* pParent);
-    virtual             ~SvxRubyDialog() override;
-    virtual void        dispose() override;
+    SvxRubyDialog(SfxBindings *pBindings, SfxChildWindow *pCW, weld::Window* pParent);
+    virtual ~SvxRubyDialog() override;
 
     virtual void        Activate() override;
-
-private:
-    rtl::Reference<SvxRubyData_Impl> m_pImpl;
 };
 
 #endif // INCLUDED_SVX_RUBYDIALOG_HXX
diff --git a/include/svx/srchdlg.hxx b/include/svx/srchdlg.hxx
index d84a626e213f..e3aa76890a40 100644
--- a/include/svx/srchdlg.hxx
+++ b/include/svx/srchdlg.hxx
@@ -120,7 +120,6 @@ public:
     SvxSearchDialog(weld::Window* pParent, SfxChildWindow* pChildWin, SfxBindings& rBind );
     virtual ~SvxSearchDialog() override;
 
-    virtual void    EndDialog() override;
     virtual void    ChildWinDispose() override;
     virtual void    Close() override;
 
@@ -143,7 +142,6 @@ public:
 
 private:
     bool            mbSuccess;
-    bool            mbClosing;
 
     SfxBindings&    rBindings;
     bool            bWriter;
diff --git a/sfx2/source/dialog/basedlgs.cxx b/sfx2/source/dialog/basedlgs.cxx
index ce416ad935e4..aed00aa2042a 100644
--- a/sfx2/source/dialog/basedlgs.cxx
+++ b/sfx2/source/dialog/basedlgs.cxx
@@ -469,6 +469,11 @@ void SfxDialogController::EndDialog()
     response(RET_CLOSE);
 }
 
+bool SfxModelessDialogController::IsClosing() const
+{
+    return m_xImpl->bClosing;
+}
+
 void SfxModelessDialogController::EndDialog()
 {
     m_xImpl->bClosing = true;
diff --git a/solenv/bin/native-code.py b/solenv/bin/native-code.py
index 1848e68dcbdb..9661d4d0f44a 100755
--- a/solenv/bin/native-code.py
+++ b/solenv/bin/native-code.py
@@ -466,8 +466,6 @@ custom_widgets = [
     'RefEdit',
     'ReplaceEdit',
     'RowEdit',
-    'RubyEdit',
-    'RubyPreview',
     'SameContentListBox',
     'ScCondFormatList',
     'ScCsvTableBox',
diff --git a/solenv/sanitizers/ui/svx.suppr b/solenv/sanitizers/ui/svx.suppr
index 333fa3ff4c68..0dab6bddde36 100644
--- a/solenv/sanitizers/ui/svx.suppr
+++ b/solenv/sanitizers/ui/svx.suppr
@@ -3,8 +3,8 @@ svx/uiconfig/ui/addmodeldialog.ui://GtkLabel[@id='alttitle'] orphan-label
 svx/uiconfig/ui/addnamespacedialog.ui://GtkLabel[@id='alttitle'] orphan-label
 svx/uiconfig/ui/asianphoneticguidedialog.ui://GtkLabel[@id='basetextft'] orphan-label
 svx/uiconfig/ui/asianphoneticguidedialog.ui://GtkLabel[@id='rubytextft'] orphan-label
-svx/uiconfig/ui/asianphoneticguidedialog.ui://svxlo-RubyEdit[@id='Left1ED'] no-labelled-by
-svx/uiconfig/ui/asianphoneticguidedialog.ui://svxlo-RubyEdit[@id='Right1ED'] no-labelled-by
+svx/uiconfig/ui/asianphoneticguidedialog.ui://GtkEntry[@id='Left1ED'] no-labelled-by
+svx/uiconfig/ui/asianphoneticguidedialog.ui://GtkEntry[@id='Right1ED'] no-labelled-by
 svx/uiconfig/ui/chinesedictionary.ui://GtkLabel[@id='termft'] orphan-label
 svx/uiconfig/ui/chinesedictionary.ui://GtkEntry[@id='term'] no-labelled-by
 svx/uiconfig/ui/chinesedictionary.ui://GtkLabel[@id='mappingft'] orphan-label
diff --git a/svx/source/dialog/rubydialog.cxx b/svx/source/dialog/rubydialog.cxx
index d2d681334cc1..674c7169b237 100644
--- a/svx/source/dialog/rubydialog.cxx
+++ b/svx/source/dialog/rubydialog.cxx
@@ -1,4 +1,3 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
 /*
  * This file is part of the LibreOffice project.
  *
@@ -27,6 +26,7 @@
 #include <sfx2/app.hxx>
 #include <sfx2/dispatch.hxx>
 #include <sfx2/viewfrm.hxx>
+#include <sfx2/viewsh.hxx>
 #include <svl/eitem.hxx>
 #include <com/sun/star/frame/XController.hpp>
 #include <com/sun/star/style/XStyle.hpp>
@@ -70,13 +70,9 @@ static const sal_Char cRubyCharStyleName[] = "RubyCharStyleName";
 SvxRubyChildWindow::SvxRubyChildWindow(vcl::Window* _pParent, sal_uInt16 nId,SfxBindings* pBindings, SfxChildWinInfo const * pInfo)
     : SfxChildWindow(_pParent, nId)
 {
-    VclPtr<SvxRubyDialog> pDlg = VclPtr<SvxRubyDialog>::Create(pBindings, this, _pParent);
-    SetWindow(pDlg);
-
-    if (pInfo->nFlags & SfxChildWindowFlags::ZOOMIN)
-        pDlg->RollUp();
-
-    pDlg->Initialize(pInfo);
+    std::shared_ptr<SvxRubyDialog> xDlg(new SvxRubyDialog(pBindings, this, _pParent->GetFrameWeld()));
+    SetController(xDlg);
+    xDlg->Initialize(pInfo);
 }
 
 SfxChildWinInfo SvxRubyChildWindow::GetInfo() const
@@ -200,123 +196,97 @@ void SvxRubyData_Impl::AssertOneEntry()
     }
 }
 
-SvxRubyDialog::SvxRubyDialog(SfxBindings* pBind, SfxChildWindow* pCW, vcl::Window* _pParent)
-    : SfxModelessDialog(pBind, pCW, _pParent, "AsianPhoneticGuideDialog", "svx/ui/asianphoneticguidedialog.ui")
+SvxRubyDialog::SvxRubyDialog(SfxBindings* pBind, SfxChildWindow* pCW, weld::Window* pParent)
+    : SfxModelessDialogController(pBind, pCW, pParent,
+                        "svx/ui/asianphoneticguidedialog.ui", "AsianPhoneticGuideDialog")
     , nLastPos(0)
     , nCurrentEdit(0)
     , bModified(false)
     , pBindings(pBind)
     , m_pImpl( new SvxRubyData_Impl )
-{
-    get(m_pLeftFT, "basetextft");
-    get(m_pRightFT, "rubytextft");
-    get(m_pAdjustLB, "adjustlb");
-    get(m_pPositionLB, "positionlb");
-    get(m_pCharStyleFT, "styleft");
-    get(m_pCharStyleLB, "stylelb");
-    m_pCharStyleLB->SetStyle(m_pCharStyleLB->GetStyle() | WB_SORT);
-    get(m_pStylistPB, "styles");
-    get(m_pApplyPB, "apply");
-    get(m_pClosePB, "close");
-    get(m_pPreviewWin, "preview");
-    m_pPreviewWin->setRubyDialog(this);
-    get(m_pScrolledWindow, "scrolledwindow");
-    m_pScrolledWindow->setUserManagedScrolling(true);
-    m_pScrollSB = &m_pScrolledWindow->getVertScrollBar();
-    get(m_pLeft1ED, "Left1ED");
-    get(m_pRight1ED, "Right1ED");
-    get(m_pLeft2ED, "Left2ED");
-    get(m_pRight2ED, "Right2ED");
-    get(m_pLeft3ED, "Left3ED");
-    get(m_pRight3ED, "Right3ED");
-    get(m_pLeft4ED, "Left4ED");
-    get(m_pRight4ED, "Right4ED");
-    aEditArr[0] = m_pLeft1ED; aEditArr[1] = m_pRight1ED;
-    aEditArr[2] = m_pLeft2ED; aEditArr[3] = m_pRight2ED;
-    aEditArr[4] = m_pLeft3ED; aEditArr[5] = m_pRight3ED;
-    aEditArr[6] = m_pLeft4ED; aEditArr[7] = m_pRight4ED;
-
-    m_pApplyPB->SetClickHdl(LINK(this, SvxRubyDialog, ApplyHdl_Impl));
-    m_pClosePB->SetClickHdl(LINK(this, SvxRubyDialog, CloseHdl_Impl));
-    m_pStylistPB->SetClickHdl(LINK(this, SvxRubyDialog, StylistHdl_Impl));
-    m_pAdjustLB->SetSelectHdl(LINK(this, SvxRubyDialog, AdjustHdl_Impl));
-    m_pPositionLB->SetSelectHdl(LINK(this, SvxRubyDialog, PositionHdl_Impl));
-    m_pCharStyleLB->SetSelectHdl(LINK(this, SvxRubyDialog, CharStyleHdl_Impl));
-
-    Link<ScrollBar*,void> aScrLk(LINK(this, SvxRubyDialog, ScrollHdl_Impl));
-    m_pScrollSB->SetScrollHdl(aScrLk);
-    m_pScrollSB->SetEndScrollHdl(aScrLk);
-
-    Link<Edit&,void> aEditLk(LINK(this, SvxRubyDialog, EditModifyHdl_Impl));
-    Link<sal_Int32,bool> aScrollLk(LINK(this, SvxRubyDialog, EditScrollHdl_Impl));
-    Link<sal_Int32,void> aJumpLk(LINK(this, SvxRubyDialog, EditJumpHdl_Impl));
+    , m_xLeftFT(m_xBuilder->weld_label("basetextft"))
+    , m_xRightFT(m_xBuilder->weld_label("rubytextft"))
+    , m_xLeft1ED(m_xBuilder->weld_entry("Left1ED"))
+    , m_xRight1ED(m_xBuilder->weld_entry("Right1ED"))
+    , m_xLeft2ED(m_xBuilder->weld_entry("Left2ED"))
+    , m_xRight2ED(m_xBuilder->weld_entry("Right2ED"))
+    , m_xLeft3ED(m_xBuilder->weld_entry("Left3ED"))
+    , m_xRight3ED(m_xBuilder->weld_entry("Right3ED"))
+    , m_xLeft4ED(m_xBuilder->weld_entry("Left4ED"))
+    , m_xRight4ED(m_xBuilder->weld_entry("Right4ED"))
+    , m_xScrolledWindow(m_xBuilder->weld_scrolled_window("scrolledwindow"))
+    , m_xAdjustLB(m_xBuilder->weld_combo_box("adjustlb"))
+    , m_xPositionLB(m_xBuilder->weld_combo_box("positionlb"))
+    , m_xCharStyleFT(m_xBuilder->weld_label("styleft"))
+    , m_xCharStyleLB(m_xBuilder->weld_combo_box("stylelb"))
+    , m_xStylistPB(m_xBuilder->weld_button("styles"))
+    , m_xApplyPB(m_xBuilder->weld_button("ok"))
+    , m_xClosePB(m_xBuilder->weld_button("cancel"))
+    , m_xContentArea(m_xDialog->weld_content_area())
+    , m_xGrid(m_xBuilder->weld_widget("grid"))
+    , m_xPreviewWin(new RubyPreview)
+    , m_xPreview(new weld::CustomWeld(*m_xBuilder, "preview", *m_xPreviewWin))
+{
+    m_xCharStyleLB->make_sorted();
+    m_xPreviewWin->setRubyDialog(this);
+    m_xScrolledWindow->set_user_managed_scrolling();
+    m_xScrolledWindow->set_size_request(-1, m_xGrid->get_preferred_size().Height());
+    m_xScrolledWindow->set_vpolicy(VclPolicyType::NEVER);
+
+    aEditArr[0] = m_xLeft1ED.get(); aEditArr[1] = m_xRight1ED.get();
+    aEditArr[2] = m_xLeft2ED.get(); aEditArr[3] = m_xRight2ED.get();
+    aEditArr[4] = m_xLeft3ED.get(); aEditArr[5] = m_xRight3ED.get();
+    aEditArr[6] = m_xLeft4ED.get(); aEditArr[7] = m_xRight4ED.get();
+
+    m_xApplyPB->connect_clicked(LINK(this, SvxRubyDialog, ApplyHdl_Impl));
+    m_xClosePB->connect_clicked(LINK(this, SvxRubyDialog, CloseHdl_Impl));
+    m_xStylistPB->connect_clicked(LINK(this, SvxRubyDialog, StylistHdl_Impl));
+    m_xAdjustLB->connect_changed(LINK(this, SvxRubyDialog, AdjustHdl_Impl));
+    m_xPositionLB->connect_changed(LINK(this, SvxRubyDialog, PositionHdl_Impl));
+    m_xCharStyleLB->connect_changed(LINK(this, SvxRubyDialog, CharStyleHdl_Impl));
+
+    Link<weld::ScrolledWindow&, void> aScrLk(LINK(this, SvxRubyDialog, ScrollHdl_Impl));
+    m_xScrolledWindow->connect_vadjustment_changed(aScrLk);
+
+    Link<weld::Entry&,void> aEditLk(LINK(this, SvxRubyDialog, EditModifyHdl_Impl));
+    Link<weld::Widget&,void> aFocusLk(LINK(this, SvxRubyDialog, EditFocusHdl_Impl));
+    Link<const KeyEvent&,bool> aKeyUpDownLk(LINK(this, SvxRubyDialog, KeyUpDownHdl_Impl));
+    Link<const KeyEvent&,bool> aKeyTabUpDownLk(LINK(this, SvxRubyDialog, KeyUpDownTabHdl_Impl));
     for (sal_uInt16 i = 0; i < 8; i++)
     {
-        aEditArr[i]->SetModifyHdl(aEditLk);
-        aEditArr[i]->SetJumpHdl(aJumpLk);
+        aEditArr[i]->connect_changed(aEditLk);
+        aEditArr[i]->connect_focus_in(aFocusLk);
         if (!i || 7 == i)
-            aEditArr[i]->SetScrollHdl(aScrollLk);
+            aEditArr[i]->connect_key_press(aKeyTabUpDownLk);
+        else
+            aEditArr[i]->connect_key_press(aKeyUpDownLk);
     }
-
-    UpdateColors();
 }
 
 SvxRubyDialog::~SvxRubyDialog()
 {
-    disposeOnce();
-}
-
-void SvxRubyDialog::dispose()
-{
     ClearCharStyleList();
     EventObject aEvent;
     m_pImpl->disposing(aEvent);
-    m_pLeftFT.clear();
-    m_pRightFT.clear();
-    m_pLeft1ED.clear();
-    m_pRight1ED.clear();
-    m_pLeft2ED.clear();
-    m_pRight2ED.clear();
-    m_pLeft3ED.clear();
-    m_pRight3ED.clear();
-    m_pLeft4ED.clear();
-    m_pRight4ED.clear();
-    for (int i = 0; i < 7; i++)
-        aEditArr[i].clear();
-    m_pScrolledWindow.clear();
-    m_pScrollSB.clear();
-    m_pAdjustLB.clear();
-    m_pPositionLB.clear();
-    m_pCharStyleFT.clear();
-    m_pCharStyleLB.clear();
-    m_pStylistPB.clear();
-    m_pPreviewWin.clear();
-    m_pApplyPB.clear();
-    m_pClosePB.clear();
-    SfxModelessDialog::dispose();
 }
 
 void SvxRubyDialog::ClearCharStyleList()
 {
-    for (sal_Int32 i = 0; i < m_pCharStyleLB->GetEntryCount(); i++)
-    {
-        void* pData = m_pCharStyleLB->GetEntryData(i);
-        delete static_cast<OUString*>(pData);
-    }
-    m_pCharStyleLB->Clear();
+    m_xCharStyleLB->clear();
 }
 
-bool SvxRubyDialog::Close()
+void SvxRubyDialog::Close()
 {
-    pBindings->GetDispatcher()->Execute( SID_RUBY_DIALOG,
-                              SfxCallMode::ASYNCHRON |
-                              SfxCallMode::RECORD);
-    return true;
+    if (IsClosing())
+        return;
+    SfxViewShell* pViewShell = SfxViewShell::Current();
+    if (pViewShell)
+        pViewShell->GetViewFrame()->ToggleChildWindow(SID_RUBY_DIALOG);
 }
 
 void SvxRubyDialog::Activate()
 {
-    SfxModelessDialog::Activate();
+    SfxModelessDialogController::Activate();
     std::unique_ptr<SfxPoolItem> pState;
     //get selection from current view frame
     SfxViewFrame* pCurFrm = SfxViewFrame::Current();
@@ -331,7 +301,7 @@ void SvxRubyDialog::Activate()
         if (xRubySel.is())
         {
             Reference< XModel > xModel = m_pImpl->GetModel();
-            const OUString sCharStyleSelect = m_pCharStyleLB->GetSelectedEntry();
+            const OUString sCharStyleSelect = m_xCharStyleLB->get_active_text();
             ClearCharStyleList();
             Reference<XStyleFamiliesSupplier> xSupplier(xModel, UNO_QUERY);
             if (xSupplier.is())
@@ -370,8 +340,7 @@ void SvxRubyDialog::Activate()
                             }
                             if (!sName.isEmpty())
                             {
-                                const sal_Int32 nPos = m_pCharStyleLB->InsertEntry(sName);
-                                m_pCharStyleLB->SetEntryData( nPos, new OUString(sCoreName) );
+                                m_xCharStyleLB->append(sCoreName, sName);
 
                             }
                         }
@@ -381,18 +350,18 @@ void SvxRubyDialog::Activate()
                 {
                     OSL_FAIL("exception in style access");
                 }
-                if(!sCharStyleSelect.isEmpty())
-                    m_pCharStyleLB->SelectEntry(sCharStyleSelect);
+                if (!sCharStyleSelect.isEmpty())
+                    m_xCharStyleLB->set_active_text(sCharStyleSelect);
             }
-            m_pCharStyleLB->Enable(xSupplier.is());
-            m_pCharStyleFT->Enable(xSupplier.is());
+            m_xCharStyleLB->set_sensitive(xSupplier.is());
+            m_xCharStyleFT->set_sensitive(xSupplier.is());
         }
         Update();
-        m_pPreviewWin->Invalidate();
+        m_xPreviewWin->Invalidate();
     }
 }
 
-void SvxRubyDialog::SetRubyText(sal_Int32 nPos, Edit& rLeft, Edit& rRight)
+void SvxRubyDialog::SetRubyText(sal_Int32 nPos, weld::Entry& rLeft, weld::Entry& rRight)
 {
     OUString sLeft, sRight;
     const Sequence<PropertyValues>& aRubyValues = m_pImpl->GetRubyValues();
@@ -413,12 +382,12 @@ void SvxRubyDialog::SetRubyText(sal_Int32 nPos, Edit& rLeft, Edit& rRight)
     {
         bEnable = true;
     }
-    rLeft.Enable(bEnable);
-    rRight.Enable(bEnable);
-    rLeft.SetText(sLeft);
-    rRight.SetText(sRight);
-    rLeft.SaveValue();
-    rRight.SaveValue();
+    rLeft.set_sensitive(bEnable);
+    rRight.set_sensitive(bEnable);
+    rLeft.set_text(sLeft);
+    rRight.set_text(sRight);
+    rLeft.save_value();
+    rRight.save_value();
 }
 
 void SvxRubyDialog::GetRubyText()
@@ -426,8 +395,9 @@ void SvxRubyDialog::GetRubyText()
     long nTempLastPos = GetLastPos();
     for (int i = 0; i < 8; i+=2)
     {
-        if (aEditArr[i]->IsEnabled() &&
-            (aEditArr[i]->IsValueChangedFromSaved() || aEditArr[i + 1]->IsValueChangedFromSaved()))
+        if (aEditArr[i]->get_sensitive() &&
+            (aEditArr[i]->get_value_changed_from_saved() ||
+             aEditArr[i + 1]->get_value_changed_from_saved()))
         {
             Sequence<PropertyValues>& aRubyValues = m_pImpl->GetRubyValues();
             DBG_ASSERT(aRubyValues.getLength() > (i / 2 + nTempLastPos), "wrong index" );
@@ -436,9 +406,9 @@ void SvxRubyDialog::GetRubyText()
             for (PropertyValue & propVal : rProps)
             {
                 if (propVal.Name == cRubyBaseText)
-                    propVal.Value <<= aEditArr[i]->GetText();
+                    propVal.Value <<= aEditArr[i]->get_text();
                 else if (propVal.Name == cRubyText)
-                    propVal.Value <<= aEditArr[i + 1]->GetText();
+                    propVal.Value <<= aEditArr[i + 1]->get_text();
             }
         }
     }
@@ -448,9 +418,11 @@ void SvxRubyDialog::Update()
 {
     const Sequence<PropertyValues>& aRubyValues = m_pImpl->GetRubyValues();
     sal_Int32 nLen = aRubyValues.getLength();
-    m_pScrollSB->Enable(nLen > 4);
-    m_pScrollSB->SetRange( Range(0, nLen > 4 ? nLen - 4 : 0));
-    m_pScrollSB->SetThumbPos(0);
+    m_xScrolledWindow->vadjustment_configure(0, 0, !nLen ? 1 : nLen, 1, 4, 4);
+    if (nLen > 4)
+        m_xScrolledWindow->set_vpolicy(VclPolicyType::ALWAYS);
+    else
+        m_xScrolledWindow->set_vpolicy(VclPolicyType::NEVER);
     SetLastPos(0);
     SetModified(false);
 
@@ -499,65 +471,65 @@ void SvxRubyDialog::Update()
         nPosition = 0;
     }
     if (nAdjust > -1)
-        m_pAdjustLB->SelectEntryPos(nAdjust);
+        m_xAdjustLB->set_active(nAdjust);
     else
-        m_pAdjustLB->SetNoSelection();
+        m_xAdjustLB->set_active(-1);
     if (nPosition > -1)
-        m_pPositionLB->SelectEntryPos(nPosition);
+        m_xPositionLB->set_active(nPosition);
     if (!nLen || (bCharStyleEqual && sCharStyleName.isEmpty()))
         sCharStyleName = "Rubies";
     if (!sCharStyleName.isEmpty())
     {
-        for (sal_Int32 i = 0; i < m_pCharStyleLB->GetEntryCount(); i++)
+        for (int i = 0, nEntryCount = m_xCharStyleLB->get_count(); i < nEntryCount; i++)
         {
-            const OUString* pCoreName = static_cast<const OUString*>(m_pCharStyleLB->GetEntryData(i));
-            if (pCoreName && sCharStyleName == *pCoreName)
+            OUString sCoreName = m_xCharStyleLB->get_id(i);
+            if (sCharStyleName == sCoreName)
             {
-                m_pCharStyleLB->SelectEntryPos(i);
+                m_xCharStyleLB->set_active(i);
                 break;
             }
         }
     }
     else
-        m_pCharStyleLB->SetNoSelection();
+        m_xCharStyleLB->set_active(-1);
 
-    ScrollHdl_Impl(m_pScrollSB);
+    ScrollHdl_Impl(*m_xScrolledWindow);
 }
 
 void SvxRubyDialog::GetCurrentText(OUString& rBase, OUString& rRuby)
 {
-    rBase = aEditArr[nCurrentEdit * 2]->GetText();
-    rRuby = aEditArr[nCurrentEdit * 2 + 1]->GetText();
+    rBase = aEditArr[nCurrentEdit * 2]->get_text();
+    rRuby = aEditArr[nCurrentEdit * 2 + 1]->get_text();
 }
 
-IMPL_LINK(SvxRubyDialog, ScrollHdl_Impl, ScrollBar*, pScroll, void)
+IMPL_LINK(SvxRubyDialog, ScrollHdl_Impl, weld::ScrolledWindow&, rScroll, void)
 {
-    long nPos = pScroll->GetThumbPos();
+    int nPos = rScroll.vadjustment_get_value();
     if (GetLastPos() != nPos)
     {
         GetRubyText();
     }
-    SetRubyText(nPos++, *m_pLeft1ED, *m_pRight1ED);
-    SetRubyText(nPos++, *m_pLeft2ED, *m_pRight2ED);
-    SetRubyText(nPos++, *m_pLeft3ED, *m_pRight3ED);
-    SetRubyText(nPos, *m_pLeft4ED, *m_pRight4ED);
+    SetRubyText(nPos++, *m_xLeft1ED, *m_xRight1ED);
+    SetRubyText(nPos++, *m_xLeft2ED, *m_xRight2ED);
+    SetRubyText(nPos++, *m_xLeft3ED, *m_xRight3ED);
+    SetRubyText(nPos, *m_xLeft4ED, *m_xRight4ED);
     SetLastPos(nPos - 3);
-    m_pPreviewWin->Invalidate();
+    m_xPreviewWin->Invalidate();
 }
 
-IMPL_LINK_NOARG(SvxRubyDialog, ApplyHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SvxRubyDialog, ApplyHdl_Impl, weld::Button&, void)
 {
     const Sequence<PropertyValues>& aRubyValues = m_pImpl->GetRubyValues();
     if (!aRubyValues.getLength())
     {
         AssertOneEntry();
-        PositionHdl_Impl(*m_pPositionLB);
-        AdjustHdl_Impl(*m_pAdjustLB);
-        CharStyleHdl_Impl(*m_pCharStyleLB);
+        PositionHdl_Impl(*m_xPositionLB);
+        AdjustHdl_Impl(*m_xAdjustLB);
+        CharStyleHdl_Impl(*m_xCharStyleLB);
     }
     GetRubyText();
     //reset all edit fields - SaveValue is called
-    ScrollHdl_Impl(m_pScrollSB);
+    ScrollHdl_Impl(*m_xScrolledWindow);
 
     Reference<XRubySelection> xSelection = m_pImpl->GetRubySelection();
     if (IsModified() && xSelection.is())
@@ -573,12 +545,12 @@ IMPL_LINK_NOARG(SvxRubyDialog, ApplyHdl_Impl, Button*, void)
     }
 }
 
-IMPL_LINK_NOARG(SvxRubyDialog, CloseHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SvxRubyDialog, CloseHdl_Impl, weld::Button&, void)
 {
     Close();
 }
 
-IMPL_LINK_NOARG(SvxRubyDialog, StylistHdl_Impl, Button*, void)
+IMPL_LINK_NOARG(SvxRubyDialog, StylistHdl_Impl, weld::Button&, void)
 {
     std::unique_ptr<SfxPoolItem> pState;
     SfxItemState eState = pBindings->QueryState(SID_STYLE_DESIGNER, pState);
@@ -589,10 +561,10 @@ IMPL_LINK_NOARG(SvxRubyDialog, StylistHdl_Impl, Button*, void)
     }
 }
 
-IMPL_LINK(SvxRubyDialog, AdjustHdl_Impl, ListBox&, rBox, void)
+IMPL_LINK(SvxRubyDialog, AdjustHdl_Impl, weld::ComboBox&, rBox, void)
 {
     AssertOneEntry();
-    sal_Int16 nAdjust = rBox.GetSelectedEntryPos();
+    sal_Int16 nAdjust = rBox.get_active();
     Sequence<PropertyValues>& aRubyValues = m_pImpl->GetRubyValues();
     for (PropertyValues & rProps : aRubyValues)
     {
@@ -603,13 +575,13 @@ IMPL_LINK(SvxRubyDialog, AdjustHdl_Impl, ListBox&, rBox, void)
         }
         SetModified(true);
     }
-    m_pPreviewWin->Invalidate();
+    m_xPreviewWin->Invalidate();
 }
 
-IMPL_LINK(SvxRubyDialog, PositionHdl_Impl, ListBox&, rBox, void)
+IMPL_LINK(SvxRubyDialog, PositionHdl_Impl, weld::ComboBox&, rBox, void)
 {
     AssertOneEntry();
-    sal_Int16 nPosition = rBox.GetSelectedEntryPos();
+    sal_Int16 nPosition = rBox.get_active();
     Sequence<PropertyValues>& aRubyValues = m_pImpl->GetRubyValues();
     for (PropertyValues & rProps : aRubyValues)
     {
@@ -620,15 +592,15 @@ IMPL_LINK(SvxRubyDialog, PositionHdl_Impl, ListBox&, rBox, void)
         }
         SetModified(true);
     }
-    m_pPreviewWin->Invalidate();
+    m_xPreviewWin->Invalidate();
 }
 
-IMPL_LINK_NOARG(SvxRubyDialog, CharStyleHdl_Impl, ListBox&, void)
+IMPL_LINK_NOARG(SvxRubyDialog, CharStyleHdl_Impl, weld::ComboBox&, void)
 {
     AssertOneEntry();
     OUString sStyleName;
-    if (LISTBOX_ENTRY_NOTFOUND != m_pCharStyleLB->GetSelectedEntryPos())
-        sStyleName = *static_cast<OUString*>(m_pCharStyleLB->GetSelectedEntryData());
+    if (m_xCharStyleLB->get_active() != -1)
+        sStyleName = m_xCharStyleLB->get_active_id();
     Sequence<PropertyValues>& aRubyValues = m_pImpl->GetRubyValues();
     for (PropertyValues & rProps : aRubyValues)
     {
@@ -643,7 +615,7 @@ IMPL_LINK_NOARG(SvxRubyDialog, CharStyleHdl_Impl, ListBox&, void)
     }
 }
 
-IMPL_LINK(SvxRubyDialog, EditModifyHdl_Impl, Edit&, rEdit, void)
+IMPL_LINK(SvxRubyDialog, EditFocusHdl_Impl, weld::Widget&, rEdit, void)
 {
     for (sal_uInt16 i = 0; i < 8; i++)
     {
@@ -653,43 +625,47 @@ IMPL_LINK(SvxRubyDialog, EditModifyHdl_Impl, Edit&, rEdit, void)
             break;
         }
     }
-    m_pPreviewWin->Invalidate();
+    m_xPreviewWin->Invalidate();
 }
 
-IMPL_LINK(SvxRubyDialog, EditScrollHdl_Impl, sal_Int32, nParam, bool)
+IMPL_LINK(SvxRubyDialog, EditModifyHdl_Impl, weld::Entry&, rEdit, void)
+{
+    EditFocusHdl_Impl(rEdit);
+}
+
+bool SvxRubyDialog::EditScrollHdl_Impl(sal_Int32 nParam)
 {
     bool bRet = false;
-    if (m_pScrollSB->IsEnabled())
+    //scroll forward
+    if (nParam > 0 && (aEditArr[7]->has_focus() || aEditArr[6]->has_focus() ))
     {
-        //scroll forward
-        if (nParam > 0 && (aEditArr[7]->HasFocus() || aEditArr[6]->HasFocus() ))
-        {
-            if (m_pScrollSB->GetRangeMax() > m_pScrollSB->GetThumbPos())
-            {
-                m_pScrollSB->SetThumbPos(m_pScrollSB->GetThumbPos() + 1);
-                aEditArr[6]->GrabFocus();
-                bRet = true;
-            }
-        }
-        //scroll backward
-        else if (m_pScrollSB->GetThumbPos() && (aEditArr[0]->HasFocus()||aEditArr[1]->HasFocus()) )
+        if (m_xScrolledWindow->vadjustment_get_upper() >
+            m_xScrolledWindow->vadjustment_get_value() + m_xScrolledWindow->vadjustment_get_page_size())
         {
-            m_pScrollSB->SetThumbPos(m_pScrollSB->GetThumbPos() - 1);
-            aEditArr[1]->GrabFocus();
+            m_xScrolledWindow->vadjustment_set_value(m_xScrolledWindow->vadjustment_get_value() + 1);
+            aEditArr[6]->grab_focus();
             bRet = true;
         }
-        if (bRet)
-            ScrollHdl_Impl(m_pScrollSB);
     }
+    //scroll backward
+    else if (m_xScrolledWindow->vadjustment_get_value() && (aEditArr[0]->has_focus()||aEditArr[1]->has_focus()) )
+    {
+        m_xScrolledWindow->vadjustment_set_value(m_xScrolledWindow->vadjustment_get_value() - 1);
+        aEditArr[1]->grab_focus();
+        bRet = true;
+    }
+    if (bRet)
+        ScrollHdl_Impl(*m_xScrolledWindow);
     return bRet;
 }
 
-IMPL_LINK(SvxRubyDialog, EditJumpHdl_Impl, sal_Int32, nParam, void)
+bool SvxRubyDialog::EditJumpHdl_Impl(sal_Int32 nParam)
 {
+    bool bHandled = false;
     sal_uInt16 nIndex = USHRT_MAX;
     for (sal_uInt16 i = 0; i < 8; i++)
     {
-        if(aEditArr[i]->HasFocus())
+        if(aEditArr[i]->has_focus())
             nIndex = i;
     }
     if (nIndex < 8)
@@ -697,94 +673,65 @@ IMPL_LINK(SvxRubyDialog, EditJumpHdl_Impl, sal_Int32, nParam, void)
         if (nParam > 0)
         {
             if (nIndex < 6)
-                aEditArr[nIndex + 2]->GrabFocus();
+                aEditArr[nIndex + 2]->grab_focus();
             else if( EditScrollHdl_Impl(nParam))
-                aEditArr[nIndex]->GrabFocus();
+                aEditArr[nIndex]->grab_focus();
         }
         else
         {
             if (nIndex > 1)
-                aEditArr[nIndex - 2]->GrabFocus();
+                aEditArr[nIndex - 2]->grab_focus();
             else if( EditScrollHdl_Impl(nParam))
-                aEditArr[nIndex]->GrabFocus();
+                aEditArr[nIndex]->grab_focus();
         }
+        bHandled = true;
     }
-};
+    return bHandled;
+}
 
 void SvxRubyDialog::AssertOneEntry()
 {
     m_pImpl->AssertOneEntry();
 }
 
-void SvxRubyDialog::UpdateColors()
-{
-    const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
-    svtools::ColorConfig aColorConfig;
-
-    vcl::Font aFont(m_pPreviewWin->GetFont());
-
-    Color aNewTextColor(aColorConfig.GetColorValue(svtools::FONTCOLOR).nColor);
-    Color aNewFillColor(rStyleSettings.GetWindowColor());
-
-    if (aNewFillColor != aFont.GetFillColor() || aNewTextColor != aFont.GetColor())
-    {
-        aFont.SetFillColor(aNewFillColor);
-        aFont.SetColor(aNewTextColor);
-        m_pPreviewWin->SetFont(aFont);
-    }
-}
-
-void SvxRubyDialog::DataChanged( const DataChangedEvent& rDCEvt )
-{
-    SfxModelessDialog::DataChanged( rDCEvt );
-
-    if ((rDCEvt.GetType() == DataChangedEventType::SETTINGS) && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE))
-    {
-        UpdateColors();
-    }
-}
-
 void SvxRubyDialog::EnableControls(bool bEnable)
 {
-    get_content_area()->Enable(bEnable);
-    m_pApplyPB->Enable(bEnable);
+    m_xContentArea->set_sensitive(bEnable);
+    m_xApplyPB->set_sensitive(bEnable);
 }
 
-RubyPreview::RubyPreview(vcl::Window *pParent)
-    : Window(pParent, WB_BORDER)
-    , m_pParentDlg(nullptr)
+RubyPreview::RubyPreview()
+    : m_pParentDlg(nullptr)
 {
-    SetBorderStyle(WindowBorderStyle::MONO);
 }
 
 RubyPreview::~RubyPreview()
 {
-    disposeOnce();
 }
 
-void RubyPreview::dispose()
-{
-    m_pParentDlg.clear();
-    vcl::Window::dispose();
-}
-
-VCL_BUILDER_FACTORY(RubyPreview)
-
 void RubyPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& /*rRect*/)
 {
-    rRenderContext.Push(PushFlags::MAPMODE);
+    rRenderContext.Push(PushFlags::ALL);
 
     rRenderContext.SetMapMode(MapMode(MapUnit::MapTwip));
 
     Size aWinSize = rRenderContext.GetOutputSize();
 
-    vcl::Font aSaveFont = rRenderContext.GetFont();
-    aSaveFont.SetFontHeight(aWinSize.Height() / 4);
-    rRenderContext.SetFont(aSaveFont);
+    const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
+    svtools::ColorConfig aColorConfig;
+
+    Color aNewTextColor(aColorConfig.GetColorValue(svtools::FONTCOLOR).nColor);
+    Color aNewFillColor(rStyleSettings.GetWindowColor());
+
+    vcl::Font aFont = rRenderContext.GetFont();
+    aFont.SetFontHeight(aWinSize.Height() / 4);
+    aFont.SetFillColor(aNewFillColor);
+    aFont.SetColor(aNewTextColor);
+    rRenderContext.SetFont(aFont);
 
     tools::Rectangle aRect(Point(0, 0), aWinSize);
     rRenderContext.SetLineColor();
-    rRenderContext.SetFillColor(aSaveFont.GetFillColor());
+    rRenderContext.SetFillColor(aFont.GetFillColor());
     rRenderContext.DrawRect(aRect);
 
     OUString sBaseText, sRubyText;
@@ -793,13 +740,13 @@ void RubyPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectang
     long nTextHeight = rRenderContext.GetTextHeight();
     long nBaseWidth = rRenderContext.GetTextWidth(sBaseText);
 
-    vcl::Font aRubyFont(aSaveFont);
+    vcl::Font aRubyFont(aFont);
     aRubyFont.SetFontHeight(aRubyFont.GetFontHeight() * 70 / 100);
     rRenderContext.SetFont(aRubyFont);
     long nRubyWidth = rRenderContext.GetTextWidth(sRubyText);
-    rRenderContext.SetFont(aSaveFont);
+    rRenderContext.SetFont(aFont);
 
-    RubyAdjust nAdjust = static_cast<RubyAdjust>(m_pParentDlg->m_pAdjustLB->GetSelectedEntryPos());
+    RubyAdjust nAdjust = static_cast<RubyAdjust>(m_pParentDlg->m_xAdjustLB->get_active());
     //use center if no adjustment is available
     if (nAdjust > RubyAdjust_INDENT_BLOCK)
         nAdjust = RubyAdjust_CENTER;
@@ -816,7 +763,7 @@ void RubyPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectang
     long nYRuby = aWinSize.Height() / 4 - nTextHeight / 2;
     long nYBase = aWinSize.Height() * 3 / 4 - nTextHeight / 2;
 
-    sal_Int16 nRubyPos = m_pParentDlg->m_pPositionLB->GetSelectedEntryPos();
+    sal_Int16 nRubyPos = m_pParentDlg->m_xPositionLB->get_active();
     if ( nRubyPos == 1 )    // BOTTOM
     {
         long nTmp = nYRuby;
@@ -860,7 +807,7 @@ void RubyPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectang
         nYOutput = nYBase;
         sOutputText = sBaseText;
         nOutTextWidth = nBaseWidth;
-        rRenderContext.SetFont(aSaveFont);
+        rRenderContext.SetFont(aFont);
     }
 
     switch (nAdjust)
@@ -873,7 +820,7 @@ void RubyPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectang
         break;
         case RubyAdjust_INDENT_BLOCK:
         {
-            long nCharWidth = GetTextWidth("X");
+            long nCharWidth = rRenderContext.GetTextWidth("X");
             if (nOutTextWidth < (nRightEnd - nLeftStart - nCharWidth))
             {
                 nCharWidth /= 2;
@@ -887,12 +834,12 @@ void RubyPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectang
             if (sOutputText.getLength() > 1)
             {
                 sal_Int32 nCount = sOutputText.getLength();
-                long nSpace = ((nRightEnd - nLeftStart) - GetTextWidth(sOutputText)) / (nCount - 1);
+                long nSpace = ((nRightEnd - nLeftStart) - rRenderContext.GetTextWidth(sOutputText)) / (nCount - 1);
                 for (sal_Int32 i = 0; i < nCount; i++)
                 {
                     OUString sChar(sOutputText[i]);
                     rRenderContext.DrawText(Point(nLeftStart , nYOutput),  sChar);
-                    long nCharWidth = GetTextWidth(sChar);
+                    long nCharWidth = rRenderContext.GetTextWidth(sChar);
                     nLeftStart += nCharWidth + nSpace;
                 }
                 break;
@@ -904,47 +851,44 @@ void RubyPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectang
         break;
         default: break;
     }
-    rRenderContext.SetFont(aSaveFont);
     rRenderContext.Pop();
 }
 
-Size RubyPreview::GetOptimalSize() const
+void RubyPreview::SetDrawingArea(weld::DrawingArea* pDrawingArea)
 {
-    return LogicToPixel(Size(215, 50), MapMode(MapUnit::MapAppFont));
+    pDrawingArea->set_size_request(pDrawingArea->get_approximate_digit_width() * 40,
+                                   pDrawingArea->get_text_height() * 7);
+    CustomWidgetController::SetDrawingArea(pDrawingArea);
 }
 
-void RubyEdit::GetFocus()
+IMPL_LINK(SvxRubyDialog, KeyUpDownHdl_Impl, const KeyEvent&, rKEvt, bool)
 {
-    GetModifyHdl().Call(*this);
-    Edit::GetFocus();
+    bool bHandled = false;
+    const vcl::KeyCode& rKeyCode = rKEvt.GetKeyCode();
+    sal_uInt16 nCode = rKeyCode.GetCode();
+    if (KEY_UP == nCode || KEY_DOWN == nCode)
+    {
+        sal_Int32 nParam = KEY_UP == nCode ? -1 : 1;
+        bHandled = EditJumpHdl_Impl(nParam);
+    }
+    return bHandled;
 }
 
-bool RubyEdit::PreNotify(NotifyEvent& rNEvt)
+IMPL_LINK(SvxRubyDialog, KeyUpDownTabHdl_Impl, const KeyEvent&, rKEvt, bool)
 {
     bool bHandled = false;
-    if (rNEvt.GetType() == MouseNotifyEvent::KEYINPUT)
+    const vcl::KeyCode& rKeyCode = rKEvt.GetKeyCode();
+    sal_uInt16 nMod = rKeyCode.GetModifier();
+    sal_uInt16 nCode = rKeyCode.GetCode();
+    if (nCode == KEY_TAB && (!nMod || KEY_SHIFT == nMod))
     {
-        const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
-        const vcl::KeyCode& rKeyCode = pKEvt->GetKeyCode();
-        sal_uInt16 nMod = rKeyCode.GetModifier();
-        sal_uInt16 nCode = rKeyCode.GetCode();
-        if (nCode == KEY_TAB && (!nMod || KEY_SHIFT == nMod))
-        {
-            sal_Int32 nParam = KEY_SHIFT == nMod ? -1 : 1;
-            if(aScrollHdl.IsSet() && aScrollHdl.Call(nParam))
-                bHandled = true;
-        }
-        else if (KEY_UP == nCode || KEY_DOWN == nCode)
-        {
-            sal_Int32 nParam = KEY_UP == nCode ? -1 : 1;
-            aJumpHdl.Call(nParam);
-        }
+        sal_Int32 nParam = KEY_SHIFT == nMod ? -1 : 1;
+        if (EditScrollHdl_Impl(nParam))
+            bHandled = true;
     }
     if (!bHandled)
-        bHandled = Edit::PreNotify(rNEvt);
+        bHandled = KeyUpDownHdl_Impl(rKEvt);
     return bHandled;
 }
 
-VCL_BUILDER_FACTORY(RubyEdit)
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/dialog/srchdlg.cxx b/svx/source/dialog/srchdlg.cxx
index a3b74d15dfe7..d3ac96e06a9f 100644
--- a/svx/source/dialog/srchdlg.cxx
+++ b/svx/source/dialog/srchdlg.cxx
@@ -257,7 +257,6 @@ SvxSearchDialog::SvxSearchDialog(weld::Window* pParent, SfxChildWindow* pChildWi
     : SfxModelessDialogController(&rBind, pChildWin, pParent,
                                   "svx/ui/findreplacedialog.ui", "FindReplaceDialog")
     , mbSuccess(false)
-    , mbClosing(false)
     , rBindings(rBind)
     , bWriter(false)
     , bSearch(true)
@@ -488,13 +487,6 @@ void SvxSearchDialog::Construct_Impl()
     }
 }
 
-void SvxSearchDialog::EndDialog()
-{
-    mbClosing = true;
-    SfxModelessDialogController::EndDialog();
-    mbClosing = false;
-}
-
 void SvxSearchDialog::Close()
 {
     // remember strings
@@ -519,7 +511,7 @@ void SvxSearchDialog::Close()
     aOpt.SetSearchFormatted         ( m_xSearchFormattedCB->get_active() );
     aOpt.Commit();
 
-    if (mbClosing)
+    if (IsClosing())
         return;
 
     const SfxPoolItem* ppArgs[] = { pSearchItem.get(), nullptr };
diff --git a/svx/uiconfig/ui/asianphoneticguidedialog.ui b/svx/uiconfig/ui/asianphoneticguidedialog.ui
index 84e2324d3d6d..38cb2cce1d09 100644
--- a/svx/uiconfig/ui/asianphoneticguidedialog.ui
+++ b/svx/uiconfig/ui/asianphoneticguidedialog.ui
@@ -1,13 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.22.1 -->
 <interface domain="svx">
   <requires lib="gtk+" version="3.18"/>
-  <requires lib="LibreOffice" version="1.0"/>
   <object class="GtkDialog" id="AsianPhoneticGuideDialog">
     <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="asianphoneticguidedialog|AsianPhoneticGuideDialog">Asian Phonetic Guide</property>
+    <property name="default_width">0</property>
+    <property name="default_height">0</property>
     <property name="type_hint">dialog</property>
+    <child>
+      <placeholder/>
+    </child>
     <child internal-child="vbox">
       <object class="GtkBox" id="dialog-vbox1">
         <property name="can_focus">False</property>
@@ -18,7 +22,7 @@
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
             <child>
-              <object class="GtkButton" id="apply">
+              <object class="GtkButton" id="ok">
                 <property name="label">gtk-apply</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
@@ -34,7 +38,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkButton" id="close">
+              <object class="GtkButton" id="cancel">
                 <property name="label">gtk-close</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
@@ -117,130 +121,142 @@
               <object class="GtkScrolledWindow" id="scrolledwindow">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
+                <property name="hexpand">True</property>
                 <property name="hscrollbar_policy">never</property>
+                <property name="vscrollbar_policy">always</property>
                 <property name="shadow_type">in</property>
                 <child>
                   <object class="GtkViewport" id="viewport1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <child>
-                      <object class="GtkGrid" id="grid1">
+                      <object class="GtkGrid" id="grid">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="margin_right">3</property>
-                        <property name="hexpand">True</property>
-                        <property name="vexpand">True</property>
-                        <property name="column_spacing">3</property>
                         <child>
-                          <object class="svxlo-RubyEdit" id="Left2ED">
+                          <object class="GtkGrid" id="grid1">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <property name="hexpand">True</property>
-                            <child internal-child="accessible">
-                              <object class="AtkObject" id="Left2ED-atkobject">
-                                <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Left2ED-atkobject">Base text</property>
+                            <property name="row_spacing">6</property>
+                            <property name="column_spacing">12</property>
+                            <property name="border_width">6</property>
+                            <child>
+                              <object class="GtkEntry" id="Left2ED">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="hexpand">True</property>
+                                <child internal-child="accessible">
+                                  <object class="AtkObject" id="Left2ED-atkobject">
+                                    <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Left2ED-atkobject">Base text</property>
+                                  </object>
+                                </child>
                               </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                              </packing>
                             </child>
-                          </object>
-                          <packing>
-                            <property name="left_attach">0</property>
-                            <property name="top_attach">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="svxlo-RubyEdit" id="Left1ED">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                          </object>
-                          <packing>
-                            <property name="left_attach">0</property>
-                            <property name="top_attach">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="svxlo-RubyEdit" id="Right1ED">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="hexpand">True</property>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="svxlo-RubyEdit" id="Right2ED">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <child internal-child="accessible">
-                              <object class="AtkObject" id="Right2ED-atkobject">
-                                <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Right2ED-atkobject">Ruby text</property>
+                            <child>
+                              <object class="GtkEntry" id="Left1ED">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
                               </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                              </packing>
                             </child>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="svxlo-RubyEdit" id="Left3ED">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <child internal-child="accessible">
-                              <object class="AtkObject" id="Left3ED-atkobject">
-                                <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Left3ED-atkobject">Base text</property>
+                            <child>
+                              <object class="GtkEntry" id="Right1ED">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="hexpand">True</property>
                               </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                              </packing>
                             </child>
-                          </object>
-                          <packing>
-                            <property name="left_attach">0</property>
-                            <property name="top_attach">2</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="svxlo-RubyEdit" id="Right3ED">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <child internal-child="accessible">
-                              <object class="AtkObject" id="Right3ED-atkobject">
-                                <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Right3ED-atkobject">Ruby text</property>
+                            <child>
+                              <object class="GtkEntry" id="Right2ED">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <child internal-child="accessible">
+                                  <object class="AtkObject" id="Right2ED-atkobject">
+                                    <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Right2ED-atkobject">Ruby text</property>
+                                  </object>
+                                </child>
                               </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                              </packing>
                             </child>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">2</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="svxlo-RubyEdit" id="Right4ED">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <child internal-child="accessible">
-                              <object class="AtkObject" id="Right4ED-atkobject">
-                                <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Right4ED-atkobject">Ruby text</property>
+                            <child>
+                              <object class="GtkEntry" id="Left3ED">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <child internal-child="accessible">
+                                  <object class="AtkObject" id="Left3ED-atkobject">
+                                    <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Left3ED-atkobject">Base text</property>
+                                  </object>
+                                </child>
                               </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">2</property>
+                              </packing>
                             </child>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">3</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="svxlo-RubyEdit" id="Left4ED">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <child internal-child="accessible">
-                              <object class="AtkObject" id="Left4ED-atkobject">
-                                <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Left4ED-atkobject">Base text</property>
+                            <child>
+                              <object class="GtkEntry" id="Right3ED">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <child internal-child="accessible">
+                                  <object class="AtkObject" id="Right3ED-atkobject">
+                                    <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Right3ED-atkobject">Ruby text</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkEntry" id="Right4ED">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <child internal-child="accessible">
+                                  <object class="AtkObject" id="Right4ED-atkobject">
+                                    <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Right4ED-atkobject">Ruby text</property>
+                                  </object>
+                                </child>
                               </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkEntry" id="Left4ED">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <child internal-child="accessible">
+                                  <object class="AtkObject" id="Left4ED-atkobject">
+                                    <property name="AtkObject::accessible-name" translatable="yes" context="asianphoneticguidedialog|Left4ED-atkobject">Base text</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">3</property>
+                              </packing>
                             </child>
                           </object>
                           <packing>
                             <property name="left_attach">0</property>
-                            <property name="top_attach">3</property>
+                            <property name="top_attach">0</property>
                           </packing>
                         </child>
                       </object>
@@ -304,7 +320,7 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkComboBox" id="stylelb">
+                  <object class="GtkComboBoxText" id="stylelb">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="hexpand">True</property>
@@ -386,9 +402,28 @@
               </packing>
             </child>
             <child>
-              <object class="svxlo-RubyPreview" id="preview">
+              <object class="GtkScrolledWindow" id="ctlFavoriteswin">
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="can_focus">True</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="hscrollbar_policy">never</property>
+                <property name="vscrollbar_policy">never</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkViewport">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkDrawingArea" id="preview">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
               </object>
               <packing>
                 <property name="expand">True</property>
@@ -406,8 +441,8 @@
       </object>
     </child>
     <action-widgets>
-      <action-widget response="0">apply</action-widget>
-      <action-widget response="-7">close</action-widget>
+      <action-widget response="-5">ok</action-widget>
+      <action-widget response="-7">cancel</action-widget>
       <action-widget response="-11">help</action-widget>
     </action-widgets>
   </object>
diff --git a/svx/uiconfig/ui/fontworkgallerydialog.ui b/svx/uiconfig/ui/fontworkgallerydialog.ui
index 032cdf9db099..c469c6e539b1 100644
--- a/svx/uiconfig/ui/fontworkgallerydialog.ui
+++ b/svx/uiconfig/ui/fontworkgallerydialog.ui
@@ -99,9 +99,8 @@
             <child>
               <object class="GtkScrolledWindow" id="ctlFavoriteswin">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
+                <property name="can_focus">False</property>
                 <property name="hexpand">True</property>
-                <property name="vexpand">True</property>
                 <property name="hscrollbar_policy">never</property>
                 <property name="vscrollbar_policy">never</property>
                 <property name="shadow_type">in</property>
@@ -112,10 +111,8 @@
                     <child>
                       <object class="GtkDrawingArea" id="ctlFavorites">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
+                        <property name="can_focus">False</property>
                         <property name="hexpand">True</property>
-                        <property name="vexpand">True</property>
                       </object>
                     </child>
                   </object>
diff --git a/sw/qa/uitest/writer_tests2/asianPhoneticGuide.py b/sw/qa/uitest/writer_tests2/asianPhoneticGuide.py
index 88ae6853e5b9..910572aeb6cb 100644
--- a/sw/qa/uitest/writer_tests2/asianPhoneticGuide.py
+++ b/sw/qa/uitest/writer_tests2/asianPhoneticGuide.py
@@ -40,10 +40,10 @@ class asianPhoneticGuide(UITestCase):
         actionProps3 = mkPropertyValues(props3)
         xstylelb.executeAction("SELECT", actionProps3)
 
-        xApplyBtn = xDialog.getChild("apply")
+        xApplyBtn = xDialog.getChild("ok")
         xApplyBtn.executeAction("CLICK", tuple())
 
-        xCloseBtn = xDialog.getChild("close")
+        xCloseBtn = xDialog.getChild("cancel")
         self.ui_test.close_dialog_through_button(xCloseBtn)
 
         self.assertEqual(document.Text.String[0:1], "a")


More information about the Libreoffice-commits mailing list