summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/notebookbar.hxx6
-rw-r--r--vcl/source/control/notebookbar.cxx27
-rw-r--r--vcl/source/window/syswin.cxx2
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);
}
}