diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-01-08 10:50:08 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-01-08 18:15:01 +0100 |
commit | e653a084ef8693aaf8396e8d6c7fb605f5b59f94 (patch) | |
tree | 0a4d81bb9be7def61451302b3201fc369a14643f /include/svtools | |
parent | tdf#96505:Get rid of cargo cult long integer literals (diff) | |
download | core-e653a084ef8693aaf8396e8d6c7fb605f5b59f94.tar.gz core-e653a084ef8693aaf8396e8d6c7fb605f5b59f94.zip |
add a scheme to host welded toolbar dropdown windows in unwelded toolbars
Change-Id: I72c9896798740a760eac479bdccaf7825872c01b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86420
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'include/svtools')
-rw-r--r-- | include/svtools/popupwindowcontroller.hxx | 9 | ||||
-rw-r--r-- | include/svtools/toolbarmenu.hxx | 40 |
2 files changed, 44 insertions, 5 deletions
diff --git a/include/svtools/popupwindowcontroller.hxx b/include/svtools/popupwindowcontroller.hxx index 1666c8ad1513..be39cc8e2b69 100644 --- a/include/svtools/popupwindowcontroller.hxx +++ b/include/svtools/popupwindowcontroller.hxx @@ -32,10 +32,8 @@ namespace vcl { class Window; } -namespace svtools -{ - class ToolbarPopupBase; -} +class InterimToolbarPopup; +class WeldToolbarPopup; namespace svt { @@ -69,7 +67,8 @@ public: virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createPopupWindow() override; protected: - std::unique_ptr<svtools::ToolbarPopupBase> mxPopover; + std::unique_ptr<WeldToolbarPopup> mxPopover; + VclPtr<InterimToolbarPopup> mxInterimPopover; private: std::unique_ptr<PopupWindowControllerImpl, o3tl::default_delete<PopupWindowControllerImpl>> mxImpl; diff --git a/include/svtools/toolbarmenu.hxx b/include/svtools/toolbarmenu.hxx index 01c8652d3415..1ff5079e569a 100644 --- a/include/svtools/toolbarmenu.hxx +++ b/include/svtools/toolbarmenu.hxx @@ -26,6 +26,7 @@ #include <rtl/ref.hxx> #include <vcl/dockwin.hxx> +#include <vcl/weld.hxx> namespace com :: sun :: star :: frame { class XFrame; } namespace com :: sun :: star :: frame { struct FeatureStateEvent; } @@ -152,6 +153,45 @@ private: } // namespace svtools +class SVT_DLLPUBLIC WeldToolbarPopup : public svtools::ToolbarPopupBase +{ +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; + +public: + WeldToolbarPopup(const css::uno::Reference<css::frame::XFrame>& rFrame, + weld::Widget* pParent, const OUString& rUIFile, const OString& rId); + virtual ~WeldToolbarPopup() override; + weld::Container* getTopLevel() { return m_xTopLevel.get(); } + weld::Container* getContainer() { return m_xContainer.get(); } + + virtual void GrabFocus() = 0; +}; + +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; +public: + InterimToolbarPopup(const css::uno::Reference<css::frame::XFrame>& rFrame, vcl::Window* pParent, WeldToolbarPopup* pPopup); + weld::Container* getContainer() { return m_xContainer.get(); } + virtual void dispose() override; + virtual ~InterimToolbarPopup() override; + + virtual void GetFocus() override; + + using ToolbarPopup::EndPopupMode; +}; + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |