From e9da91fd028e73846b1bed2618357d0abfbdcc57 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Tue, 8 Nov 2016 16:15:55 +0200 Subject: tdf#103756 - CTRL+Z not working to undo changes performed through Navigator Hooked up the tree control to do explicit handling of accelerator key input. Change-Id: I8b47fc2d651f7db2549c73c5314fbc4a7f4efecc Reviewed-on: https://gerrit.libreoffice.org/30694 Tested-by: Jenkins Reviewed-by: Miklos Vajna --- sd/source/ui/dlg/sdtreelb.cxx | 19 +++++++++++++++++++ sd/source/ui/inc/sdtreelb.hxx | 9 +++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx index 19baf9a76f07..9b9416a279e0 100644 --- a/sd/source/ui/dlg/sdtreelb.cxx +++ b/sd/source/ui/dlg/sdtreelb.cxx @@ -49,6 +49,7 @@ #include #include #include +#include #include #include #include @@ -56,6 +57,8 @@ #include #include #include + + using namespace com::sun::star; class SdPageObjsTLB::IconProvider @@ -214,8 +217,19 @@ SdPageObjsTLB::SdPageObjsTLB( vcl::Window* pParentWin, WinBits nStyle ) SetDragDropMode( DragDropMode::CTRL_MOVE | DragDropMode::CTRL_COPY | DragDropMode::APP_MOVE | DragDropMode::APP_COPY | DragDropMode::APP_DROP ); + + m_pAccel = ::svt::AcceleratorExecute::createAcceleratorHelper(); } +void SdPageObjsTLB::SetViewFrame( SfxViewFrame* pViewFrame ) +{ + mpFrame = pViewFrame; + sd::ViewShellBase* pBase = sd::ViewShellBase::GetViewShellBase(pViewFrame); + const css::uno::Reference< css::frame::XFrame > xFrame = pBase->GetMainViewShell()->GetViewFrame()->GetFrame().GetFrameInterface(); + m_pAccel->init(::comphelper::getProcessComponentContext(), xFrame); +} + + SdPageObjsTLB::~SdPageObjsTLB() { disposeOnce(); @@ -230,6 +244,7 @@ void SdPageObjsTLB::dispose() delete mpMedium; mpParent.clear(); mpDropNavWin.clear(); + m_pAccel.reset(); SvTreeListBox::dispose(); } @@ -1037,6 +1052,10 @@ void SdPageObjsTLB::SelectHdl() */ void SdPageObjsTLB::KeyInput( const KeyEvent& rKEvt ) { + const vcl::KeyCode& aKeyCode = rKEvt.GetKeyCode(); + if ( m_pAccel->execute( aKeyCode ) ) + // the accelerator consumed the event + return; if( rKEvt.GetKeyCode().GetCode() == KEY_RETURN ) { // commented code from svtools/source/contnr/svimpbox.cxx diff --git a/sd/source/ui/inc/sdtreelb.hxx b/sd/source/ui/inc/sdtreelb.hxx index a7c12d720414..2053c8d5128f 100644 --- a/sd/source/ui/inc/sdtreelb.hxx +++ b/sd/source/ui/inc/sdtreelb.hxx @@ -50,6 +50,9 @@ class DrawDocShell; typedef ::tools::SvRef DrawDocShellRef; #endif } +namespace svt { + class AcceleratorExecute; +} /** * Effect-Tab-Dialog @@ -62,6 +65,8 @@ private: // set contenttree in SdNavigatorWin bool bisInSdNavigatorWin; + + ::std::unique_ptr< ::svt::AcceleratorExecute> m_pAccel; public: // nested class to implement the TransferableHelper @@ -182,7 +187,7 @@ protected: public: SdPageObjsTLB(vcl::Window* pParent, WinBits nStyle); - virtual ~SdPageObjsTLB() override; + virtual ~SdPageObjsTLB() override; virtual void dispose() override; // helper function for GetEntryAltText and GetEntryLongDescription @@ -192,7 +197,7 @@ public: virtual void SelectHdl() override; virtual void KeyInput( const KeyEvent& rKEvt ) override; - void SetViewFrame( SfxViewFrame* pViewFrame ) { mpFrame = pViewFrame; } + void SetViewFrame( SfxViewFrame* pViewFrame ); void Fill( const SdDrawDocument*, bool bAllPages, const OUString& rDocName ); void Fill( const SdDrawDocument*, SfxMedium* pSfxMedium, const OUString& rDocName ); -- cgit