vcl/inc/jsdialog/jsdialogbuilder.hxx | 2 ++ vcl/jsdialog/executor.cxx | 8 ++++++++ vcl/jsdialog/jsdialogbuilder.cxx | 35 +++++++++++++++++++++++++++++++++++ vcl/source/window/dialog.cxx | 10 ++++++++++ 4 files changed, 55 insertions(+)
New commits: commit 781d9d11c96c142f285a3d45af02207228f60672 Author: Szymon Kłos <[email protected]> AuthorDate: Mon Feb 8 16:58:44 2021 +0100 Commit: Jan Holesovsky <[email protected]> CommitDate: Tue Feb 9 13:48:41 2021 +0100 jsdialog: handle standard buttons like help - dump response bindings - execute help callback Change-Id: Ib0696b4ba74a186a2b80d49f21a1442d1c520821 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110586 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-by: Jan Holesovsky <[email protected]> diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 00d94d8a03b5..0f3fddc0d69d 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -418,6 +418,8 @@ public: virtual void set_primary_text(const OUString& rText) override; virtual void set_secondary_text(const OUString& rText) override; + + virtual void response(int response) override; }; class JSCheckButton : public JSWidget<SalInstanceCheckButton, ::CheckBox> diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx index 937064875248..4c40109a5057 100644 --- a/vcl/jsdialog/executor.cxx +++ b/vcl/jsdialog/executor.cxx @@ -343,6 +343,14 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& rWidget, StringMap& rDat pDialog->response(RET_CANCEL); return true; } + else if (sAction == "response") + { + OString nResponseString + = OUStringToOString(rData["data"], RTL_TEXTENCODING_ASCII_US); + int nResponse = std::atoi(nResponseString.getStr()); + pDialog->response(nResponse); + return true; + } } } else if (sControlType == "radiobutton") diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index a07ac1959573..e1156bc88c78 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -21,6 +21,23 @@ using namespace weld; +namespace +{ +void response_help(vcl::Window* pWindow) +{ + ::Dialog* pDialog = dynamic_cast<::Dialog*>(pWindow); + if (!pDialog) + return; + + vcl::Window* pButtonWindow = pDialog->get_widget_for_response(RET_HELP); + ::Button* pButton = dynamic_cast<::Button*>(pButtonWindow); + if (!pButton) + return; + + pButton->Click(); +} +} + JSDialogNotifyIdle::JSDialogNotifyIdle(VclPtr<vcl::Window> aNotifierWindow, VclPtr<vcl::Window> aContentWindow, std::string sTypeOfJSON) : Idle("JSDialog notify") @@ -756,6 +773,12 @@ void JSDialog::undo_collapse() void JSDialog::response(int response) { + if (response == RET_HELP) + { + response_help(m_xWidget.get()); + return; + } + sendClose(); SalInstanceDialog::response(response); } @@ -930,6 +953,18 @@ void JSMessageDialog::set_secondary_text(const OUString& rText) sendFullUpdate(); } +void JSMessageDialog::response(int response) +{ + if (response == RET_HELP) + { + response_help(m_xWidget.get()); + return; + } + + sendClose(); + SalInstanceMessageDialog::response(response); +} + JSCheckButton::JSCheckButton(JSDialogSender* pSender, ::CheckBox* pCheckBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership) : JSWidget<SalInstanceCheckButton, ::CheckBox>(pSender, pCheckBox, pBuilder, bTakeOwnership) diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx index ab9a30430b4c..d4437116b725 100644 --- a/vcl/source/window/dialog.cxx +++ b/vcl/source/window/dialog.cxx @@ -1630,6 +1630,16 @@ boost::property_tree::ptree Dialog::DumpAsPropertyTree() nStartPos = nStartPos >= 0 ? nStartPos + 1 : 0; aTree.put("dialogid", sDialogId.copy(nStartPos)); + boost::property_tree::ptree aResponses; + for (auto& rResponse : mpDialogImpl->maResponses) + { + boost::property_tree::ptree aResponse; + aResponse.put("id", rResponse.first->get_id()); + aResponse.put("response", rResponse.second); + aResponses.push_back(std::make_pair("", aResponse)); + } + aTree.add_child("responses", aResponses); + return aTree; } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
