diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-12-03 21:08:49 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-12-04 09:50:59 +0100 |
commit | 043c2f39bfd5f70885dede547cb3c3b78ed8c5b9 (patch) | |
tree | f4dffe115a57a8a4920729dcf4d39a81c4e78cc0 | |
parent | 83afe755ba137f7cd572cb42afeff1a47a323dc6 (diff) |
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>
-rw-r--r-- | include/vcl/dialog.hxx | 1 | ||||
-rw-r--r-- | vcl/source/window/dialog.cxx | 37 | ||||
-rw-r--r-- | vcl/source/window/layout.cxx | 2 |
3 files changed, 39 insertions, 1 deletions
diff --git a/include/vcl/dialog.hxx b/include/vcl/dialog.hxx index 96690febcad5..2b3b1f29f2e6 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 b426ad39a613..71542d8bcf93 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 b68fd2dbcba1..1b387ea9d69b 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: |