Resolves: tdf#127218 allow changes dialog to shrink when button text changes

original the dialog has super wide button contents when the initial size
is calculated, and then the buttons are changed afterwards, but the dialog
remains at its initial size.

Change-Id: Ib29ab9ebdec01a93561a8b304572df60b6ad5ad2
Reviewed-on: https://gerrit.libreoffice.org/79635
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@cib.de>
diff --git a/include/svx/ctredlin.hxx b/include/svx/ctredlin.hxx
index 16147e6..238207c 100644
--- a/include/svx/ctredlin.hxx
+++ b/include/svx/ctredlin.hxx
@@ -269,6 +269,7 @@ private:
    bool bEnableRejectAll;
    bool bEnableUndo;

    weld::Window* m_pDialog;
    std::unique_ptr<weld::Button> m_xAccept;
    std::unique_ptr<weld::Button> m_xReject;
    std::unique_ptr<weld::Button> m_xAcceptAll;
@@ -279,7 +280,7 @@ private:
    DECL_LINK( PbClickHdl, weld::Button&, void );

public:
    SvxTPView(weld::Container* pParent, weld::Builder* pTopLevel);
    SvxTPView(weld::Container* pParent, weld::Window* pDialog, weld::Builder* pTopLevel);
    virtual ~SvxTPView() override;

    SvxRedlinTable* GetTableControl() { return m_xViewData.get(); }
@@ -288,7 +289,7 @@ public:
    void            EnableAcceptAll(bool bFlag);
    void            EnableReject(bool bFlag);
    void            EnableRejectAll(bool bFlag);
    static void     EnableClearFormatButton(weld::Button&, bool bFlag);
    void            EnableClearFormatButton(weld::Button&, bool bFlag);
    void            EnableClearFormat(bool bFlag);
    void            EnableClearFormatAll(bool bFlag);
    void            EnableUndo(bool bFlag=true);
@@ -323,7 +324,7 @@ private:
    DECL_DLLPRIVATE_LINK(DeactivatePageHdl, const OString&, bool);

public:
    SvxAcceptChgCtr(weld::Container* pParent, weld::Builder* pTopLevel);
    SvxAcceptChgCtr(weld::Container* pParent, weld::Window* pDialog, weld::Builder* pTopLevel);
    ~SvxAcceptChgCtr();

    void            ShowFilterPage();
diff --git a/sc/source/ui/miscdlgs/acredlin.cxx b/sc/source/ui/miscdlgs/acredlin.cxx
index 44d89d2..d94d3ce66 100644
--- a/sc/source/ui/miscdlgs/acredlin.cxx
+++ b/sc/source/ui/miscdlgs/acredlin.cxx
@@ -101,7 +101,7 @@ ScAcceptChgDlg::ScAcceptChgDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Windo
    , m_xContentArea(m_xDialog->weld_content_area())
    , m_xPopup(m_xBuilder->weld_menu("calcmenu"))
{
    m_xAcceptChgCtr.reset(new SvxAcceptChgCtr(m_xContentArea.get(), m_xBuilder.get()));
    m_xAcceptChgCtr.reset(new SvxAcceptChgCtr(m_xContentArea.get(), m_xDialog.get(), m_xBuilder.get()));
    nAcceptCount=0;
    nRejectCount=0;
    aReOpenIdle.SetInvokeHandler(LINK( this, ScAcceptChgDlg, ReOpenTimerHdl ));
diff --git a/svx/source/dialog/ctredlin.cxx b/svx/source/dialog/ctredlin.cxx
index 9cdfe60..e4e8eeb 100644
--- a/svx/source/dialog/ctredlin.cxx
+++ b/svx/source/dialog/ctredlin.cxx
@@ -311,13 +311,14 @@ void SvxTPage::DeactivatePage()
{
}

SvxTPView::SvxTPView(weld::Container* pParent, weld::Builder* pTopLevel)
SvxTPView::SvxTPView(weld::Container* pParent, weld::Window* pDialog, weld::Builder* pTopLevel)
    : SvxTPage(pParent, "svx/ui/redlineviewpage.ui", "RedlineViewPage")
    , bEnableAccept(true)
    , bEnableAcceptAll(true)
    , bEnableReject(true)
    , bEnableRejectAll(true)
    , bEnableUndo(true)
    , m_pDialog(pDialog)
    , m_xAccept(pTopLevel->weld_button("accept"))
    , m_xReject(pTopLevel->weld_button("reject"))
    , m_xAcceptAll(pTopLevel->weld_button("acceptall"))
@@ -443,6 +444,12 @@ void SvxTPView::EnableClearFormatButton(weld::Button& rButton, bool bFlag)
            rButton.set_label(sText.copy(0, nPos - 1));
        }
    }

    if (m_pDialog)
    {
        // tdf#127218 allow dialog to shrink
        m_pDialog->resize_to_request();
    }
}

void SvxTPView::EnableClearFormat(bool bFlag)
@@ -985,7 +992,7 @@ IMPL_LINK_NOARG(SvxTPFilter, RefHandle, weld::Button&, void)
    aRefLink.Call(this);
}

SvxAcceptChgCtr::SvxAcceptChgCtr(weld::Container* pParent, weld::Builder* pTopLevel)
SvxAcceptChgCtr::SvxAcceptChgCtr(weld::Container* pParent, weld::Window* pDialog, weld::Builder* pTopLevel)
    : m_xBuilder(Application::CreateBuilder(pParent, "svx/ui/redlinecontrol.ui"))
    , m_xTabCtrl(m_xBuilder->weld_notebook("RedlineControl"))
{
@@ -993,7 +1000,7 @@ SvxAcceptChgCtr::SvxAcceptChgCtr(weld::Container* pParent, weld::Builder* pTopLe
    m_xTabCtrl->connect_leave_page(LINK(this, SvxAcceptChgCtr, DeactivatePageHdl));

    m_xTPFilter.reset(new SvxTPFilter(m_xTabCtrl->get_page("filter")));
    m_xTPView.reset(new SvxTPView(m_xTabCtrl->get_page("view"), pTopLevel));
    m_xTPView.reset(new SvxTPView(m_xTabCtrl->get_page("view"), pDialog, pTopLevel));
    m_xTPFilter->SetRedlinTable(m_xTPView->GetTableControl());
    m_xTabCtrl->set_current_page("view");
    m_xTabCtrl->show();
diff --git a/sw/source/uibase/misc/redlndlg.cxx b/sw/source/uibase/misc/redlndlg.cxx
index 7e46cf8..9d2db97 100644
--- a/sw/source/uibase/misc/redlndlg.cxx
+++ b/sw/source/uibase/misc/redlndlg.cxx
@@ -151,7 +151,7 @@ SwRedlineAcceptDlg::SwRedlineAcceptDlg(const std::shared_ptr<weld::Window>& rPar
    , m_bOnlyFormatedRedlines(false)
    , m_bRedlnAutoFormat(bAutoFormat)
    , m_bInhibitActivate(false)
    , m_xTabPagesCTRL(new SvxAcceptChgCtr(pContentArea, pBuilder))
    , m_xTabPagesCTRL(new SvxAcceptChgCtr(pContentArea, m_xParentDlg.get(), pBuilder))
    , m_xPopup(pBuilder->weld_menu("writermenu"))
{
    m_xTabPagesCTRL->set_help_id(HID_REDLINE_CTRL);