summaryrefslogtreecommitdiff
path: root/include/svtools/toolbarmenu.hxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-01-09 15:45:46 +0000
committerCaolán McNamara <caolanm@redhat.com>2020-01-10 15:13:45 +0100
commit14e26096f0476b8ecb70511c304a0cdf5440ef7a (patch)
tree9aca765b2599b23ad5d88e37877c345c1a71c254 /include/svtools/toolbarmenu.hxx
parent9b97efd4228489f2e54a948e676917e50902fd33 (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.hxx31
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;