Sorry, I understand now that pItem->mpWindow is a smart pointer (VclPtr). So the issue may be elsewhere.
Thanks, Dennis On Wed, Aug 26, 2015 at 3:42 PM, Dennis Francis <dennisfrancis...@gmail.com> wrote: > Hi Caolán and Maxim > > Thanks for your replies, My reply is inline. > > On Tue, Aug 25, 2015 at 7:38 PM, Caolán McNamara <caol...@redhat.com> > wrote: > >> Digging into the other examples, I guess that SetItemWindow was called >> on the toolbar with the SvxFontNameBox_Impl window as an argument ? >> > yes. > >> >> If that's the case then the pattern appears to be that what object >> called SetItemWindow on the toolbar should call SetItemWindow(id, 0) to >> remove the window from the toolbar and then call disposeAndClear on the >> window. >> >> i.e. what entity put the item into the toolbar is the same entity that >> has to remove it and dispose it. >> >> What's the reproducing scenario here, is it the fontname widget in the >> standard toolbar, e.g. just start and exit writer to reproduce ? >> > > I think it should work with writer too, I ran soffice --calc and opened a > new spreadsheet and then closed it. > > >> C. >> > > Here is what I observe in gdb : > =========================================================================== > breakpoints were set on : > SvxFontNameBox_Impl::SvxFontNameBox_Impl() > SvxFontNameBox_Impl::FillList() > SvxFontNameBox_Impl::~SvxFontNameBox_Impl() > > Order of calls observed from gdb each with address of SvxFontNameBox_Impl > object : > 1. (SvxFontNameBox_Impl * const) 0x1cd4290, > SvxFontNameBox_Impl::SvxFontNameBox_Impl - from toolbar code > 2. (SvxFontNameBox_Impl * const) 0x1cd4290, SvxFontNameBox_Impl::FillList > 3. (SvxFontNameBox_Impl * const) 0x1e60cc0, > SvxFontNameBox_Impl::SvxFontNameBox_Impl - from sidebar::ControllerFactory > 4. (SvxFontNameBox_Impl * const) 0x1e60cc0, > SvxFontNameBox_Impl::~SvxFontNameBox_Impl - sidebar > 5. (SvxFontNameBox_Impl * const) 0x1e60cc0, > SvxFontNameBox_Impl::~SvxFontNameBox_Impl - sidebar > > > No call of destructor SvxFontNameBox_Impl::~SvxFontNameBox_Impl() for the > instance 0x1cd4290 > > ============================================================================== > > I tried setting break point on > framework::ToolBarManager::RemoveControllers and it calls SetItemWindow(id, > 0) for all items : > m_pToolBar->SetItemWindow(nItemId, 0); > > But in ToolBox::SetItemWindow() method, I think the pItem->mpWindow is > just overwritten and not getting deleted. Is the deletion code missing here > ? > Is it ok to add > > if (pItem->mpWindow) > delete pItem->mpWindow; > > before assigning pNewWindow to it ? > > > 1296 void ToolBox::SetItemWindow( sal_uInt16 nItemId, vcl::Window* > pNewWindow ) > 1297 { > 1298 sal_uInt16 nPos = GetItemPos( nItemId ); > 1299 > 1300 if ( nPos != TOOLBOX_ITEM_NOTFOUND ) > 1301 { > 1302 ImplToolItem* pItem = &mpData->m_aItems[nPos]; > 1303 * pItem->mpWindow = pNewWindow;* > 1304 if ( pNewWindow ) > 1305 pNewWindow->Hide(); > 1306 ImplInvalidate( true ); > 1307 CallEventListeners( VCLEVENT_TOOLBOX_ITEMWINDOWCHANGED, > reinterpret_cast< void* >( nPos ) ); > 1308 } > 1309 } > > Thanks, > Dennis > > http://www.ldcs.co.in >
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice