summaryrefslogtreecommitdiffstats
path: root/include/svtools
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-01-08 10:50:08 +0000
committerCaolán McNamara <caolanm@redhat.com>2020-01-08 18:15:01 +0100
commite653a084ef8693aaf8396e8d6c7fb605f5b59f94 (patch)
tree0a4d81bb9be7def61451302b3201fc369a14643f /include/svtools
parenttdf#96505:Get rid of cargo cult long integer literals (diff)
downloadcore-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.hxx9
-rw-r--r--include/svtools/toolbarmenu.hxx40
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: */