Resolves: tdf#122491 ClassificationDialog::run() is not called

when using DialogController::runAsync so the custom override
isn't called so the special setup and save-on-ok aren't called.

move the setup into the ctor seeing as the dialog is only run once
after ctoring and add a OK handling that does the on-ok setting save and
have setupValues call readIn on "m_aInitialValues" because that
gets called after the ctor

Change-Id: I8183fc4b0f5de2844562c971c86d655f2d4920ff
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92288
Reviewed-by: Michael Stahl <michael.stahl@cib.de>
Tested-by: Jenkins
diff --git a/include/svx/ClassificationDialog.hxx b/include/svx/ClassificationDialog.hxx
index 3d9dace..d03445c 100644
--- a/include/svx/ClassificationDialog.hxx
+++ b/include/svx/ClassificationDialog.hxx
@@ -54,6 +54,7 @@ private:
    std::unique_ptr<weld::CustomWeld> m_xEditWindowWeld;

    DECL_LINK(ButtonClicked, weld::Button&, void);
    DECL_LINK(OkHdl, weld::Button&, void);
    DECL_LINK(SelectToolboxHdl, weld::ToggleButton&, void);
    DECL_LINK(SelectClassificationHdl, weld::ComboBox&, void);
    DECL_LINK(SelectMarkingHdl, weld::TreeView&, bool);
@@ -77,8 +78,6 @@ public:
    ClassificationDialog(weld::Window* pParent, bool bPerParagraph, const std::function<void()>& rParagraphSignHandler = [](){});
    ~ClassificationDialog() override;

    short run() override;

    std::vector<ClassificationResult> getResult();
    void setupValues(std::vector<ClassificationResult> const & rInput);
};
diff --git a/svx/source/dialog/ClassificationDialog.cxx b/svx/source/dialog/ClassificationDialog.cxx
index c81fa7a..89579cd7 100644
--- a/svx/source/dialog/ClassificationDialog.cxx
+++ b/svx/source/dialog/ClassificationDialog.cxx
@@ -178,6 +178,7 @@ ClassificationDialog::ClassificationDialog(weld::Window* pParent, const bool bPe
    , m_xEditWindow(new ClassificationEditView)
    , m_xEditWindowWeld(new weld::CustomWeld(*m_xBuilder, "classificationEditWindow", *m_xEditWindow))
{
    m_xOkButton->connect_clicked(LINK(this, ClassificationDialog, OkHdl));
    m_xSignButton->connect_clicked(LINK(this, ClassificationDialog, ButtonClicked));
    m_xSignButton->set_visible(m_bPerParagraph);

@@ -242,25 +243,9 @@ ClassificationDialog::ClassificationDialog(weld::Window* pParent, const bool bPe
        m_nAsyncExpandEvent = nullptr;

    m_xEditWindow->SetModifyHdl(LINK(this, ClassificationDialog, EditWindowModifiedHdl));
}

//do it async so gtk has a chance to shrink it to best size, otherwise its larger than min
IMPL_LINK_NOARG(ClassificationDialog, OnAsyncExpandHdl, void*, void)
{
    m_nAsyncExpandEvent = nullptr;
    m_xIntellectualPropertyExpander->set_expanded(true);
}

ClassificationDialog::~ClassificationDialog()
{
    if (m_nAsyncExpandEvent)
        Application::RemoveUserEvent(m_nAsyncExpandEvent);
}

short ClassificationDialog::run()
{
    readRecentlyUsed();
    readIn(m_aInitialValues);
    toggleWidgetsDependingOnCategory();

    int nNumber = 1;
    if (m_aRecentlyUsedValuesCollection.empty())
@@ -278,13 +263,19 @@ short ClassificationDialog::run()
            m_xRecentlyUsedListBox->append_text(rDescription);
        }
    }
}

    short nResult = GenericDialogController::run();
    if (nResult == RET_OK)
    {
        writeRecentlyUsed();
    }
    return nResult;
//do it async so gtk has a chance to shrink it to best size, otherwise its larger than min
IMPL_LINK_NOARG(ClassificationDialog, OnAsyncExpandHdl, void*, void)
{
    m_nAsyncExpandEvent = nullptr;
    m_xIntellectualPropertyExpander->set_expanded(true);
}

ClassificationDialog::~ClassificationDialog()
{
    if (m_nAsyncExpandEvent)
        Application::RemoveUserEvent(m_nAsyncExpandEvent);
}

void ClassificationDialog::insertCategoryField(sal_Int32 nID)
@@ -304,6 +295,7 @@ void ClassificationDialog::insertField(ClassificationType eType, OUString const 
void ClassificationDialog::setupValues(std::vector<ClassificationResult> const & rInput)
{
    m_aInitialValues = rInput;
    readIn(m_aInitialValues);
}

void ClassificationDialog::readRecentlyUsed()
@@ -673,6 +665,12 @@ IMPL_LINK(ClassificationDialog, ButtonClicked, weld::Button&, rButton, void)
    }
}

IMPL_LINK_NOARG(ClassificationDialog, OkHdl, weld::Button&, void)
{
    writeRecentlyUsed();
    m_xDialog->response(RET_OK);
}

IMPL_LINK_NOARG(ClassificationDialog, SelectToolboxHdl, weld::ToggleButton&, void)
{
    m_xEditWindow->InvertSelectionWeight();