Resolves: tdf#120977 intended default button overridden

for those cases where the built-in buttons are not
inserted

Change-Id: Ibb091832c097a15dc22a7994d94f8db6a4e47520
Reviewed-on: https://gerrit.libreoffice.org/64492
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/include/vcl/dialog.hxx b/include/vcl/dialog.hxx
index 96690fe..2b3b1f2 100644
--- a/include/vcl/dialog.hxx
+++ b/include/vcl/dialog.hxx
@@ -179,6 +179,7 @@ public:

    void            add_button(PushButton* pButton, int nResponse, bool bTransferOwnership);
    void            set_default_response(int nResponse);
    int             get_default_response();
    vcl::Window*    get_widget_for_response(int nResponse);
};

diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx
index b426ad3..71542d8 100644
--- a/vcl/source/window/dialog.cxx
+++ b/vcl/source/window/dialog.cxx
@@ -1437,6 +1437,43 @@ vcl::Window* Dialog::get_widget_for_response(int response)
    return nullptr;
}

int Dialog::get_default_response()
{
    //copy explicit responses
    std::map<VclPtr<vcl::Window>, short> aResponses(mpDialogImpl->maResponses);

    //add implicit responses
    for (vcl::Window* pChild = mpActionArea->GetWindow(GetWindowType::FirstChild); pChild;
         pChild = pChild->GetWindow(GetWindowType::Next))
    {
        if (aResponses.find(pChild) != aResponses.end())
            continue;
        switch (pChild->GetType())
        {
            case WindowType::OKBUTTON:
                aResponses[pChild] = RET_OK;
                break;
            case WindowType::CANCELBUTTON:
                aResponses[pChild] = RET_CANCEL;
                break;
            case WindowType::HELPBUTTON:
                aResponses[pChild] = RET_HELP;
                break;
            default:
                break;
        }
    }

    for (auto& a : aResponses)
    {
        if (a.first->GetStyle() & WB_DEFBUTTON)
        {
            return a.second;
        }
    }
    return RET_CANCEL;
}

void Dialog::set_default_response(int response)
{
    //copy explicit responses
diff --git a/vcl/source/window/layout.cxx b/vcl/source/window/layout.cxx
index b68fd2db..1b387ea 100644
--- a/vcl/source/window/layout.cxx
+++ b/vcl/source/window/layout.cxx
@@ -2231,7 +2231,7 @@ void MessageDialog::create_message_area()
        assert(pButtonBox);

        VclPtr<PushButton> pBtn;
        short nDefaultResponse = RET_CANCEL;
        short nDefaultResponse = get_default_response();
        switch (m_eButtonsType)
        {
            case VclButtonsType::NONE: