[Libreoffice-commits] core.git: include/vcl vcl/source

Szymon Kłos eszkadev at gmail.com
Thu Jan 5 09:37:16 UTC 2017


 include/vcl/notebookbar.hxx        |    6 ++++++
 vcl/source/control/notebookbar.cxx |   27 +++++++++++++++++++++++++++
 vcl/source/window/syswin.cxx       |    2 ++
 3 files changed, 35 insertions(+)

New commits:
commit 9152f16b7901af6bceaa296b8e0fc171ee5fe03c
Author: Szymon Kłos <eszkadev at gmail.com>
Date:   Tue Dec 27 17:58:09 2016 +0100

    tdf#102059 NotebookBar accessible using F6 key
    
    Change-Id: I873c49d8c0557eb3702de921fb5d2281acfed526
    Reviewed-on: https://gerrit.libreoffice.org/32459
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Maxim Monastirsky <momonasmon at gmail.com>

diff --git a/include/vcl/notebookbar.hxx b/include/vcl/notebookbar.hxx
index a2ad0fe..cf01dc6 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 40e3f84..1a1de02 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 c96939d..21cdeb3 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);
     }
 }
 


More information about the Libreoffice-commits mailing list