summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2021-06-17 11:50:26 +0200
committerSzymon Kłos <szymon.klos@collabora.com>2021-07-28 14:33:05 +0200
commit333f0cb495c64439ebd77e86a58297d455b71a13 (patch)
tree95fbddb6d0cf4d977bd1411181c75aae071e0e4c
parentjsdialog: dump and activate popup windows (diff)
downloadcore-333f0cb495c64439ebd77e86a58297d455b71a13.tar.gz
core-333f0cb495c64439ebd77e86a58297d455b71a13.zip
jsdialog: handle popover close
Change-Id: I8b5afe7438c57cfe0553475131bed1e3c4921f46 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117373 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Szymon Kłos <szymon.klos@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119598 Tested-by: Szymon Kłos <szymon.klos@collabora.com>
-rw-r--r--include/vcl/jsdialog/executor.hxx2
-rw-r--r--include/vcl/weld.hxx2
-rw-r--r--vcl/jsdialog/executor.cxx12
-rw-r--r--vcl/jsdialog/jsdialogbuilder.cxx8
4 files changed, 22 insertions, 2 deletions
diff --git a/include/vcl/jsdialog/executor.hxx b/include/vcl/jsdialog/executor.hxx
index c6d7dceb60c7..787c4d5a0f54 100644
--- a/include/vcl/jsdialog/executor.hxx
+++ b/include/vcl/jsdialog/executor.hxx
@@ -54,6 +54,8 @@ public:
{
rSpinButton.signal_value_changed();
}
+
+ static void trigger_closed(weld::Popover& rPopover) { rPopover.signal_closed(); }
};
namespace jsdialog
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 3e085e0af6aa..ee647b341e21 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -2335,6 +2335,8 @@ public:
class VCL_DLLPUBLIC Popover : virtual public Container
{
+ friend class ::LOKTrigger;
+
private:
Link<weld::Popover&, void> m_aCloseHdl;
diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx
index 5675ec0b56f0..c1882d5a2d5b 100644
--- a/vcl/jsdialog/executor.cxx
+++ b/vcl/jsdialog/executor.cxx
@@ -397,6 +397,18 @@ bool ExecuteAction(sal_uInt64 nWindowId, const OString& rWidget, StringMap& rDat
}
}
}
+ else if (sControlType == "popover")
+ {
+ auto pPopover = dynamic_cast<weld::Popover*>(pWidget);
+ if (pPopover)
+ {
+ if (sAction == "close")
+ {
+ LOKTrigger::trigger_closed(*pPopover);
+ return true;
+ }
+ }
+ }
else if (sControlType == "radiobutton")
{
auto pRadioButton = dynamic_cast<weld::RadioButton*>(pWidget);
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index a0b17f23bf08..65414c46ed5f 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -909,7 +909,7 @@ std::unique_ptr<weld::MenuButton> JSInstanceBuilder::weld_menu_button(const OStr
std::unique_ptr<weld::Popover> JSInstanceBuilder::weld_popover(const OString& id)
{
DockingWindow* pDockingWindow = m_xBuilder->get<DockingWindow>(id);
- std::unique_ptr<weld::Popover> pRet(
+ std::unique_ptr<weld::Popover> pWeldWidget(
pDockingWindow ? new JSPopover(this, pDockingWindow, this, false) : nullptr);
if (pDockingWindow)
{
@@ -927,7 +927,11 @@ std::unique_ptr<weld::Popover> JSInstanceBuilder::weld_popover(const OString& id
initializeSender(GetNotifierWindow(), GetContentWindow(), GetTypeOfJSON());
}
}
- return pRet;
+
+ if (pWeldWidget)
+ RememberWidget("__POPOVER__", pWeldWidget.get());
+
+ return pWeldWidget;
}
weld::MessageDialog* JSInstanceBuilder::CreateMessageDialog(weld::Widget* pParent,