diff options
-rw-r--r-- | include/vcl/notebookbar.hxx | 6 | ||||
-rw-r--r-- | vcl/source/control/notebookbar.cxx | 27 | ||||
-rw-r--r-- | vcl/source/window/syswin.cxx | 2 |
3 files changed, 35 insertions, 0 deletions
diff --git a/include/vcl/notebookbar.hxx b/include/vcl/notebookbar.hxx index a2ad0fecae7e..cf01dc669707 100644 --- a/include/vcl/notebookbar.hxx +++ b/include/vcl/notebookbar.hxx @@ -16,6 +16,8 @@ #include <sfx2/notebookbar/NotebookbarContextControl.hxx> #include <com/sun/star/ui/XContextChangeEventListener.hpp> +class SystemWindow; + /// This implements Widget Layout-based notebook-like menu bar. class VCL_DLLPUBLIC NotebookBar : public Control, public VclBuilderContainer { @@ -25,13 +27,17 @@ public: virtual ~NotebookBar() override; virtual void dispose() SAL_OVERRIDE; + virtual bool PreNotify( NotifyEvent& rNEvt ) override; virtual Size GetOptimalSize() const SAL_OVERRIDE; virtual void setPosSizePixel(long nX, long nY, long nWidth, long nHeight, PosSizeFlags nFlags = PosSizeFlags::All) SAL_OVERRIDE; void SetIconClickHdl(Link<NotebookBar*, void> aHdl); + void SetSystemWindow(SystemWindow* pSystemWindow); + const css::uno::Reference<css::ui::XContextChangeEventListener>& getContextChangeEventListener() const { return m_pEventListener; } private: + VclPtr<SystemWindow> m_pSystemWindow; css::uno::Reference<css::ui::XContextChangeEventListener> m_pEventListener; NotebookbarContextControl* m_pContextContainer; }; diff --git a/vcl/source/control/notebookbar.cxx b/vcl/source/control/notebookbar.cxx index 40e3f8480219..1a1de0208da8 100644 --- a/vcl/source/control/notebookbar.cxx +++ b/vcl/source/control/notebookbar.cxx @@ -10,6 +10,7 @@ #include <vcl/layout.hxx> #include <vcl/tabctrl.hxx> #include <vcl/notebookbar.hxx> +#include <vcl/taskpanelist.hxx> #include <cppuhelper/queryinterface.hxx> #include <cppuhelper/implbase.hxx> @@ -50,11 +51,27 @@ NotebookBar::~NotebookBar() void NotebookBar::dispose() { + if (m_pSystemWindow && m_pSystemWindow->ImplIsInTaskPaneList(this)) + { + m_pSystemWindow->GetTaskPaneList()->RemoveWindow(this); + m_pSystemWindow.clear(); + } disposeBuilder(); m_pEventListener.clear(); Control::dispose(); } +bool NotebookBar::PreNotify(NotifyEvent& rNEvt) +{ + // capture KeyEvents for taskpane cycling + if (rNEvt.GetType() == MouseNotifyEvent::KEYINPUT) + { + if (m_pSystemWindow) + return m_pSystemWindow->PreNotify(rNEvt); + } + return Window::PreNotify( rNEvt ); +} + Size NotebookBar::GetOptimalSize() const { if (isLayoutEnabled(this)) @@ -98,6 +115,16 @@ void NotebookBar::SetIconClickHdl(Link<NotebookBar*, void> aHdl) m_pContextContainer->SetIconClickHdl(aHdl); } +void NotebookBar::SetSystemWindow(SystemWindow* pSystemWindow) +{ + if (m_pSystemWindow) + m_pSystemWindow.clear(); + + m_pSystemWindow = VclPtr<SystemWindow>(pSystemWindow); + if (!m_pSystemWindow->ImplIsInTaskPaneList(this)) + m_pSystemWindow->GetTaskPaneList()->AddWindow(this); +} + void SAL_CALL NotebookBarContextChangeEventListener::notifyContextChangeEvent(const css::ui::ContextChangeEventObject& rEvent) throw (css::uno::RuntimeException, std::exception) { diff --git a/vcl/source/window/syswin.cxx b/vcl/source/window/syswin.cxx index c96939df8724..21cdeb38ec54 100644 --- a/vcl/source/window/syswin.cxx +++ b/vcl/source/window/syswin.cxx @@ -979,6 +979,8 @@ void SystemWindow::SetNotebookBar(const OUString& rUIXMLDescription, const css:: { static_cast<ImplBorderWindow*>(mpWindowImpl->mpBorderWindow.get())->SetNotebookBar(rUIXMLDescription, rFrame); maNotebookBarUIFile = rUIXMLDescription; + if(GetNotebookBar()) + GetNotebookBar()->SetSystemWindow(this); } } |