sd/source/ui/dlg/NavigatorChildWindow.cxx | 4 +++- sd/source/ui/dlg/navigatr.cxx | 15 ++++++++++----- sd/source/ui/inc/navigatr.hxx | 4 ++-- sd/source/ui/sidebar/NavigatorWrapper.cxx | 4 ++-- 4 files changed, 17 insertions(+), 10 deletions(-)
New commits: commit 15532c9a1f8259d258acd1329661c0c920736662 Author: Caolán McNamara <caol...@redhat.com> Date: Thu May 7 14:12:22 2015 +0100 VclPtr: clicking on sidebar impress navigator crashes not sure how this ever worked, the callback is called at the end of the ctor and the callback is in the parent obj which dereferences the pointer to this obj before that pointer has been set. Just split the ctor into a ctor and a follow up post ctor init method. Change-Id: I04855c8ac95592801f2ebf0b974a9a7b597d0327 diff --git a/sd/source/ui/dlg/NavigatorChildWindow.cxx b/sd/source/ui/dlg/NavigatorChildWindow.cxx index 0beb6d1..e1b8306 100644 --- a/sd/source/ui/dlg/NavigatorChildWindow.cxx +++ b/sd/source/ui/dlg/NavigatorChildWindow.cxx @@ -57,7 +57,9 @@ NavigatorChildWindow::NavigatorChildWindow ( pParent, this, SdResId( FLT_NAVIGATOR ), - pBindings, + pBindings); + + pNavWin->SetUpdateRequestFunctor( ::boost::bind(RequestNavigatorUpdate, pBindings)); SetWindow( pNavWin ); diff --git a/sd/source/ui/dlg/navigatr.cxx b/sd/source/ui/dlg/navigatr.cxx index 987818b..ec19ebf 100644 --- a/sd/source/ui/dlg/navigatr.cxx +++ b/sd/source/ui/dlg/navigatr.cxx @@ -65,8 +65,7 @@ SdNavigatorWin::SdNavigatorWin( vcl::Window* pParent, ::sd::NavigatorChildWindow* pChWinCtxt, const SdResId& rSdResId, - SfxBindings* pInBindings, - const UpdateRequestFunctor& rUpdateRequest) + SfxBindings* pInBindings) : vcl::Window( pParent, rSdResId ) , maToolbox ( VclPtr<ToolBox>::Create( this, SdResId( 1 ) ) ) , maTlbObjects( VclPtr<SdPageObjsTLB>::Create( this, SdResId( TLB_OBJECTS ) ) ) @@ -76,6 +75,8 @@ SdNavigatorWin::SdNavigatorWin( // On changes of the DragType: adjust SelectionMode of TLB! , meDragType ( NAVIGATOR_DRAGTYPE_EMBEDDED ) , mpBindings ( pInBindings ) + , mpNavigatorCtrlItem( 0 ) + , mpPageNameCtrlItem( 0 ) , maImageList ( SdResId( IL_NAVIGATR ) ) { maTlbObjects->SetViewFrame( mpBindings->GetDispatcher()->GetFrame() ); @@ -84,9 +85,6 @@ SdNavigatorWin::SdNavigatorWin( maTlbObjects->SetAccessibleName(SD_RESSTR(STR_OBJECTS_TREE)); - mpNavigatorCtrlItem = new SdNavigatorControllerItem( SID_NAVIGATOR_STATE, this, mpBindings, rUpdateRequest); - mpPageNameCtrlItem = new SdPageNameControllerItem( SID_NAVIGATOR_PAGENAME, this, mpBindings, rUpdateRequest); - ApplyImageList(); // load images *before* calculating sizes to get something useful !!! Size aTbxSize( maToolbox->CalcWindowSizePixel() ); @@ -145,6 +143,13 @@ SdNavigatorWin::SdNavigatorWin( if (pDockingParent != NULL) pDockingParent->SetMinOutputSizePixel( maMinSize ); +} + +void SdNavigatorWin::SetUpdateRequestFunctor(const UpdateRequestFunctor& rUpdateRequest) +{ + mpNavigatorCtrlItem = new SdNavigatorControllerItem( SID_NAVIGATOR_STATE, this, mpBindings, rUpdateRequest); + mpPageNameCtrlItem = new SdPageNameControllerItem( SID_NAVIGATOR_PAGENAME, this, mpBindings, rUpdateRequest); + // InitTlb; is initiated over Slot if (rUpdateRequest) rUpdateRequest(); diff --git a/sd/source/ui/inc/navigatr.hxx b/sd/source/ui/inc/navigatr.hxx index ed682fd..77b7a7e 100644 --- a/sd/source/ui/inc/navigatr.hxx +++ b/sd/source/ui/inc/navigatr.hxx @@ -95,8 +95,8 @@ public: vcl::Window* pParent, ::sd::NavigatorChildWindow* pChildWinContext, const SdResId& rSdResId, - SfxBindings* pBindings, - const UpdateRequestFunctor& rUpdateRequest); + SfxBindings* pBindings); + void SetUpdateRequestFunctor(const UpdateRequestFunctor& rUpdateRequest); virtual ~SdNavigatorWin(); virtual void dispose() SAL_OVERRIDE; diff --git a/sd/source/ui/sidebar/NavigatorWrapper.cxx b/sd/source/ui/sidebar/NavigatorWrapper.cxx index 376d22b..972a737 100644 --- a/sd/source/ui/sidebar/NavigatorWrapper.cxx +++ b/sd/source/ui/sidebar/NavigatorWrapper.cxx @@ -37,9 +37,9 @@ NavigatorWrapper::NavigatorWrapper ( this, (::sd::NavigatorChildWindow*)NULL, SdResId(FLT_NAVIGATOR), - pBindings, - ::boost::bind(&NavigatorWrapper::UpdateNavigator, this))) + pBindings)) { + maNavigator->SetUpdateRequestFunctor(::boost::bind(&NavigatorWrapper::UpdateNavigator, this)); maNavigator->SetPosSizePixel( Point(0,0), GetSizePixel());
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits