[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.4' - vcl/inc vcl/jsdialog
Henry Castro (via logerrit)
logerrit at kemper.freedesktop.org
Tue Mar 9 12:50:25 UTC 2021
vcl/inc/jsdialog/jsdialogbuilder.hxx | 9 +++++
vcl/jsdialog/jsdialogbuilder.cxx | 58 +++++++++++++++++++++++++++++++++++
2 files changed, 67 insertions(+)
New commits:
commit 94376bb8299db8dfcba6afba16de7845c647ecdd
Author: Henry Castro <hcastro at collabora.com>
AuthorDate: Tue Mar 2 19:09:21 2021 -0400
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue Mar 9 13:49:51 2021 +0100
jsdialog: JSMessageDialog tweaks when builder is nullptr
"CreateMessageDialog" creates the message dialog without
builder, so some buttons need a click handler to close the
message dialog.
Change-Id: I73ac99020abfb23a1b1313468b6b0f5a8a17f039
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111852
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 24dbf8744d03..a6b8021a50b4 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -265,6 +265,9 @@ public:
VclButtonsType eButtonType,
const OUString& rPrimaryMessage);
+ static void AddChildWidget(sal_uInt64 nWindowId, const OString& id, weld::Widget* pWidget);
+ static void RemoveWindowWidget(sal_uInt64 nWindowId);
+
private:
const std::string& GetTypeOfJSON();
VclPtr<vcl::Window>& GetContentWindow();
@@ -466,11 +469,17 @@ public:
class JSMessageDialog : public JSWidget<SalInstanceMessageDialog, ::MessageDialog>
{
std::unique_ptr<JSDialogSender> m_pOwnedSender;
+ std::unique_ptr<JSButton> m_pOK;
+ std::unique_ptr<JSButton> m_pCancel;
+
+ DECL_LINK(OKHdl, weld::Button&, void);
+ DECL_LINK(CancelHdl, weld::Button&, void);
public:
JSMessageDialog(JSDialogSender* pSender, ::MessageDialog* pDialog, SalInstanceBuilder* pBuilder,
bool bTakeOwnership);
JSMessageDialog(::MessageDialog* pDialog, SalInstanceBuilder* pBuilder, bool bTakeOwnership);
+ virtual ~JSMessageDialog();
virtual void set_primary_text(const OUString& rText) override;
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 3fd84f281ef7..b102b557002f 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -520,6 +520,25 @@ void JSInstanceBuilder::RememberWidget(const OString& id, weld::Widget* pWidget)
}
}
+void JSInstanceBuilder::AddChildWidget(sal_uInt64 nWindowId, const OString& id, weld::Widget* pWidget)
+{
+ auto it = GetLOKWeldWidgetsMap().find(nWindowId);
+ if (it != GetLOKWeldWidgetsMap().end())
+ {
+ it->second.erase(id);
+ it->second.insert(WidgetMap::value_type(id, pWidget));
+ }
+}
+
+void JSInstanceBuilder::RemoveWindowWidget(sal_uInt64 nWindowId)
+{
+ auto it = JSInstanceBuilder::GetLOKWeldWidgetsMap().find(nWindowId);
+ if (it != JSInstanceBuilder::GetLOKWeldWidgetsMap().end())
+ {
+ JSInstanceBuilder::GetLOKWeldWidgetsMap().erase(it);
+ }
+}
+
const std::string& JSInstanceBuilder::GetTypeOfJSON() { return m_sTypeOfJSON; }
VclPtr<vcl::Window>& JSInstanceBuilder::GetContentWindow()
@@ -810,6 +829,8 @@ weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* pParen
pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, message.c_str());
}
+ xMessageDialog->SetLOKTunnelingState(false);
+ InsertWindowToMap(xMessageDialog->GetLOKWindowId());
return new JSMessageDialog(xMessageDialog, nullptr, true);
}
@@ -999,6 +1020,43 @@ JSMessageDialog::JSMessageDialog(::MessageDialog* pDialog, SalInstanceBuilder* p
, m_pOwnedSender(new JSDialogSender(pDialog, pDialog, "dialog"))
{
m_pSender = m_pOwnedSender.get();
+
+ if (!pBuilder)
+ {
+ if(::OKButton* pOKBtn = dynamic_cast<::OKButton*>(m_xMessageDialog->get_widget_for_response(RET_OK)))
+ {
+ m_pOK.reset(new JSButton(m_pSender, pOKBtn, nullptr, false));
+ JSInstanceBuilder::AddChildWidget(m_xMessageDialog->GetLOKWindowId(),
+ pOKBtn->get_id().toUtf8(),
+ m_pOK.get());
+ m_pOK->connect_clicked(LINK(this, JSMessageDialog, OKHdl));
+ }
+
+ if(::CancelButton* pCancelBtn = dynamic_cast<::CancelButton*>(m_xMessageDialog->get_widget_for_response(RET_CANCEL)))
+ {
+ m_pCancel.reset(new JSButton(m_pSender, pCancelBtn, nullptr, false));
+ JSInstanceBuilder::AddChildWidget(m_xMessageDialog->GetLOKWindowId(),
+ pCancelBtn->get_id().toUtf8(),
+ m_pCancel.get());
+ m_pCancel->connect_clicked(LINK(this, JSMessageDialog, CancelHdl));
+ }
+ }
+}
+
+JSMessageDialog::~JSMessageDialog()
+{
+ if (m_pOK || m_pCancel)
+ JSInstanceBuilder::RemoveWindowWidget(m_xMessageDialog->GetLOKWindowId());
+}
+
+IMPL_LINK_NOARG(JSMessageDialog, OKHdl, weld::Button&, void)
+{
+ response(RET_OK);
+}
+
+IMPL_LINK_NOARG(JSMessageDialog, CancelHdl, weld::Button&, void)
+{
+ response(RET_CANCEL);
}
void JSMessageDialog::set_primary_text(const OUString& rText)
More information about the Libreoffice-commits
mailing list