[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - include/vcl vcl/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Sun Dec 9 21:15:09 UTC 2018


 include/vcl/dialog.hxx       |    1 +
 vcl/source/window/dialog.cxx |   37 +++++++++++++++++++++++++++++++++++++
 vcl/source/window/layout.cxx |    2 +-
 3 files changed, 39 insertions(+), 1 deletion(-)

New commits:
commit ca0cd6985adc7b321b9bc4affe79c4f26eab1722
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Dec 3 21:08:49 2018 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Sun Dec 9 22:14:48 2018 +0100

    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 at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>
    (cherry picked from commit 043c2f39bfd5f70885dede547cb3c3b78ed8c5b9)
    Reviewed-on: https://gerrit.libreoffice.org/64619

diff --git a/include/vcl/dialog.hxx b/include/vcl/dialog.hxx
index 8c952c9b668a..e9a257378d34 100644
--- a/include/vcl/dialog.hxx
+++ b/include/vcl/dialog.hxx
@@ -180,6 +180,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 b20ac608762a..285b7c21da15 100644
--- a/vcl/source/window/dialog.cxx
+++ b/vcl/source/window/dialog.cxx
@@ -1423,6 +1423,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 7ee56d5158ab..516155f79ebd 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:


More information about the Libreoffice-commits mailing list