diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-01-09 15:45:46 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-01-10 15:13:45 +0100 |
commit | 14e26096f0476b8ecb70511c304a0cdf5440ef7a (patch) | |
tree | 9aca765b2599b23ad5d88e37877c345c1a71c254 /include/svtools/toolbarmenu.hxx | |
parent | 9b97efd4228489f2e54a948e676917e50902fd33 (diff) |
make welded toolbars on-demand that were previously on-demand
Change-Id: I795723260deb317093e83d951d968e0b3d3a1850
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86531
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'include/svtools/toolbarmenu.hxx')
-rw-r--r-- | include/svtools/toolbarmenu.hxx | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/include/svtools/toolbarmenu.hxx b/include/svtools/toolbarmenu.hxx index 1ff5079e569a..f06611817797 100644 --- a/include/svtools/toolbarmenu.hxx +++ b/include/svtools/toolbarmenu.hxx @@ -173,16 +173,41 @@ public: virtual void GrabFocus() = 0; }; +// we want to create WeldToolbarPopup on-demand when a toolbar dropdown is +// clicked, but the widget to be shown must exist before the dropdown +// is activated, so ToolbarPopupContainer is that widget and the +// contents of the on-demand created WeldToolbarPopup is placed +// within the ToolbarPopupContainer +class SVT_DLLPUBLIC ToolbarPopupContainer +{ +private: + DECL_LINK(FocusHdl, weld::Widget&, void); + +protected: + std::unique_ptr<weld::Builder> m_xBuilder; + std::unique_ptr<weld::Container> m_xTopLevel; + std::unique_ptr<weld::Container> m_xContainer; + std::unique_ptr<WeldToolbarPopup> m_xPopup; +public: + ToolbarPopupContainer(weld::Widget* pParent); + ~ToolbarPopupContainer(); + weld::Container* getTopLevel() { return m_xTopLevel.get(); } + weld::Container* getContainer() { return m_xContainer.get(); } + + void setPopover(std::unique_ptr<WeldToolbarPopup> xPopup); + void unsetPopover(); +}; + class SVT_DLLPUBLIC InterimToolbarPopup : public svtools::ToolbarPopup { protected: VclPtr<vcl::Window> m_xBox; std::unique_ptr<weld::Builder> m_xBuilder; std::unique_ptr<weld::Container> m_xContainer; - - WeldToolbarPopup* m_pPopup; + std::unique_ptr<WeldToolbarPopup> m_xPopup; public: - InterimToolbarPopup(const css::uno::Reference<css::frame::XFrame>& rFrame, vcl::Window* pParent, WeldToolbarPopup* pPopup); + InterimToolbarPopup(const css::uno::Reference<css::frame::XFrame>& rFrame, vcl::Window* pParent, + std::unique_ptr<WeldToolbarPopup> xPopup); weld::Container* getContainer() { return m_xContainer.get(); } virtual void dispose() override; virtual ~InterimToolbarPopup() override; |