Hi After entering ToolBarManager::RemoveControllers, I put a break point on SvxFontNameBox_Impl::~SvxFontNameBox_Impl and then did mpWindow.clear() in gdb (where mpWindow is the SvxFontNameBox_Impl object wrapped in VclPtr). But gdb did not show a call on the dtor ~SvxFontNameBox_Impl. After further digging, I found that the mnRefCnt of the mpWindow in question was *219* just before the VclPtr was reset. Now I wonder who else increased the ref count of this mpWindow object, why the value is so high and how to proceed from here ?
Thanks, Dennis On Wed, Aug 26, 2015 at 4:23 PM, Dennis Francis <dennisfrancis...@gmail.com> wrote: > 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