include/vcl/jsdialog/executor.hxx | 10 ++++++++++ include/vcl/weld.hxx | 2 ++ vcl/inc/jsdialog/jsdialogbuilder.hxx | 17 +++++++++++++++++ vcl/jsdialog/executor.cxx | 3 +++ vcl/jsdialog/jsdialogbuilder.cxx | 14 ++++++++++++++ 5 files changed, 46 insertions(+)
New commits: commit cc067789ab7fd67bdd6f6ba8ce53a6580a56d7ff Author: Szymon Kłos <szymon.k...@collabora.com> AuthorDate: Tue Dec 6 18:23:32 2022 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Fri Dec 16 19:49:56 2022 +0000 jsdialog: enter/leave tab page handlers (cherry picked from commit 1257c288a0ba03fc69e7bc29fcf05642eb91d150) Change-Id: I2cbc0fc18f716bf214db61f0729d666a1d2d172c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/144344 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/include/vcl/jsdialog/executor.hxx b/include/vcl/jsdialog/executor.hxx index 6e388a6a3f79..9bccad3f1865 100644 --- a/include/vcl/jsdialog/executor.hxx +++ b/include/vcl/jsdialog/executor.hxx @@ -72,6 +72,16 @@ public: { rArea.m_aCommandHdl.Call(rCmd); } + + static void enter_page(weld::Notebook& rNotebook, const OString& rPage) + { + rNotebook.m_aEnterPageHdl.Call(rPage); + } + + static void leave_page(weld::Notebook& rNotebook, const OString& rPage) + { + rNotebook.m_aLeavePageHdl.Call(rPage); + } }; namespace jsdialog diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 3bcbc0a7a08d..c9273bf4743b 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -463,6 +463,8 @@ public: class VCL_DLLPUBLIC Notebook : virtual public Widget { + friend class ::LOKTrigger; + protected: Link<const OString&, bool> m_aLeavePageHdl; Link<const OString&, void> m_aEnterPageHdl; diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx index 291fd24babb7..564309a72626 100644 --- a/vcl/inc/jsdialog/jsdialogbuilder.hxx +++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx @@ -534,6 +534,12 @@ public: class JSNotebook final : public JSWidget<SalInstanceNotebook, ::TabControl> { + Link<const OString&, bool> m_aLeavePageOverridenHdl; + Link<const OString&, void> m_aEnterPageOverridenHdl; + + DECL_LINK(LeaveHdl, const OString&, bool); + DECL_LINK(EnterHdl, const OString&, bool); + public: JSNotebook(JSDialogSender* pSender, ::TabControl* pControl, SalInstanceBuilder* pBuilder, bool bTakeOwnership); @@ -545,6 +551,17 @@ public: virtual void remove_page(const OString& rIdent) override; virtual void insert_page(const OString& rIdent, const OUString& rLabel, int nPos) override; + + void connect_leave_page(const Link<const OString&, bool>& rLink) + { + m_aLeavePageHdl = LINK(this, JSNotebook, LeaveHdl); + m_aLeavePageOverridenHdl = rLink; + } + void connect_enter_page(const Link<const OString&, void>& rLink) + { + m_aLeavePageHdl = LINK(this, JSNotebook, EnterHdl); + m_aEnterPageOverridenHdl = rLink; + } }; class JSSpinButton final : public JSWidget<SalInstanceSpinButton, ::FormattedField> diff --git a/vcl/jsdialog/executor.cxx b/vcl/jsdialog/executor.cxx index 51dcca8f5d16..acd0e084ae76 100644 --- a/vcl/jsdialog/executor.cxx +++ b/vcl/jsdialog/executor.cxx @@ -91,7 +91,10 @@ bool ExecuteAction(const std::string& nWindowId, const OString& rWidget, StringM { sal_Int32 page = o3tl::toInt32(rData["data"]); + OString aCurrentPage = pNotebook->get_current_page_ident(); + LOKTrigger::leave_page(*pNotebook, aCurrentPage); pNotebook->set_current_page(page); + LOKTrigger::enter_page(*pNotebook, pNotebook->get_page_ident(page)); return true; } diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index da30834b0568..51566201638d 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1315,6 +1315,20 @@ void JSComboBox::set_active(int pos) bool JSComboBox::changed_by_direct_pick() const { return true; } +IMPL_LINK(JSNotebook, LeaveHdl, const OString&, rPage, bool) +{ + m_aLeavePageOverridenHdl.Call(rPage); + sendFullUpdate(); + return true; +} + +IMPL_LINK(JSNotebook, EnterHdl, const OString&, rPage, bool) +{ + m_aEnterPageOverridenHdl.Call(rPage); + sendFullUpdate(); + return true; +} + JSNotebook::JSNotebook(JSDialogSender* pSender, ::TabControl* pControl, SalInstanceBuilder* pBuilder, bool bTakeOwnership) : JSWidget<SalInstanceNotebook, ::TabControl>(pSender, pControl, pBuilder, bTakeOwnership)