diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2021-06-17 11:50:26 +0200 |
---|---|---|
committer | Szymon Kłos <szymon.klos@collabora.com> | 2021-07-28 14:33:05 +0200 |
commit | 333f0cb495c64439ebd77e86a58297d455b71a13 (patch) | |
tree | 95fbddb6d0cf4d977bd1411181c75aae071e0e4c | |
parent | jsdialog: dump and activate popup windows (diff) | |
download | core-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.hxx | 2 | ||||
-rw-r--r-- | include/vcl/weld.hxx | 2 | ||||
-rw-r--r-- | vcl/jsdialog/executor.cxx | 12 | ||||
-rw-r--r-- | vcl/jsdialog/jsdialogbuilder.cxx | 8 |
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, |